diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md index 57bd2c2e9e4..6bbb41e0a53 100644 --- a/.claude/skills/release/SKILL.md +++ b/.claude/skills/release/SKILL.md @@ -12,7 +12,7 @@ allowed-tools: Bash, Read, Edit, Write, Glob, Grep Perry releases are **tag-last**: nothing public happens until the test gate and every build leg are green. You dispatch `release-packages.yml` with `cut_release=true` on a branch pinned at the release candidate; the workflow then: -1. `preflight` — resolves `vX.Y.Z` from `Cargo.toml` on that SHA, fails fast if the tag already exists, if CLAUDE.md's `**Current Version:**` disagrees, or if `changelog.d/` has no fragments. +1. `preflight` — resolves `vX.Y.Z` from `Cargo.toml` on that SHA, fails fast if the tag already exists or if `changelog.d/` has no fragments. 2. `await-tests` — dispatches `test.yml` (with `tier=full`) + `simctl-tests.yml` on the branch if no suitable run exists on the SHA yet, then polls by head SHA until both are green. For `test.yml` only a run whose `full-suite-gate` job succeeded counts — a green push-to-main sweep or PR-tier run on the same SHA is not release-grade (see docs/src/testing/ci-tiers.md). 3. `build` + `build-cross` — all release binaries, archives as workflow artifacts. 4. `create-release` — **only now** creates the tag + GitHub Release (notes concatenated from `changelog.d/` fragments via `cut_release_notes.sh --notes-only`), and dispatches the tag-rider workflows (docs, benchmark, container-tests) on the new tag. @@ -33,7 +33,7 @@ So a red gate or a broken build leg costs **nothing**: no burned tag, no half-pu ### 2. Read the version + verify the tag is free -- `VERSION` from `[workspace.package]` in `Cargo.toml`; must match CLAUDE.md's `**Current Version:**` line. Disagreement → STOP (preflight would also catch it, but catch it here in seconds). +- `VERSION` from `[workspace.package]` in `Cargo.toml`. - `git ls-remote origin "refs/tags/v$VERSION"` — must be empty. A hit means this version already shipped; land a bump first. ### 3. Pin the candidate + dispatch diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 045b69a861c..ccfb0e081c4 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,9 +2,7 @@ Thanks for contributing to Perry! A few things to know before you submit: 1. Please do NOT bump `[workspace.package] version` in Cargo.toml. -2. Please do NOT edit the "**Current Version:**" line or add a "Recent - Changes" entry in CLAUDE.md. -3. Please do NOT edit CHANGELOG.md. +2. Please do NOT edit CHANGELOG.md. The maintainer folds all of that metadata in at merge time — Perry releases frequently, and version bumps conflict if they live on the @@ -44,6 +42,6 @@ How did you verify this works? A paste of the commands you ran is perfect. ## Checklist -- [ ] I have NOT bumped the workspace version or edited CLAUDE.md / CHANGELOG.md (maintainer handles these at merge) +- [ ] I have NOT bumped the workspace version or edited CHANGELOG.md (maintainer handles these at merge) - [ ] My commits follow the loose `feat:` / `fix:` / `docs:` / `chore:` prefix convention used in the log - [ ] I've read [CONTRIBUTING.md](../CONTRIBUTING.md) and agree to the [Code of Conduct](../CODE_OF_CONDUCT.md) diff --git a/.github/workflows/release-packages.yml b/.github/workflows/release-packages.yml index a931b2a15c1..319f1020891 100644 --- a/.github/workflows/release-packages.yml +++ b/.github/workflows/release-packages.yml @@ -186,10 +186,6 @@ jobs: # Same STOP conditions the /release skill enforces, checked here # so a bad dispatch fails in seconds instead of after 40 min of # builds. - if ! grep -qF "**Current Version:** $VERSION" CLAUDE.md; then - echo "::error::Cargo.toml says $VERSION but CLAUDE.md's Current Version line disagrees — fix the drift before releasing." - exit 1 - fi if gh api "repos/$REPO/git/ref/tags/$TAG" --silent 2>/dev/null; then echo "::error::tag $TAG already exists — the version in Cargo.toml was already released. Land a version bump or use existing_tag to re-publish." exit 1 diff --git a/.gitignore b/.gitignore index 0ecb9c58fa3..041454e5232 100644 --- a/.gitignore +++ b/.gitignore @@ -254,3 +254,6 @@ test-files/.perry-cache/ android-build/app/src/main/jniLibs/ /res/ .cache/wasi/ + +# Stray build/install logs at the repo root +/*.log diff --git a/AGENTS.md b/AGENTS.md index 9b21d1c47e3..e0e0aadd0e8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,69 @@ -# Repository instructions +# AGENTS.md -Before starting work, read `CLAUDE.md` in this directory in full -and follow its instructions. It is the shared source of truth -for both Claude Code and Codex. +Perry compiles TypeScript to native executables: SWC parses, `perry-hir` lowers, `perry-transform` runs IR passes, `perry-codegen` emits LLVM, and the result links against `perry-runtime` and `perry-stdlib`. + +This file holds only what the code cannot tell you and what is expensive to get wrong. Design and internals live in `docs/src/`; point-in-time evidence lives in `docs/audits/`. + +## Every change + +- `main` is protected: PRs only, squash or rebase merge. The only required check is `pr-gate`; `scripts/ci_plan.py --table` shows what runs in each tier (`docs/src/testing/ci-tiers.md`). +- Do not bump the version in a PR, maintainer-authored ones included. `[workspace.package].version` in `Cargo.toml` is the only copy, and the release maintainer bumps it when cutting a release. +- Add `changelog.d/-.md` (see `changelog.d/README.md`). Never edit `CHANGELOG.md`; it is frozen. +- Read `MERGE_GUIDE.md` before landing a queue of PRs. + +## Building and testing + +```bash +cargo build --release -p perry -p perry-runtime-static -p perry-stdlib-static +RUST_TEST_THREADS=1 cargo test --release -p perry-runtime +./scripts/run_gap_tests.sh +cargo run --release -- file.ts --trace hir --focus fnName # one function's HIR +cargo run --release -- file.ts --trace llvm # IR in .perry-trace/llvm/ +``` + +- `perry-runtime` and `perry-stdlib` are rlib-only. The `.a` archives that `perry compile` links come only from the `*-static` wrapper crates. +- `perry-runtime` tests share process-global state. Run them single-threaded; a fixture-precondition failure under parallel threads is interference, not a regression. +- `crates/*/tests/*.rs` suites run on a PR only when the diff names them. Put acceptance coverage in unit tests. +- Files are capped at 2000 lines (`scripts/check_file_size.sh`). + +## TypeScript Parity Status + +The gap suite (`test-files/test_gap_*.ts`) is compared byte-for-byte against `node --experimental-strip-types`. The oracle is Node `26.12.1`, pinned in `.node-version`. Use that exact version locally: when Node cannot run a test, the harness marks it `node_fail` and drops it from the gate silently. The builtin-module matrix (`node scripts/node_compat_matrix.mjs --module `) uses its own pin, `tools.node.version` — currently **26.12.1**, in `external-tools.json`. + +Before believing a red gap shard, A/B the named tests against a pristine `main` build. + +## Silent failures + +These compile and pass locally, then break somewhere else: + +- **NaN-boxing:** use `f64::from_bits(u64)`, never `u64 as f64`. Do not box an already-boxed value. Tags are in `crates/perry-abi/src/lib.rs`. +- **Build cache:** a new `PERRY_*` env var read in a compiler-linked crate must go in `COMPILE_ENV_VARS` (or `COMPILE_ENV_EXCLUSIONS` with a reason) in `crates/perry/src/commands/compile/compile_env.rs`, or cached objects serve the old setting. +- **Threads:** a JSValue created on a tokio worker is invalid on the main thread. Use `spawn_for_promise_deferred()` and convert on the main thread. +- **Handles:** dispatch has two registries, `HANDLE_METHOD_DISPATCH` and `HANDLE_PROPERTY_DISPATCH`. Register both. +- **GC roots in codegen:** a GC-managed value's root store must dominate every later site that can collect. Violations surface cycles later as `TypeError: value is not a function`. See `docs/src/internals/gc-rooting-invariant.md`. +- **GC roots in the runtime:** a cache holding a raw heap pointer is a root. Register it with `gc_register_mutable_root_scanner` (`crates/perry-runtime/src/gc/roots.rs`) in the same commit. A perfectly reproducible GC bug usually means an unrooted table. + +Areas where the symptom is rarely the bug: the async-to-generator transform, native base-class subclassing, and the two prototype paths (`CLASS_PROTOTYPE_OBJECTS` vs `CLASS_DECL_PROTOTYPE_OBJECTS`). For GC bugs, `PERRY_GC_SCHEDULE_SEED= PERRY_GC_PROTECT_FROMSPACE=1` turns a stale pointer into an immediate fault; every knob is documented in `docs/src/internals/garbage-collector.md`. + +## Verifying a runtime change + +A clean `git status` says nothing about what you link. + +- Rebuild with the `*-static` crates, pin `PERRY_RUNTIME_DIR`, and confirm the `.a` mtime moved after your edit. Otherwise both arms of an A/B link the same stale archive. Keep the package set identical across builds. +- A prebuilt binary in another worktree may come from that worktree's uncommitted changes. Build your own reference and check it first. +- Read the harness's exit code, not that of a wrapper pipe. + +## Four ways a gate can be unable to fail + +Check all four when adding or reviewing a gate: + +1. **`continue-on-error: true`** on the job. +2. **Not in branch protection's required contexts**: it reports failure without blocking. +3. **Unconditional `cancel-in-progress`**: each merge cancels the previous `main` run. Scope cancellation to `pull_request`. +4. **The gate runs but its subject never did**: assert the subject was live (for example `copied_objects > 0`), not merely that nothing threw. + +A new gate has never been green: run it once, then make it required. + +## GC knob kill-policy (binding) + +Every GC env knob has a required CI arm exercising its OFF state, or it is deleted after one release of soak. At most one diagnostic-only knob may exist at a time, labelled untested. When a knob's off-state stops being exercised, delete the off-state and the code behind it. diff --git a/CLAUDE.md b/CLAUDE.md index 7da42230f01..f6aa6c02628 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,273 +1,3 @@ # CLAUDE.md -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -**NOTE**: Keep this file concise. Detailed changelogs live as `changelog.d/` fragments (folded into GitHub Release notes at each tag); `CHANGELOG.md` is a frozen archive (≤ v0.5.1264). - -## Project Overview - -Perry is a native TypeScript compiler written in Rust that compiles TypeScript source code directly to native executables. It uses SWC for TypeScript parsing and LLVM for code generation. - -**Current Version:** 0.5.1663 - - -## TypeScript Parity Status - -Tracked via the gap test suite (`test-files/test_gap_*.ts`). Compared byte-for-byte against `node --experimental-strip-types`. Run via `./scripts/run_gap_tests.sh` (a thin wrapper over `run_parity_tests.sh --filter test_gap_` that builds the compiler itself and gates on no new untriaged failures). - -**The oracle is Node `26.12.1`, pinned in `.node-version` at the repo root** (the FILE is authoritative — this prose drifted once, #7599) — the single source of truth every CI workflow reads via `setup-node`'s `node-version-file`. **Run the gap suite against that exact version locally**, or your results won't match CI. The version is a *correctness input*, not an incidental toolchain detail: when node can't run a test (a feature newer than the pinned node), node exits non-zero, the harness classifies it `node_fail`, and the test is **silently dropped from the gate** rather than going red. CI sat on Node 22 while the suite grew Node 24/26 features, which hid 14 tests — all of Temporal, plus DisposableStack, Float16Array, and `Uint8Array` base64/hex (#6364). Node patch releases also change observable output (error-message text, `v8` heap fields), which is why the pin is exact. Raising it is a deliberate act: measure the failure delta under both oracles first, then triage what it exposes. - -**Don't audit this by reading prose — run `python3 scripts/check_node_version_consistency.py --list`** (it is a `lint` step, so it is a required check). It re-derives every restatement of a Node version from the file that restatement quotes, and requires every literal `node-version:` in a workflow to be a *registered* exemption carrying a reason. That registry is the authoritative exemption list; the three below are what it currently holds, and an entry that stops matching the tree fails, so a bump must update or delete its own exemption. - -Three workflows are deliberately exempt and say so inline: `node-core-subset.yml` derives its Node from `test-compat/node-core/pinned-version.txt` (it runs Node's *own* test corpus, which must match its own Node line), and the two release workflows (`release-packages.yml`, `release-hono-server.yml`, both Node 26) use Node purely as an npm *publishing* toolchain — pinned to a bare major on purpose, so a gap-suite oracle bump can never move the runtime that publishes releases. A fourth file, `benchmarks/public-baseline-config.json`, still pins **Node v22.23.1** for the *published* performance comparison: it is in `public_baseline.HARNESS_PATHS`, so editing it invalidates the committed artifact and reddens `lint` until the baseline is regenerated (~2 h on the quiet mini). The pin and the measurement are atomic by design — see the exemption's own text for the runbook. - -**Last full sweep:** run `./run_parity_tests.sh` for the current snapshot. The umbrella tracker is #793 (Node.js + TypeScript compatibility roadmap); the previously-cited #447–#452 batch closed on 2026-05-04. Currently-open trackers worth knowing about: - -- **Effect framework end-to-end (#321)** — `#684` (Schema.ts ~310th-init `(number).slice` regression) and `#809` (object-literal computed-keys + cross-module spread) are the live HashRing/Schema blockers. -- **Async context** — `AsyncLocalStorage` (real tracking across `await`/microtasks/timers, `#788`) and `async_hooks.createHook` (real lifecycle + asyncId, `#789`) both landed (closed 2026-05-16); these are no longer stubs. -- **Compile-as-package** — `#348` (ink TUI end-to-end), `#488/#489` (Drizzle + MySQL), `#678` (linker emits native callsites for V8-fallback modules). -- **Test/CI mechanics** — `#794` (per-category parity thresholds), `#796` (gap-suite output truncation + O(n²) `normalize_output`), `#812` (42-module behavioral matrix), `#806/#807/#808` (test harnesses for mixins / async context / ≥300-init scale). -- **Skip-list audit** — `#797` covers `test-parity/known_failures.json` provenance (issue # + date per entry). - -### Node builtin compatibility matrix (`scripts/node_compat_matrix.mjs`) - -Breadth sweep over EVERY `require("module").builtinModules` entry, both import forms (`M` and `node:M`), against a **pinned, SRI-verified Node** (the "latest stable" oracle, pinned in `external-tools.json` `tools.node.version` — currently **26.12.1**, independent of the `.node-version` gap-suite oracle). It compares Perry's export-SHAPE fingerprint (sorted `name:typeof` over the module namespace + the default export's typeof) to the oracle's. This is the systematic version of the #812 "42-module behavioral matrix" — shape, not deep behavior (behavioral cases stay in the node-suite). - -```bash -# FAST LOOP — reach for this first when iterating on ONE builtin: -node scripts/node_compat_matrix.mjs --module fs # one module, both forms -node scripts/node_compat_matrix.mjs --module fs,path,crypto # a few -node scripts/node_compat_matrix.mjs --module fs --method readFileSync,promises # only these exports -node scripts/node_compat_matrix.mjs --only fs.readFileSync,path.join # combined mod.export form -# (the pinned Node download is skipped once cached under .cache/node-pin/) - -# FULL SWEEP + GATE: -node scripts/node_compat_matrix.mjs # whole matrix + summary table -node scripts/node_compat_matrix.mjs --check # CI gate: exit 1 on regressions vs the baseline -node scripts/node_compat_matrix.mjs --update-baseline # rewrite test-parity/node-compat-matrix.baseline.json -``` - -A `--module` selector scopes `--check`/`--update-baseline` to just that slice (a single-module refresh never rewrites the whole baseline). A `--method`/`--only` subset is a print-only fast diagnostic (it narrows the fingerprint, so it is refused for `--check`/`--update-baseline`). **Bump the pinned Node** by editing `tools.node.version` in `external-tools.json` (add per-platform sha512 SRI), then `--update-baseline` and review the diff. Needs the release binary (`cargo build --release -p perry`). Full page: `docs/src/testing/node-compat-matrix.md`. - -**Known categorical gaps**: `console.dir`/`console.group*` formatting, lone surrogate handling (WTF-8). (Lookbehind regex is NOT a gap anymore: `perry-runtime/src/regex.rs` falls back from the `regex` crate to `fancy-regex` for lookbehind/backreferences, with capture-group translation and replacement expansion.) - -## Workflow Requirements - -**Auditing and landing the open-PR queue: `MERGE_GUIDE.md`.** The merge-train protocol, the per-PR audit -checklist, how to resolve Rust merge conflicts by shape, and the validation/landing traps that have bitten -this repo (stale PR heads, stale `.a` archives, the rebase-merge coherence stamp). Read it before picking up -a queue of PRs. - -**Default flow is PR-based.** `main` is protected: pushes require a pull request, CI must pass, and only squash or rebase merges are allowed (no merge commits, linear history enforced). **The single required status context is `pr-gate`** — the fan-in of `test.yml`'s PR tier (`lint`, `check`, `warnings`, scoped `cargo-test`, the 6-shard fast-mode gap suite, `gc-stress`, `e2e-scoped`, and `security-audit` when a lockfile/manifest changed). What runs in which tier is decided by `scripts/ci_plan.py` (`--table`), documented in `docs/src/testing/ci-tiers.md`: **pr** (every PR push, ~11 jobs, must be green on `main`), **sweep** (every push to `main`, coalesced), **full** (nightly / tags / dispatch / `run-extended-tests` label — parity, compile-smoke, doc-tests, package smokes, the auto-optimize gap shards). Releases wait for a `full-suite-gate` on the release SHA. The satellite GC/perf gates run on PRs only with the `run-extended-tests` label; their six-hourly `main` sweeps are unchanged. Admins can bypass for hotfixes/version bumps, but the standard path is: - -1. Branch from `main`, push, open a PR. -2. Wait for required checks to go green. -3. Squash- or rebase-merge. The PR branch auto-deletes on merge. - -**For every change that lands on `main`** (whether via PR or admin bypass): - -1. **Bump version**: Increment patch in `[workspace.package].version` in `Cargo.toml` and the `**Current Version:**` line above. That is the ONLY metadata edit CLAUDE.md needs. -2. **Add a changeset**: create `changelog.d/-.md` with the entry body (no version header — see `changelog.d/README.md`). Long-form root-cause writeups, file paths, validation notes all belong in the fragment, NOT in CLAUDE.md. **Never append to `CHANGELOG.md`** — it is frozen at v0.5.1264. Fragments are folded into the GitHub Release notes at tag time (`scripts/cut_release_notes.sh`) and deleted. -3. **Commit changes**: Include code, `Cargo.toml`/`Cargo.lock`, `CLAUDE.md` (version bump only), and the `changelog.d/` fragment together. - -**Do not write changelog entries into CLAUDE.md.** This file is for orientation (architecture, common pitfalls, build commands). Per-change history lives in `changelog.d/` → GitHub Releases so CLAUDE.md stays small and stable across context loads. - -### External contributor PRs - -PRs from outside contributors should **not** touch `[workspace.package] version` in `Cargo.toml` or the `**Current Version:**` line in `CLAUDE.md`. The maintainer bumps the version at merge time — usually by rebasing the PR branch and amending. This avoids the patch-version collisions that happen when Perry's `main` ships several commits while a PR is in review (each on-main commit bumps the version; a PR that bumped to the same patch on day 1 is already behind by merge day). Contributors **do** write their own `changelog.d/-.md` fragment — the filename is PR-keyed, so in-flight PRs never collide. - -## Build Commands - -### Which profile to use - -- **Local dev / testing (default choice)**: `cargo check -p perry` for type-check feedback, `make build-dev` for a fast debuggable binary, or `cargo build --profile perry-dev -p perry` when a specialized CI job expects `target/perry-dev`. The `dev` profile emits the debug build under `target/debug`, includes debug info/assertions, and keeps Perry's panic=abort runtime contract. Use `make build-prod` for an optimized local binary (opt-level 3, ThinLTO, parallel codegen). Both Make targets use Mr Boxington's cache; `prod` is for release-sensitive reproduction. -- **Shipping / official artifacts**: `--profile prod` (ThinLTO, 16 codegen units, opt-level 3, strip). The extra codegen units parallelize initial code generation while ThinLTO keeps cross-unit optimization. `make build-prod` uses Mr Boxington's shared compilation cache; use `make build-dev` for iteration. -- **Compatibility profiles**: `release`, `dist`, and `perry-dev` remain for existing tools and investigations. Prefer `dev` or `prod` for new commands. - -```bash -cargo build --release # Build all crates -cargo build -p perry # Fast debug build (target/debug) -cargo build --profile perry-dev -p perry # Optimized dev compatibility build -cargo build --profile prod -p perry # Fully optimized local build -cargo build --release -p perry-runtime -p perry-stdlib # Rebuild runtime (MUST rebuild stdlib too!) -cargo build --release -p perry-runtime-static -p perry-stdlib-static # Emit libperry_{runtime,stdlib}.a (#5422: runtime/stdlib are now rlib-only; the .a comes from these wrapper crates) -RUST_TEST_THREADS=1 cargo test --release -p perry-runtime # MUST be single-threaded (see below) -cargo test --release --workspace --exclude perry-runtime \ - --exclude perry-ui-ios --exclude perry-ui-tvos --exclude perry-ui-watchos \ - --exclude perry-ui-visionos --exclude perry-ui-android --exclude perry-ui-windows \ - --exclude perry-ui-gtk4 # Run tests (exclude cross-host UI crates on macOS) -cargo run --release -- file.ts -o output && ./output # Compile and run TypeScript -cargo run --release -- file.ts --print-hir # Debug: print HIR -cargo run --release -- file.ts --trace hir --focus fnName # Debug: focused HIR for one fn (use to localize a miscompile) -cargo run --release -- file.ts --trace llvm # Debug: dump per-module LLVM IR to .perry-trace/llvm/ -``` - -When debugging a "compiled to the wrong thing" bug, reach for `--trace hir --focus ` to dump just the offending function's lowered HIR (functions/methods/classes matching the substring; import/init noise suppressed) instead of scrolling a full `--print-hir`. `--trace llvm` writes per-module `.ll` (it forces a no-cache rebuild so codegen actually runs). See `docs/src/cli/flags.md`. - -## Architecture - -``` -TypeScript (.ts) → Parse (SWC) → AST → Lower → HIR → Transform → Codegen (LLVM) → .o → Link (cc) → Executable -``` - -| Crate | Purpose | -|-------|---------| -| **perry** | CLI driver (parallel module codegen via rayon) | -| **perry-parser** | SWC wrapper for TypeScript parsing | -| **perry-hir** | HIR types and data structures, plus AST→HIR lowering | -| **perry-transform** | IR passes (closure conversion, async lowering, inlining) | -| **perry-codegen** | LLVM-based native code generation | -| **perry-runtime** | Runtime: value.rs, object/, array/, string/, gc/, arena/, thread/ | -| **perry-stdlib** | Node.js API support (mysql2, redis, fetch, fastify, ws, etc.) | -| **perry-ui** / **perry-ui-macos** / **perry-ui-ios** / **perry-ui-tvos** | Native UI (AppKit/UIKit) | - -## NaN-Boxing - -Perry uses NaN-boxing to represent JavaScript values in 64 bits (`perry-runtime/src/value.rs`): - -``` -TAG_UNDEFINED = 0x7FFC_0000_0000_0001 BIGINT_TAG = 0x7FFA (lower 48 = ptr) -TAG_NULL = 0x7FFC_0000_0000_0002 POINTER_TAG = 0x7FFD (lower 48 = ptr) -TAG_FALSE = 0x7FFC_0000_0000_0003 INT32_TAG = 0x7FFE (lower 32 = int) -TAG_TRUE = 0x7FFC_0000_0000_0004 STRING_TAG = 0x7FFF (lower 48 = ptr) -``` - -Key functions: `js_nanbox_string/pointer/bigint`, `js_nanbox_get_pointer`, `js_get_string_pointer_unified`, `js_jsvalue_to_string`, `js_is_truthy` - -**Module-level variables**: uniform NaN-boxed doubles in `@perry_global___` LLVM globals, all registered as GC roots before module init (marked AND rewritten on evacuation). The old F64-strings/raw-I64-arrays split and `module_var_data_ids` no longer exist (a stale comment survives in `perry-transform/src/inline/mod.rs`). - -## Garbage Collection - -The current collector source of truth is `docs/src/internals/garbage-collector.md`. Implementation lives in the `crates/perry-runtime/src/gc/` and `arena/` module trees. Native RS4GC roots are the target-aware default where the runtime can walk frames; shadow frames are the fallback on unsupported targets. The conservative native-stack scan is diagnostic-only by default (`Auto` resolves to `SkipDisabled`). - -**Escape hatches**: `PERRY_GEN_GC=0`/`off`/`false` reverts to full mark-sweep (bisection only). #7611 deleted the ambient evacuation-policy veto after it moved 0 of 96 gc-ratchet cells and could silently disarm the #7154 stress instrument (`PERRY_GC_SCHEDULE_SEED`). Policy evacuation is unconditional now except on budgeted low-pause cycles, which has a behavioural test. `PERRY_GC_FORCE_EVACUATE=1` stress-copies every marked non-pinned nursery object when generated write barriers are active, **including on the explicit `gc()` path** — since #6946 a manual `gc()` under this knob runs an evacuating minor before its full mark-sweep, instead of a full sweep that moved nothing. `PERRY_GC_VERIFY_EVACUATION=1` panics if any mutable live slot still points at a forwarded nursery object after an evacuation/rewrite cycle. `PERRY_WRITE_BARRIERS=0`/`off`/`false` disables codegen-emitted write barriers at compile time and runtime exact helper barriers at runtime for benchmark/debug bisection; unset, `=1`/`on`/`true` keep barriers enabled. `PERRY_GC_DIAG=1` prints per-cycle diagnostics, including evacuation-policy decisions for considered cycles and `barriers_inactive` skips. - -### Rooting-bug instruments (#7154 family) — what each knob ACTUALLY gates - -A "GC value live but not rooted across a collection point" bug is invisible at collection time: there is nothing for the collector to find. It surfaces one or more cycles later, in a different function, as `TypeError: value is not a function`. These knobs exist to collapse that latency. **All default-off; every knob's OFF state is asserted — the quarantine's in `gc/tests/fromspace_protect.rs`, the schedule's in `gc/tests/schedule.rs`** (`…_DEPTH` and `…_RATE` are magnitudes, not modes, so their floors, defaults and clamping are asserted instead). The instruments are **sabotage-tested**, not merely exercised: `quarantine_catches_a_planted_stale_from_space_deref` plants a #7184/#7192-shaped stale from-space pointer and asserts the instrument distinguishes it from the live object that would otherwise be recycled into those bytes — so a green protected run means the detector works, not that nothing was tried. - -| knob | gates EXACTLY | does NOT | -|---|---|---| -| `PERRY_GC_PROTECT_FROMSPACE=1` (or `poison`) | the from-space reset performed by the **copying minor** (`arena::copying_reset_from_spaces_and_flip`). Retired Eden + active-survivor blocks are detached into a bounded quarantine, poison-filled (`0xDEADBEEFBAADF0DE`, `obj_type = 0xDE`) and, at `=1`, `mprotect(PROT_NONE)`d. A stale deref then SIGSEGVs at the faulting instruction; the installed reporter names the address, the retiring minor, and the last-known object's `obj_type`/size, then restores `SIG_DFL` and re-faults so a core/debugger still sees the real site. `poison` skips `mprotect`. | change the non-moving minor's `arena_reset_empty_blocks`, the full mark-sweep's reclaim, old-gen defrag, or the malloc sweep. **A run with zero copying minors protects nothing** — check that `PERRY_GC_DIAG=1` prints a `[gc-fromspace-protect] retired_set=#N` line. | -| `PERRY_GC_PROTECT_FROMSPACE_DEPTH=N` (default 4) | how many retired page-sets stay quarantined. Evicted sets are restored to RW and **recycled back into Eden**, never `dealloc`'d, so footprint is bounded at `N × from-space bytes`. `0` is clamped to 1 — a depth of 0 would read as ON and protect nothing. **Raise this when a suspected bug does not fault**: a value can cross hundreds of collections between its last valid observation and its stale use (one per back-edge poll at `PERRY_GC_SCHEDULE_RATE=1`). #7154's `new C(…)` reproducer needs `800` — its constructor crosses 600 polls, so the default 4 misses it silently. | — | -| `PERRY_GC_FROMSPACE_SCAN_ABORT=1` | now **implies** `PERRY_GC_FROMSPACE_SCAN=1`. It used to be inert alone (the scan never ran, so nothing aborted, and the run reported success). | — | -| `PERRY_GC_SCHEDULE_SEED=` | seeded GC-schedule fuzzing — the collection schedule as a knob, from normal pacing up to a collection at every handled safepoint (`PERRY_GC_SCHEDULE_RATE=1`). Three things, exactly: (1) `js_gc_loop_safepoint` stops requiring `GC_SAFEPOINT_PENDING` before descending into `gc_safepoint_moving_minor`; (2) inside `gc_safepoint_moving_minor`, **past the entry guards**, a per-thread safepoint counter advances once per handled safepoint and, when `gc_budgeted_due_trigger()` reports nothing due, a minor runs anyway iff `splitmix64(splitmix64(seed) ^ counter) < threshold`; (3) `gc_force_evacuate_enabled()` becomes true, so survivors MOVE. **A value that does not parse as `u64` reads as OFF, not as seed 0.** The seed is printed at startup, from the process-exit teardown funnel every exit path routes through (`report_exit_summary`, on the collection-side-allocation release — perry's `_exit` paths never reach `atexit`, which is only a libc-return backstop), and on panic/SIGSEGV/SIGBUS/SIGABRT/SIGILL/SIGTRAP — the signal reporter chains to (and is re-layered on top of) the from-space quarantine's, so the two compose. Live-subject counters: `gc::gc_schedule_safepoints()` / `gc::gc_schedule_forced_collections()`. | bypass `gc_safepoint_moving_minor`'s entry guards — and a blocked safepoint deliberately does **not** tick the counter, so the ordinal sequence tracks the program's safepoints rather than its allocation state. The forced-evacuation implication is **unconditional** since #7611 deleted the ambient veto that could disarm it. Nor emit loop polls — those are a compile-time property (`PERRY_GC_MOVING_LOOP_POLLS`, default ON since #7721; a binary compiled with `=0` has none), and without them a seeded run only fires at event-loop boundaries and a compute-only loop never collects. Nor *suppress* pressure-driven collections — the rate is additional density, never less. Determinism is **per-thread**: the counter is thread-local, so a single-threaded program replays exactly, while a `perry/thread` program is only as reproducible as its OS scheduling. Say which you measured. | -| `PERRY_GC_SCHEDULE_RATE=<0..1>` (default `0.05`) | **only** the threshold `PERRY_GC_SCHEDULE_SEED`'s hash is compared against — the expected fraction of handled safepoints that collect. Out-of-range values clamp (a `2` reads as 1.0); unparseable and NaN fall back to the default. | do anything at all without a seed. It is inert alone. `=0` is an on-but-selects-nothing control (banner and reporters still install), `=1` collects at every handled safepoint — the maximum-density endpoint, where the seed stops mattering because every ordinal is selected whatever it hashes to. There is deliberately **no allocation-point level**: the alloc-point arm forces a conservative stack scan, which makes the copying minor ineligible, so an "every allocation" density would run non-moving minors and move nothing. | -| `PERRY_GC_SCHEDULE_ALLOC_KB=N` (default 4) | how much NEW nursery material must accumulate before a loop back-edge poll becomes a candidate the seed may select (#7728). A high-water mark measured AFTER each collection, not a delta, so a collection that frees nothing cannot loop. `0` restores the literal every-poll candidate set — right for a small fixture or a window that executes once, and far slower. | change the schedule itself: the seed still decides which candidates collect, so `(seed, counter)` replay is unaffected. Nor apply to microtask-pump safepoints — it paces the loop arm only. | - -**These instruments (plus `PERRY_GC_CENSUS`, `PERRY_GC_FROMSPACE_SCAN*`, `PERRY_ALLOC_SITE_SAMPLE`, `PERRY_GC_VERIFY_MARK`, `PERRY_GC_VERIFY_CLASSIFIER`, `PERRY_STACK_SYMBOLS`) are compiled in only with perry-runtime's `gc-instruments` feature**, which auto-optimize adds when one of the knobs or `PERRY_GC_INSTRUMENTS=1` is set *at compile time*; a binary built without it aborts at startup if a knob is set, rather than silently running nothing. - -`PERRY_GC_SCHEDULE_SEED= PERRY_GC_PROTECT_FROMSPACE=1` together is the pairing that turns a #7154 bug into an immediate precise fault. Loop polls are default-ON since #7721, so in-loop coverage no longer needs a flag — check `loop_polls=` in the exit verdict rather than assuming. If a hunt needs maximum sensitivity on a small program, add `PERRY_GC_SCHEDULE_ALLOC_KB=0`. - -### GC knob kill-policy (binding) - -**Every GC env knob either has a required CI arm exercising its OFF state, or it is deleted after one release of soak.** At most one diagnostic-only knob may exist at a time, and it must be labelled untested. - -This is not tidiness. An unexercised mode is a configuration nobody has verified, and this project has repeatedly paid for that: - -- `PERRY_GC_FORCE_EVACUATE` was **inert** for every `gc()`-driven test — it is read only on the minor path, while `gc()` ran a full mark-sweep with a forced conservative scan (#6942/#6946). Months of "passes under evacuation" meant nothing. *(Both halves are closed: #7657 removed the forced scan, #6946 makes `gc()` under the knob run an evacuating minor first. Kept as the precedent it is.)* -- The matrix's `--pressure` knob **disabled the very path it was measuring** — the defer hard cap and the arena-trigger ceiling shared a formula and collapsed together, so the `default` arm ran zero copying minors on all 22 rows (#7024). -- `gc_incremental_enabled`'s doc said "EXPERIMENTAL — default OFF" eight lines above a body comment saying "DEFAULT ON" (#6987). A merge decision was made on the wrong one. - -**A mode that still exists is a decision that hasn't been made.** When a knob's off-state stops being exercised, delete the off-state and the branch behind it — the losing mode should stop compiling, not linger as an untested configuration that a future bisect will trust. - -## Threading (`perry/thread`) - -Single-threaded by default. `perry/thread` provides: -- **`parallelMap(array, fn)`** / **`parallelFilter(array, fn)`** — data-parallel across all cores -- **`spawn(fn)`** — background OS thread, returns Promise - -Values cross threads via `SerializedValue` deep-copy. Each thread has independent arena + GC. Results from `spawn` flow back via `PENDING_THREAD_RESULTS` queue, drained during `js_promise_run_microtasks()`. - -## Native UI (`perry/ui`) - -Declarative TypeScript compiles to AppKit/UIKit calls. Handle-based widget system (1-based i64 handles, NaN-boxed with POINTER_TAG). `--target ios-simulator`/`--target ios`/`--target tvos-simulator`/`--target tvos` for cross-compilation. **`release-packages.yml` no longer builds or ships tvOS/visionOS/watchOS artifacts**: they're Rust Tier-3 (no prebuilt std, needed `-Z build-std`, still unstable), and that leg is dropped from the release workflow entirely. The compiler itself still supports them: `perry compile --target tvos-simulator` (etc.) auto-rebuilds via `cargo +nightly -Z build-std` using whatever nightly the caller has installed (`crates/perry/src/commands/compile/link/build_and_run.rs`, `crates/perry/src/commands/compile/optimized_libs/driver.rs`), and `test.yml` still exercises that path for tvOS-sim doc-tests. - -**To add a new widget** — change 4 places: -1. Runtime: `crates/perry-ui-macos/src/widgets/` — create widget, `register_widget(view)` -2. FFI: `crates/perry-ui-macos/src/lib.rs` — `#[no_mangle] pub extern "C" fn perry_ui__create` -3. Codegen: `crates/perry-codegen/src/lower_call/native/native_ui_widgets_branch.rs` — declare extern + NativeMethodCall dispatch -4. HIR: `crates/perry-hir/src/lower/` — only if widget has instance methods - -## Compiling npm Packages Natively (`perry.compilePackages`) - -Configured in `package.json`: -```json -{ "perry": { "compilePackages": ["@noble/curves", "@noble/hashes"] } } -``` -Bare imports resolve from the importer outward, matching Node/Bun. Every canonical -package root reached through `compilePackages` is tracked as a separate instance, -so nested versions compile with distinct module/symbol identities; multiple links -to the same physical root still deduplicate by canonical path. - -## Known Limitations - -- **No runtime type *validation***: declared TS types aren't enforced at runtime (a `string` param accepts a number, no throw). Annotations are mostly erased — the exception is `emitDecoratorMetadata`, which retains `design:type`/`design:paramtypes` from annotations on decorated members (see `docs/src/language/decorators.md`). Runtime type *discrimination* does exist: `typeof` via NaN-boxing tags, `instanceof` via class ID chain. -- **`SharedArrayBuffer` + `Atomics` cross-thread** (#4794 single-realm; #4913 Stage 2 cross-agent): the `Atomics` ops (`add`/`and`/`or`/`sub`/`xor`/`load`/`store`/`exchange`/`compareExchange`/`isLockFree`) match the spec on one thread. A `SharedArrayBuffer` captured into a `spawn`/`parallelMap` closure now **aliases the same physical bytes** across `perry/thread` agents (its backing is a process-global, never-freed allocation — `crate::shared_sab` — passed by reference, not deep-copied), and `Atomics.wait`/`notify`/`waitAsync` are **real**: `wait` parks the OS thread on a futex table keyed by the absolute slot address (`crate::atomics_futex`), `notify` wakes parked agents and returns the count, and `waitAsync` resolves its promise on a background thread when notified or on timeout. Caveat: only the `SharedArrayBuffer` itself shares — a typed-array *view* captured directly still deep-copies (build the view per-agent from the shared SAB). The agent-coordinated test262 cases (`$262.agent`) remain out of scope. - -## Common Pitfalls & Patterns - -### NaN-Boxing Mistakes -- **Double NaN-boxing**: If value is already F64, don't NaN-box again. Check `builder.func.dfg.value_type(val)`. -- **Wrong tag**: Strings=STRING_TAG, objects=POINTER_TAG, BigInt=BIGINT_TAG. -- **`as f64` vs `from_bits`**: `u64 as f64` is numeric conversion (WRONG). Use `f64::from_bits(u64)` to preserve bits. - -### LLVM Type Mismatches -- Loop counter optimization produces i32 — always convert before passing to f64/i64 functions -- Constructor parameters always f64 (NaN-boxed) at signature level -- A new `PERRY_*` environment variable read in a compiler-linked crate must be added to the shared `COMPILE_ENV_VARS` in `crates/perry/src/commands/compile/compile_env.rs`, or to `COMPILE_ENV_EXCLUSIONS` with a one-line reason it cannot change emitted code. Otherwise cached objects can silently serve a different setting. Run `cargo test -p perry codegen_env_vars_are_build_cache_inputs` to check registration. - -### Async / Threading -- Thread-local arenas: JSValues from tokio workers invalid on main thread -- Use `spawn_for_promise_deferred()` — return raw Rust data, convert to JSValue on main thread -- Async closures: Promise pointer (I64) must be NaN-boxed with POINTER_TAG before returning as F64 - -### Cross-Module Issues -- ExternFuncRef values are NaN-boxed — use `js_nanbox_get_pointer` to extract -- Module init order: topological sort by import dependencies -- Optional params need `imported_func_param_counts` propagation through re-exports - -### Closure Captures -- `collect_local_refs_expr()` must handle all expression types — catch-all silently skips refs -- Captured string/pointer values must be NaN-boxed before storing, not raw bitcast -- Loop counter i32 values: `fcvt_from_sint` to f64 before capture storage - -### Handle-Based Dispatch -- TWO systems: `HANDLE_METHOD_DISPATCH` (methods) and `HANDLE_PROPERTY_DISPATCH` (properties) -- Both must be registered. Small pointer detection: value < 0x100000 = handle. - -### objc2 v0.6 API -- `define_class!` with `#[unsafe(super(NSObject))]`, `msg_send!` returns `Retained` directly -- All AppKit constructors require `MainThreadMarker` - -### Verifying a runtime change (read before you trust an A/B) -Build outputs are invisible to `git status`, so a clean tree tells you nothing about what you are actually linking. Three ways this bites: - -- **Wrong build command → stale archive.** `perry-runtime`/`perry-stdlib` are `crate-type = ["rlib"]`; `libperry_{runtime,stdlib}.a` come from the `perry-runtime-static`/`perry-stdlib-static` wrappers (see Build Commands). `cargo build -p perry-runtime -p perry-stdlib` does **not** emit them, so `perry compile` links a stale `.a`: your fix looks like a no-op **and both arms of an A/B behave identically** (a vacuous "zero regressions"). Build `-p perry -p perry-runtime-static -p perry-stdlib-static`, pin `PERRY_RUNTIME_DIR`, and confirm the `.a` mtime moved *after* your edit. Keep the package set identical across builds/bisect hops — dropping `-p perry` changes cargo feature unification. (`run_parity_tests.sh` builds the wrappers itself, so gap runs are safe; hand-rolled `.ts` probes are not.) -- **A prebuilt binary in another worktree is not evidence about the commit it's checked out to** — it may be built from that worktree's WIP tree. Never use one as a bisect `good` endpoint or a perf baseline; build your own reference and *verify the good endpoint is actually good* first. -- **Check the harness's exit code, not a wrapper shell's.** A job piping the gap harness through `grep` can report exit 0 while the harness itself failed. - -### CI gates that surprise people -- **2000-line-per-file cap** (`scripts/check_file_size.sh`) — run it before pushing; adding a long doc comment can trip it. -- **addr-class ratchet** (`scripts/addr_class_inventory.py`) — a file gaining a bare-address site fails `lint`. -- **`gap-suite` shards (formerly `conformance-smoke`)**: the PR/sweep tiers run the harness in `fast` mode (`PERRY_SKIP_BUILD=1`, one prebuilt release compiler, ~1.5 s/test); the full tier runs the 8-shard auto-optimize mode. Both compare against the same `test-parity/gap_snapshot.json`, so a divergence between them is an auto-optimize-specific finding. Before believing a red shard, A/B the named tests against a pristine `main` build; re-baseline only via the documented CI dispatch (`docs/src/testing/ci-tiers.md`). -- **Integration suites under `crates/*/tests/*.rs` run per-PR only when the diff names them** (`e2e-scoped`); the sweep/full tiers' `cargo test --workspace` is the backstop — a regression there lands on `main` and is attributed by sweep window. Prefer putting acceptance coverage in `cargo-test`-visible unit tests (#5960). -- **`perry-runtime`'s tests are not parallel-safe — run them `RUST_TEST_THREADS=1`.** They share process-global side tables (#1444), and ~180 readers are not required to take the clearing lock (see `gc::tests::global_sink_isolation`'s header; #7672 is converting them to `per_test_global!` one at a time). Every CI path already pins `RUST_TEST_THREADS=1`; a local `cargo test --workspace` does NOT, which is the whole gap. Measured on the default pool: 600 full-suite runs at `--test-threads=16` (load ~90) were clean, but at `--test-threads=64` (load ~115) **2 of 320 runs failed** — in `proxy::…numeric_write_guard…` and `array::element_shape::matrix_tests::matrix_delete_revokes`, neither related to the change under test. The tell is the message: these fail on their own *fixture precondition* ("fixture must start proven, or every verdict below is vacuous"), i.e. another thread wiped the global, not a real defect in the code under test. Chasing such a failure as if it were a regression is wasted days. - -### ★ Four ways a gate can be unable to fail - -All four look fine on the Actions page. None can turn a merge red. When adding or reviewing a gate, check all four — each has bitten this repo, three of them within one week: - -1. **`continue-on-error: true`** — `gc-stress` carried it for months while being the only job covering GC correctness. -2. **Not in branch protection's required contexts** — `gc-stress` again. This is why #6925's `PERRY_PTR_SHAPE_LOCALS=0` regression landed visibly red and survived three merges. A job that reports failure without blocking is documentation, not a gate. -3. **`concurrency` with unconditional `cancel-in-progress`** — on a branch with a slow runner queue, every new merge cancels the previous run before it reaches a runner. `gc-ratchet` had three consecutive `main` runs cancelled, zero executed. Scope cancellation to `pull_request` and let `main` runs queue. -4. **The gate runs but its subject never did** — the most dangerous, because the job is genuinely green. `PERRY_GC_FORCE_EVACUATE` was inert for every `gc()`-driven test (#6942/#6946); the matrix's `--pressure` knob disabled the very path it was measuring (#7024); its `moved=` counter summed two different collectors, so a cell could pass having run zero copying minors (#7025). **A gate must assert its subject was live**, not merely that nothing threw — e.g. `copied_objects > 0` before a green verdict. - -Corollary: a *new* gate has never been green, so promoting it to required immediately blocks every open PR. Run it once, then promote. Leaving that second step undone is how (2) happens. - -### Known-weak areas (symptom is often not the bug) -- **Async-to-generator transform, body locals.** It boxes every body local into a shared mutable cell typed `Any`. Two consequences seen in the wild: per-iteration `let`/`const` bindings collapse for closures created in a loop, and computed numeric-key calls (`arr[i](x)`) lose their type proof and silently resolve by *method name*, evaporating the call. -- **Native base-class subclassing.** A native base's surface is installed at `super()` time and its parent edge lives in the class registry; keying any of that on a literal `extends` name loses it for fieldless classes, indirect subclasses, and class expressions. -- **Two prototype-resolution paths.** `CLASS_PROTOTYPE_OBJECTS` (synthetic: `Object.create`, plain-function ctors) vs `CLASS_DECL_PROTOTYPE_OBJECTS` (declared classes). `in`/`for…in` and `getPrototypeOf` have disagreed about the same chain. -- **Root-store dominance in codegen.** *A GC-managed value's root store must **dominate** every subsequent site that can collect.* Three ways it has broken, all shipped: the store's slot index fell outside the pushed shadow frame so `js_shadow_slot_bind` bounds-checked it into a silent no-op (#7184); the store was emitted in-frame but **after** a call that allocates (#7192); and the value lives in a plain `alloca_entry` that is neither a shadow slot nor a temp root, so the collector never rewrites it (`lower_call/new.rs`'s inline-ctor `this_slot`, closed by #7207; `--unrooted-allocas` is the detector for that shape, and its remaining hits are #7210's). All three present identically — a *rooted* slot holding a dangling pointer, surfacing cycles later as `TypeError: value is not a function` — and **none is visible to any runtime GC probe**, because at the moment of the collection there is nothing for the collector to find. That is why #7154's from-space scan only ever saw offenders whose targets had already died. The instrument is static: `scripts/gc_root_dominance_check.py` over `--trace llvm` output (`--self-test` proves it can still fail). Only bites where a back-edge poll is emitted, which is again the default (`PERRY_GC_MOVING_LOOP_POLLS`, kill switch `=0`) in every loop that can allocate — so a green default run does say something about this class, and `=0` is what makes it dark. **Full writeup, every known shape and how to check your work: `docs/src/internals/gc-rooting-invariant.md`.** The CI gate is `gc-root-dominance.yml` over `scripts/gc_root_dominance_corpus.sh`; known-remaining hits are named one-per-entry in `scripts/gc_root_dominance_allowlist.json` (an entry that matches nothing FAILS, so a fix must delete its entry), and that list is currently **empty** — every new hit is a red build. -- **A runtime-side cache of a raw heap pointer is a GC root, and the static checker cannot see it.** `scripts/gc_root_dominance_check.py` reads emitted LLVM IR, so a thread-local or side table holding a `*mut` into the heap is structurally invisible to it — the runtime instruments above are the only detector, and they go at the workload *before* you grind the static checker's tail. Two tells. An unrooted *register* goes bad only when a collection lands in its window, so it is intermittent; an unrooted *cache* goes bad at collection #0 and stays bad, so **a perfectly reproducible GC bug means a table, not a register**. And the registry is `gc_register_mutable_root_scanner` in `crates/perry-runtime/src/gc/roots.rs`: when you add a cache of a heap pointer, register it there in the same commit. (Don't restate the population size here — this file carried "~55 entries" long after it passed 120, in two places, of which one got fixed. `scripts/gc_runtime_root_holders.py` prints the current count and enforces a floor.) **The population is now enumerated and gated**: `scripts/gc_runtime_root_holders.py` (in `lint`) lists every `static`/`thread_local!` in `perry-runtime`/`perry-stdlib` whose type can hold a heap pointer, computes which ones a registered scanner actually reaches (call-graph walk, so accessors like `cp_live_lock()` count), and requires a written verdict in `scripts/gc_runtime_root_holders.json` for the rest — a new unclassified holder fails, and so does a stale entry, so a fix must delete its own exemption. Worked examples: `changelog.d/7219-registry-gc-unrooted-caches.md`, `changelog.d/7239-gc-unrooted-runtime-caches.md`. +@AGENTS.md diff --git a/CNAME b/CNAME deleted file mode 100644 index 0ee64a53be4..00000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.perryts.com \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f51fc9a754b..4ecdd5df7c2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,15 +2,15 @@ Thanks for your interest in Perry. This document covers everything you need to land a PR — what to build, how to test, and what the review flow looks like. -For building and installing Perry as a user, see [README.md](README.md#installation). For runtime/compiler architecture, see [CLAUDE.md](CLAUDE.md). This file is about *contributing*, not using. +For building and installing Perry as a user, see [README.md](README.md#installation). For runtime/compiler architecture, see [docs/src/contributing/architecture.md](docs/src/contributing/architecture.md); agent and contributor traps are in [AGENTS.md](AGENTS.md). This file is about *contributing*, not using. ## Ways to contribute All of these are welcome and none are ranked: - **Fix a bug.** Check the [issue tracker](https://github.com/PerryTS/perry/issues), especially [`good first issue`](https://github.com/PerryTS/perry/labels/good%20first%20issue) and [`help wanted`](https://github.com/PerryTS/perry/labels/help%20wanted). -- **Close a TypeScript parity gap.** The [gap test suite](test-files/) tracks divergences from `node --experimental-strip-types`; CLAUDE.md's "TypeScript Parity Status" table is the current scoreboard. -- **Add a platform backend or widget.** See the "To add a new widget" and "Native UI" sections in [CLAUDE.md](CLAUDE.md). +- **Close a TypeScript parity gap.** The [gap test suite](test-files/) tracks divergences from `node --experimental-strip-types`; run `./scripts/run_gap_tests.sh` for the current snapshot. +- **Add a platform backend or widget.** See "Adding a native UI widget" in [docs/src/contributing/architecture.md](docs/src/contributing/architecture.md). - **Improve docs or examples.** Everything under [`docs/src/`](docs/src/) and [`docs/examples/`](docs/examples/) is fair game. - **Report an issue.** File one even if you don't have a fix — reproducers are themselves a contribution. @@ -86,8 +86,7 @@ match the checkout. ### What does NOT go in a PR (maintainer handles these at merge) - **Do not bump `[workspace.package] version`** in `Cargo.toml`. -- **Do not edit `**Current Version:**`** at the top of `CLAUDE.md`. -- **Do not add a "Recent Changes" entry** to `CLAUDE.md` or `CHANGELOG.md`. +- **Do not edit `CHANGELOG.md`**; it is frozen. Write a `changelog.d/` fragment instead. Perry releases frequently — often several patch versions between a PR being opened and merged. If contributors bump the version on their branch, those bumps conflict on merge day through no fault of the contributor. The maintainer folds version + changelog metadata in when landing your PR, so it always matches the actually-shipped release. diff --git a/MERGE_GUIDE.md b/MERGE_GUIDE.md index 686fce305c3..c944939ea91 100644 --- a/MERGE_GUIDE.md +++ b/MERGE_GUIDE.md @@ -121,11 +121,10 @@ Linux addresses — use `is_above_handle_band` / `HANDLE_BAND_MAX`, never a bare `>= 0x10000`. **Version metadata.** External contributors must not touch -`[workspace.package] version` in `Cargo.toml` or `**Current Version:**` in -`CLAUDE.md`. Check and strip: +`[workspace.package] version` in `Cargo.toml`. Check and strip: ```bash -git diff origin/main train -- Cargo.toml CLAUDE.md | grep -cE '^\+.*(^version|Current Version)' # want 0 +git diff origin/main train -- Cargo.toml | grep -cE '^\+version' # want 0 ``` **Changelog.** Every PR needs `changelog.d/-.md`. Never append to diff --git a/OWNER b/OWNER deleted file mode 100644 index baef4118230..00000000000 --- a/OWNER +++ /dev/null @@ -1 +0,0 @@ - OWNER: session 57b8a088 — train120 assembly, no build diff --git a/TASK.md b/TASK.md deleted file mode 100644 index 1729738ee57..00000000000 --- a/TASK.md +++ /dev/null @@ -1,90 +0,0 @@ -# Fix the typed-array aliasing regression in PR #9360 - -## The bug - -`main` is correct. `main` + PR #9360 turns a `Uint8Array` view over another -typed array's buffer into mostly zeros. - -```ts -const words = new Uint32Array(2); -const bytes = new Uint8Array(words.buffer); -words[0] = 0x01020304; -words[1] = 0x05060708; -for (let i = 0; i < 8; i++) out.push(bytes[i]); -``` - -| | result | -|---|---| -| node | `4 3 2 1 8 7 6 5` | -| perry + #9360 | `4 0 0 0 0 0 0 0` | - -It also fails the committed fixture -`test-files/test_gap_typedarray_buffer_aliasing_7219.ts`, which is #7219's own -regression test — that fixture passes on `main` and fails with this PR. - -## What is already established — do NOT re-derive these - -1. **Culprit is one commit.** `main` + `7de78d0576` ALONE reproduces it. The six - perf commits stacked on top are not implicated. -2. **The write is fine.** After `words[0] = 0x01020304`, reading `words[0]` back - gives `16909060` exactly. The u32 store landed correctly. -3. **The metadata is fine.** `bytes.byteLength == 4`, `bytes.length == 4`, - `words.buffer.byteLength == 4` — all match node. -4. **It is NOT a stride error.** Reading `base + i*4` would give `4 8 0 0 …` on - the two-word case (index 4 hitting `words[1]`'s low byte). Actual output is - `4 0 0 0 0 0 0 0`, so that hypothesis is disproved. -5. **The codegen lowering is excluded by symbol evidence**, not inference: - `nm` on the compiled fixture shows ZERO references to `js_u8_buffer_read_f64`. - `try_lower_u8_buffer_read` never fires here. (An earlier `PERRY_U8_INLINE_READ=0` - A/B "ruling it out" was vacuous for the same reason — the path was never taken, - so the switch had nothing to disable. Do not repeat that experiment.) - -So: element 0 reads correctly and every other index reads 0, while length and -byteLength are right. Live surface is the runtime side of `7de78d0576`: -`crates/perry-runtime/src/typedarray/access.rs` (+71) and -`crates/perry-runtime/src/buffer/header.rs` (+67). - -## Fixes already ATTEMPTED AND FAILED — do not repeat - -- Evicting the stale `PERRY_U8_INLINE_CACHE` admission in `register_view_meta`. -- Guarding both registry-miss recovery arms with `view_meta_of(addr).is_none()`. -- Narrowing both recovery arms from `is_registered_buffer(addr)` to - `is_uint8array_buffer(addr)`. - -None changed the output. Note the last two were never confirmed to be REACHED -for this receiver — if you use them as evidence, first prove the arm executes -(add a temporary eprintln or counter), or you will repeat a vacuous experiment. - -## Build and test - -``` -cd /Users/amlug/projects/perry/cx-9360 -export CARGO_TARGET_DIR=/Users/amlug/agent-targets/cx9360 -export PERRY_RUNTIME_DIR=$CARGO_TARGET_DIR/release -cargo build --release -p perry -p perry-runtime-static -p perry-stdlib-static -$CARGO_TARGET_DIR/release/perry test-files/test_gap_typedarray_buffer_aliasing_7219.ts -o /tmp/cx9360_fix -diff <(node --experimental-strip-types test-files/test_gap_typedarray_buffer_aliasing_7219.ts) <(/tmp/cx9360_fix) -``` - -Node must be v26.5.1 (matches `.node-version`). A build is ~8-10 minutes; the -compile+run of one fixture is seconds, so iterate on the fixture, not the build. - -## Definition of done - -1. The fixture above is byte-identical to node. -2. `RUST_TEST_THREADS=1 cargo test --release -p perry-runtime` is green - (perry-runtime tests are NOT parallel-safe; the flag is required). -3. `./scripts/check_file_size.sh`, `python3 scripts/raw_handle_debt.py`, - `python3 scripts/gc_runtime_root_holders.py`, `python3 scripts/addr_class_inventory.py` - and `cargo fmt --all -- --check` all pass. -4. The fix keeps #9360's actual feature working — it exists to recover - `Uint8Array` elements on a kind-registry miss. Do not fix the aliasing bug by - deleting the feature; if the recovery must narrow, say precisely which - receivers it still serves. - -## Rules - -- Do not touch `test-parity/gap_snapshot.json` or any baseline/allowlist file to - make a gate pass. Fix the code. -- Do not raise a ratchet ceiling. -- Report what you changed and WHY, and state any claim you could not verify. diff --git a/competitive/micros/bind_birth.ts b/benchmarks/competitive/micros/bind_birth.ts similarity index 100% rename from competitive/micros/bind_birth.ts rename to benchmarks/competitive/micros/bind_birth.ts diff --git a/competitive/micros/bound_call.ts b/benchmarks/competitive/micros/bound_call.ts similarity index 100% rename from competitive/micros/bound_call.ts rename to benchmarks/competitive/micros/bound_call.ts diff --git a/competitive/micros/class_fields.ts b/benchmarks/competitive/micros/class_fields.ts similarity index 100% rename from competitive/micros/class_fields.ts rename to benchmarks/competitive/micros/class_fields.ts diff --git a/build.log b/build.log deleted file mode 100644 index 525d84e940e..00000000000 --- a/build.log +++ /dev/null @@ -1,682 +0,0 @@ - Compiling proc-macro2 v1.0.106 - Compiling unicode-ident v1.0.24 - Compiling quote v1.0.45 - Compiling libc v0.2.189 - Compiling cfg-if v1.0.4 - Compiling version_check v0.9.5 - Compiling typenum v1.20.1 - Compiling subtle v2.6.1 - Compiling smallvec v1.15.1 - Compiling stable_deref_trait v1.2.1 - Compiling libm v0.2.16 - Compiling serde_core v1.0.229 - Compiling autocfg v1.5.1 - Compiling shlex v2.0.1 - Compiling find-msvc-tools v0.1.12 - Compiling either v1.16.0 - Compiling generic-array v0.14.7 - Compiling num-traits v0.2.19 - Compiling portable-atomic v1.13.1 - Compiling syn v2.0.117 - Compiling syn v3.0.3 - Compiling memchr v2.8.1 - Compiling getrandom v0.2.17 - Compiling jobserver v0.1.34 - Compiling cc v1.4.5 - Compiling rand_core v0.6.4 - Compiling serde v1.0.229 - Compiling critical-section v1.2.0 - Compiling pin-project-lite v0.2.17 - Compiling once_cell v1.21.4 - Compiling log v0.4.34 - Compiling writeable v0.6.4 - Compiling rand_core v0.10.1 - Compiling getrandom v0.4.2 - Compiling bytes v1.12.1 - Compiling litemap v0.8.2 - Compiling zerocopy v0.8.50 - Compiling cmov v0.5.4 - Compiling allocator-api2 v0.2.21 - Compiling const-oid v0.9.6 - Compiling ctutils v0.4.2 - Compiling scopeguard v1.2.0 - Compiling parking_lot_core v0.9.12 - Compiling lock_api v0.4.14 - Compiling siphasher v1.0.3 - Compiling utf8_iter v1.0.4 - Compiling bitflags v2.12.1 - Compiling icu_properties_data v2.2.0 - Compiling icu_normalizer_data v2.2.0 - Compiling percent-encoding v2.3.2 - Compiling getrandom v0.3.4 - Compiling parking_lot v0.12.5 - Compiling equivalent v1.0.2 - Compiling form_urlencoded v1.2.2 - Compiling anyhow v1.0.104 - Compiling num-integer v0.1.46 - Compiling tracing-core v0.1.36 - Compiling itoa v1.0.18 - Compiling cpufeatures v0.2.17 - Compiling foldhash v0.2.0 - Compiling base64ct v1.8.3 - Compiling crossbeam-utils v0.8.21 - Compiling new_debug_unreachable v1.0.6 - Compiling const-oid v0.10.2 - Compiling futures-core v0.3.34 - Compiling ahash v0.8.12 - Compiling hashbrown v0.17.1 - Compiling errno v0.3.14 - Compiling pkg-config v0.3.33 - Compiling signal-hook-registry v1.4.8 - Compiling socket2 v0.6.5 - Compiling mio v1.2.1 - Compiling futures-sink v0.3.34 - Compiling synstructure v0.13.2 - Compiling indexmap v2.14.2 - Compiling futures-io v0.3.34 - Compiling slab v0.4.12 - Compiling futures-task v0.3.34 - Compiling unicode-width v0.2.2 - Compiling rustc-hash v2.1.2 - Compiling thiserror v2.0.18 - Compiling rand v0.8.7 - Compiling swc_macros_common v1.0.1 - Compiling phf_shared v0.11.3 - Compiling object v0.37.3 - Compiling heck v0.5.0 - Compiling scoped-tls v1.0.1 - Compiling better_scoped_tls v1.0.1 - Compiling swc_visit v2.0.1 - Compiling siphasher v0.3.11 - Compiling cpufeatures v0.3.0 - Compiling zmij v1.0.21 - Compiling phf_generator v0.11.3 - Compiling unicode-id-start v1.4.0 - Compiling zeroize_derive v1.4.3 - Compiling zerofrom-derive v0.1.7 - Compiling yoke-derive v0.8.2 - Compiling serde_derive v1.0.229 - Compiling displaydoc v0.2.6 - Compiling zerovec-derive v0.11.6 - Compiling zerocopy-derive v0.8.50 - Compiling zeroize v1.8.2 - Compiling hybrid-array v0.4.12 - Compiling tracing-attributes v0.1.31 - Compiling zerofrom v0.1.8 - Compiling crypto-common v0.1.7 - Compiling block-buffer v0.10.4 - Compiling yoke v0.8.3 - Compiling tokio-macros v2.7.0 - Compiling digest v0.10.7 - Compiling zerovec v0.11.8 - Compiling zerotrie v0.2.5 - Compiling crypto-common v0.2.2 - Compiling tokio v1.53.1 - Compiling tracing v0.1.44 - Compiling tinystr v0.8.4 - Compiling potential_utf v0.1.5 - Compiling icu_locale_core v2.3.0 - Compiling icu_collections v2.2.0 - Compiling futures-macro v0.3.34 - Compiling block-padding v0.3.3 - Compiling inout v0.1.4 - Compiling cipher v0.4.4 - Compiling block-buffer v0.12.0 - Compiling thiserror-impl v2.0.18 - Compiling phf_macros v0.11.3 - Compiling futures-util v0.3.34 - Compiling digest v0.11.3 - Compiling sha2 v0.10.9 - Compiling icu_provider v2.3.1 - Compiling num-bigint v0.4.6 - Compiling icu_properties v2.2.0 - Compiling icu_normalizer v2.2.0 - Compiling triomphe v0.1.15 - Compiling phf v0.11.3 - Compiling bytes-str v0.2.7 - Compiling ast_node v5.0.0 - Compiling idna_adapter v1.2.2 - Compiling hashbrown v0.14.5 - Compiling idna v1.1.0 - Compiling swc_eq_ignore_macros v1.0.1 - Compiling url v2.5.8 - Compiling hstr v3.0.6 - Compiling from_variant v3.0.0 - Compiling hmac v0.12.1 - Compiling is-macro v0.3.7 - Compiling string_enum v1.0.2 - Compiling swc_atoms v9.0.3 - Compiling semver v1.0.28 - Compiling ar_archive_writer v0.5.1 - Compiling swc_common v18.0.1 - Compiling smartstring v1.0.1 - Compiling serde_json v1.0.151 - Compiling password-hash v0.5.0 - Compiling pem-rfc7468 v0.7.0 - Compiling static_assertions v1.1.0 - Compiling base64 v0.22.1 - Compiling psm v0.1.32 - Compiling der v0.7.10 - Compiling pbkdf2 v0.12.2 - Compiling salsa20 v0.10.2 - Compiling aes v0.8.4 - Compiling stacker v0.1.25 - Compiling seq-macro v0.3.6 - Compiling scrypt v0.11.0 - Compiling cbc v0.1.2 - Compiling cmake v0.1.58 - Compiling par-core v2.0.0 - Compiling num_cpus v1.17.0 - Compiling ryu-js v1.0.3 - Compiling dunce v1.0.5 - Compiling swc_ecma_ast v19.0.0 - Compiling spki v0.7.3 - Compiling fs_extra v1.3.0 - Compiling pkcs5 v0.7.1 - Compiling tokio-util v0.7.18 - Compiling aws-lc-sys v0.45.0 - Compiling phf_shared v0.13.1 - Compiling crossbeam-epoch v0.9.20 - Compiling rustversion v1.0.22 - Compiling fastrand v2.4.1 - Compiling pkcs8 v0.10.2 - Compiling phf_generator v0.13.1 - Compiling perry-diagnostics v0.5.1593 (/root/claude-fix-10476/crates/perry-diagnostics) - Compiling ppv-lite86 v0.2.21 - Compiling rustls-pki-types v1.14.1 - Compiling der_derive v0.8.0 - Compiling pem-rfc7468 v1.0.0 - Compiling flagset v0.4.7 - Compiling ring v0.17.14 - Compiling tinyvec_macros v0.1.1 - Compiling der v0.8.2 - Compiling aws-lc-rs v1.18.1 - Compiling icu_locale_fallback_data v2.3.0 - Compiling perry-dispatch v0.5.1593 (/root/claude-fix-10476/crates/perry-dispatch) - Compiling tinyvec v1.11.0 - Compiling rustc_version v0.4.1 - Compiling ipnet v2.12.0 - Compiling simd-adler32 v0.3.9 - Compiling arrayvec v0.7.6 - Compiling chacha20 v0.10.0 - Compiling futures-channel v0.3.32 - Compiling swc_ecma_visit v19.0.0 - Compiling swc_ecma_parser v29.0.2 - Compiling swc_ecma_parser v32.0.0 - Compiling spki v0.8.0 - Compiling http v1.4.1 - Compiling untrusted v0.9.0 - Compiling crunchy v0.2.4 - Compiling cpubits v0.1.1 - Compiling rand v0.10.2 - Compiling icu_locale_fallback v2.3.0 - Compiling block-padding v0.4.2 - Compiling signature v2.2.0 - Compiling zstd-sys v2.0.16+zstd.1.5.7 - Compiling tiny-keccak v2.0.2 - Compiling data-encoding v2.11.0 - Compiling rayon-core v1.13.0 - Compiling icu_calendar_data v2.3.0 - Compiling rustls v0.23.44 - Compiling inout v0.2.2 - Compiling swc_ecma_utils v25.0.0 - Compiling crossbeam-deque v0.8.6 - Compiling phf_codegen v0.13.1 - Compiling rand_core v0.9.5 - Compiling ff v0.13.1 - Compiling core_maths v0.1.1 - Compiling httparse v1.10.1 - Compiling swc_ecma_transforms_base v32.0.0 - Compiling glob v0.3.3 - Compiling adler2 v2.0.1 - Compiling crc32fast v1.5.0 - Compiling base16ct v0.2.0 - Compiling sec1 v0.7.3 - Compiling clang-sys v1.8.1 - Compiling perry-parser v0.5.1593 (/root/claude-fix-10476/crates/perry-parser) - Compiling calendrical_calculations v0.2.4 - Compiling group v0.13.0 - Compiling rand_chacha v0.9.0 - Compiling cipher v0.5.2 - Compiling unicode-normalization v0.1.25 - Compiling prefix-trie v0.8.4 - Compiling encoding_rs v0.8.41 - Compiling multiversion-macros v0.9.0 - Compiling combine v4.6.8 - Compiling hkdf v0.12.4 - Compiling perry-api-manifest v0.5.1593 (/root/claude-fix-10476/crates/perry-api-manifest) - Compiling sha2 v0.11.0 - Compiling crypto-bigint v0.5.5 - Compiling equator-macro v0.4.2 - Compiling concurrent-queue v2.5.0 - Compiling crossbeam-channel v0.5.15 - Compiling libmimalloc-sys v0.1.49 - Compiling zstd-safe v7.2.4 - Compiling icu_plurals_data v2.3.0 - Compiling bytemuck v1.25.0 - Compiling icu_time_data v2.3.0 - Compiling parking v2.2.1 - Compiling spin v0.9.8 - Compiling num-conv v0.2.2 - Compiling time-core v0.1.9 - Compiling perry-ui-model v0.5.1593 (/root/claude-fix-10476/crates/perry-ui-model) - Compiling icu_decimal_data v2.3.0 - Compiling lazy_static v1.5.0 - Compiling perry-hir v0.5.1593 (/root/claude-fix-10476/crates/perry-hir) - Compiling time-macros v0.2.32 - Compiling event-listener v5.4.1 - Compiling const-random-macro v0.1.16 - Compiling equator v0.4.2 - Compiling elliptic-curve v0.13.8 - Compiling multiversion v0.9.0 - Compiling hickory-proto v0.26.2 - Compiling icu_calendar v2.3.0 - Compiling rand v0.9.4 - Compiling http-body v1.0.1 - Compiling curve25519-dalek v4.1.3 - Compiling webpki-roots v1.0.9 - Compiling phf_macros v0.13.1 - Compiling hmac v0.13.0 - Compiling fixed_decimal v0.7.2 - Compiling hashbrown v0.16.1 - Compiling slotmap v1.1.1 - Compiling core_detect v1.0.0 - Compiling icu_datetime_data v2.3.0 - Compiling multiversion_no_op v1.0.0 - Compiling ryu v1.0.23 - Compiling iana-time-zone v0.1.65 - Compiling minimal-lexical v0.2.1 - Compiling deranged v0.5.8 - Compiling regex-syntax v0.8.11 - Compiling simdutf8 v0.1.5 - Compiling powerfmt v0.2.0 - Compiling icu_locale_data v2.2.0 - Compiling thiserror v1.0.69 - Compiling time v0.3.55 - Compiling regex-automata v0.4.18 - Compiling nom v7.1.3 - Compiling chrono v0.4.45 - Compiling phf v0.13.1 - Compiling tzif v0.4.1 - Compiling aligned-vec v0.6.4 - Compiling const-random v0.1.18 - Compiling rayon v1.12.0 - Compiling miniz_oxide v0.9.1 - Compiling string_cache_codegen v0.6.1 - Compiling rfc6979 v0.4.0 - Compiling derive-syn-parse v0.2.0 - Compiling thiserror-impl v1.0.69 - Compiling curve25519-dalek-derive v0.1.1 - Compiling macro_magic_core_macros v0.5.1 - Compiling miette-derive v7.6.0 - Compiling libloading v0.8.9 - Compiling inotify-sys v0.1.5 - Compiling filetime v0.2.29 - Compiling keccak v0.2.0 - Compiling ident_case v1.0.1 - Compiling jiff-tzdb v0.1.6 - Compiling resolv-conf v0.7.6 - Compiling atomic-waker v1.1.2 - Compiling bitflags v1.3.2 - Compiling precomputed-hash v0.1.1 - Compiling fnv v1.0.7 - Compiling cty v0.2.2 - Compiling regex-lite v0.1.9 - Compiling try-lock v0.2.5 - Compiling tower-service v0.3.3 - Compiling unicode-width v0.1.14 - Compiling unicode-segmentation v1.13.3 - Compiling option-ext v0.2.0 - Compiling bindgen v0.72.1 - Compiling same-file v1.0.6 - Compiling httpdate v1.0.3 - Compiling strsim v0.11.1 - Compiling zlib-rs v0.6.4 - Compiling sha1_smol v1.0.1 - Compiling winnow v1.0.3 - Compiling hex v0.4.3 - Compiling llvm-sys v221.0.1 - Compiling darling_core v0.23.0 - Compiling toml_parser v1.1.3+spec-1.1.0 - Compiling perry-runtime v0.5.1593 (/root/claude-fix-10476/crates/perry-runtime) - Compiling convert_case v0.10.0 - Compiling walkdir v2.5.0 - Compiling flate2 v1.1.10 - Compiling miette v7.6.0 - Compiling dirs-sys v0.5.0 - Compiling itertools v0.12.1 - Compiling want v0.3.1 - Compiling h2 v0.4.19 - Compiling inotify v0.9.6 - Compiling timezone_provider v0.2.6 - Compiling zstd v0.13.3 - Compiling macro_magic_core v0.5.1 - Compiling ecdsa v0.16.9 - Compiling web_atoms v0.2.4 - Compiling icu_time v2.3.0 - Compiling icu_decimal v2.3.0 - Compiling v_frame v0.3.9 - Compiling icu_plurals v2.3.0 - Compiling cexpr v0.6.0 - Compiling regex v1.13.1 - Compiling hashlink v0.11.1 - Compiling primeorder v0.13.6 - Compiling atomic v0.6.1 - Compiling pkcs8 v0.11.0 - Compiling rand_chacha v0.3.1 - Compiling num-rational v0.4.2 - Compiling sha1 v0.11.0 - Compiling icu_pattern v0.5.0 - Compiling md-5 v0.10.6 - Compiling universal-hash v0.5.1 - Compiling serde_spanned v1.1.1 - Compiling toml_datetime v1.1.1+spec-1.1.0 - Compiling ff v0.14.0 - Compiling mio v0.8.11 - Compiling nom v8.0.0 - Compiling hostname v0.4.2 - Compiling as-slice v0.2.1 - Compiling unicode-xid v0.2.6 - Compiling num-bigint-dig v0.8.6 - Compiling rustix v1.1.4 - Compiling radium v0.7.0 - Compiling unicase v2.9.0 - Compiling ixdtf v0.6.5 - Compiling xxhash-rust v0.8.18 - Compiling toml_writer v1.1.2+spec-1.1.0 - Compiling built v0.8.1 - Compiling opaque-debug v0.3.1 - Compiling base16ct v1.0.0 - Compiling shlex v1.3.0 - Compiling av-scenechange v0.14.1 - Compiling crc-catalog v2.5.0 - Compiling paste v1.0.15 - Compiling byteorder v1.5.0 - Compiling perex v0.1.7 - Compiling bytecount v0.6.9 - Compiling node-semver v2.2.0 - Compiling rav1e v0.8.1 - Compiling crc v3.4.0 - Compiling sec1 v0.8.1 - Compiling toml v1.1.5+spec-1.1.0 - Compiling temporal_rs v0.2.6 - Compiling mime_guess v2.0.5 - Compiling derive_more-impl v2.1.1 - Compiling aligned v0.4.3 - Compiling notify v6.1.1 - Compiling group v0.14.0 - Compiling icu_datetime v2.3.0 - Compiling uuid v1.26.0 - Compiling hyper v1.11.1 - Compiling icu_locale v2.2.0 - Compiling taffy v0.13.0 - Compiling macro_magic_macros v0.5.1 - Compiling mimalloc v0.1.52 - Compiling dirs v6.0.0 - Compiling darling_macro v0.23.0 - Compiling string_cache v0.9.0 - Compiling ed25519 v2.2.3 - Compiling crypto-bigint v0.7.5 - Compiling x509-cert v0.3.0 - Compiling tokio-stream v0.1.18 - Compiling async-trait v0.1.92 - Compiling profiling-procmacros v1.0.18 - Compiling arg_enum_proc_macro v0.3.4 - Compiling crossbeam-queue v0.3.12 - Compiling futures-intrusive v0.5.0 - Compiling sync_wrapper v1.0.2 - Compiling num-iter v0.1.45 - Compiling no_std_io2 v0.9.4 - Compiling unicode-bidi v0.3.18 - Compiling mime v0.3.17 - Compiling dtoa v1.0.11 - Compiling utf-8 v0.7.6 - Compiling pastey v0.1.1 - Compiling tower-layer v0.3.3 - Compiling rustc-demangle v0.1.28 - Compiling tap v1.0.1 - Compiling y4m v0.8.0 - Compiling linux-raw-sys v0.12.1 - Compiling sponge-cursor v0.1.0 - Compiling unicode-properties v0.1.4 - Compiling vcpkg v0.2.15 - Compiling unsafe-libyaml v0.2.11 - Compiling quick-error v2.0.1 - Compiling gimli v0.34.0 - Compiling dotenvy v0.15.7 - Compiling libsqlite3-sys v0.37.0 - Compiling stringprep v0.1.5 - Compiling wyz v0.5.1 - Compiling tower v0.5.3 - Compiling tendril v0.5.0 - Compiling elliptic-curve v0.14.0 - Compiling dtoa-short v0.3.5 - Compiling sqlx-core v0.9.0 - Compiling bitstream-io v4.10.0 - Compiling profiling v1.0.18 - Compiling ed25519-dalek v2.2.0 - Compiling darling v0.23.0 - Compiling hyper-util v0.1.20 - Compiling derive_more v2.1.1 - Compiling av1-grain v0.2.5 - Compiling maybe-rayon v0.1.1 - Compiling pbkdf2 v0.13.0 - Compiling aes v0.9.1 - Compiling miniz_oxide v0.8.9 - Compiling selectors v0.38.0 - Compiling rustc_version_runtime v0.3.0 - Compiling pkcs1 v0.7.5 - Compiling half v2.7.1 - Compiling md-5 v0.11.0 - Compiling signature v3.0.0 - Compiling sha1 v0.10.6 - Compiling num-derive v0.4.2 - Compiling cssparser-macros v0.7.0 - Compiling aho-corasick v1.1.5 - Compiling simd_helpers v0.1.0 - Compiling itertools v0.14.0 - Compiling funty v2.0.0 - Compiling noop_proc_macro v0.3.0 - Compiling alloc-no-stdlib v2.0.4 - Compiling weezl v0.1.12 - Compiling zune-core v0.5.1 - Compiling utf8parse v0.2.2 - Compiling imgref v1.12.3 - Compiling tagptr v0.2.0 - Compiling loop9 v0.1.5 - Compiling moka v0.12.15 - Compiling anstyle-parse v1.0.0 - Compiling zune-jpeg v0.5.15 - Compiling alloc-stdlib v0.2.2 - Compiling bitvec v1.0.1 - Compiling cssparser v0.37.0 - Compiling ed448 v0.5.0 - Compiling rsa v0.9.10 - Compiling markup5ever v0.39.0 - Compiling serde_with_macros v3.21.0 - Compiling hash2curve v0.14.0 - Compiling tower-http v0.6.11 - Compiling shake v0.1.0 - Compiling hickory-net v0.26.1 - Compiling macro_magic v0.5.1 - Compiling polyval v0.6.2 - Compiling p256 v0.13.2 - Compiling p384 v0.13.1 - Compiling simple_asn1 v0.6.4 - Compiling serde_urlencoded v0.7.1 - Compiling hkdf v0.13.0 - Compiling webpki-roots v0.26.11 - Compiling http-body-util v0.1.5 - Compiling event-listener-strategy v0.5.4 - Compiling avif-serialize v0.8.9 - Compiling zune-inflate v0.2.54 - Compiling fdeflate v0.3.7 - Compiling pem v3.0.6 - Compiling dashmap v6.2.1 - Compiling universal-hash v0.6.1 - Compiling aead v0.5.2 - Compiling typed-builder-macro v0.22.0 - Compiling raw-cpuid v11.6.0 - Compiling serde_bytes v0.11.19 - Compiling atoi v2.0.0 - Compiling servo_arc v0.4.3 - Compiling color_quant v1.1.0 - Compiling pxfm v0.1.29 - Compiling is_terminal_polyfill v1.70.2 - Compiling base64 v0.23.1 - Compiling bit_field v0.10.3 - Compiling byteorder-lite v0.1.0 - Compiling anstyle v1.0.14 - Compiling inkwell v0.9.0 - Compiling lebe v0.5.3 - Compiling rust_decimal v1.43.0 - Compiling colorchoice v1.0.5 - Compiling rgb v0.8.53 - Compiling whoami v2.1.2 - Compiling anstyle-query v1.1.5 - Compiling fax v0.2.7 - Compiling anstream v1.0.0 - Compiling tiff v0.11.3 - Compiling sqlx-postgres v0.9.0 - Compiling moxcms v0.8.1 - Compiling ravif v0.13.0 - Compiling quanta v0.12.6 - Compiling exr v1.74.0 - Compiling image-webp v0.2.4 - Compiling typed-builder v0.22.0 - Compiling gif v0.14.2 - Compiling bson v3.1.0 - Compiling polyval v0.7.3 - Compiling png v0.18.1 - Compiling jsonwebtoken v11.0.0 - Compiling async-lock v3.4.2 - Compiling hickory-resolver v0.26.1 - Compiling ghash v0.5.1 - Compiling mongodb-internal-macros v3.9.0 - Compiling ed448-goldilocks v0.14.0-pre.15 - Compiling serde_with v3.21.0 - Compiling winresource v0.1.31 - Compiling html5ever v0.39.0 - Compiling brotli-decompressor v5.0.1 - Compiling sqlx-mysql v0.9.0 - Compiling blowfish v0.10.0 - Compiling poly1305 v0.8.0 - Compiling backon v1.6.0 - Compiling sha3 v0.11.0 - Compiling qoi v0.4.1 -warning: function `relevant_box_roots` is never used - --> crates/perry-runtime/src/box.rs:1020:4 - | -1020 | fn relevant_box_roots() -> Vec { - | ^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default - - Compiling arc-swap v1.9.1 - Compiling email-encoding v0.4.1 - Compiling ctr v0.9.2 - Compiling chacha20 v0.9.1 - Compiling kem v0.3.0 - Compiling module-lattice v0.2.3 - Compiling blake2 v0.10.6 - Compiling inkwell_internals v0.14.0 - Compiling derive-where v1.6.1 - Compiling console v0.16.4 - Compiling getopts v0.2.24 - Compiling num-bigint v0.5.1 - Compiling spinning_top v0.3.0 - Compiling perry-codegen v0.5.1593 (/root/claude-fix-10476/crates/perry-codegen) - Compiling web-time v1.1.0 - Compiling nonzero_ext v0.3.0 - Compiling futures-timer v3.0.4 - Compiling winnow v0.7.15 - Compiling arcstr v1.2.0 - Compiling fallible-streaming-iterator v0.1.9 - Compiling email_address v0.2.9 - Compiling quoted_printable v0.5.2 - Compiling keccak v0.1.6 - Compiling bumpalo v3.20.3 - Compiling leb128fmt v0.1.0 - Compiling fallible-iterator v0.3.0 - Compiling take_mut v0.2.2 - Compiling openssl-probe v0.2.1 - Compiling perry-native-registration v0.5.1593 (/root/claude-fix-10476/crates/perry-native-registration) - Compiling libbz2-rs-sys v0.2.5 - Compiling clap_lex v1.1.0 - Compiling ego-tree v0.11.0 - Compiling clap_builder v4.6.6 - Compiling scraper v0.27.0 - Compiling cron v0.17.0 - Compiling bzip2 v0.6.1 - Compiling perry-ffi v0.5.1593 (/root/claude-fix-10476/crates/perry-ffi) - Compiling rustls-native-certs v0.8.4 - Compiling rusqlite v0.39.0 - Compiling zopfli v0.8.3 - Compiling wasm-encoder v0.258.0 - Compiling sha3 v0.10.9 - Compiling redis v1.7.0 - Compiling governor v0.10.4 - Compiling argon2 v0.5.3 - Compiling ml-kem v0.3.2 - Compiling sqlx v0.9.0 - Compiling chacha20poly1305 v0.10.1 - Compiling aes-gcm v0.10.3 - Compiling brotli v8.0.4 - Compiling image v0.25.10 - Compiling bcrypt v0.19.3 - Compiling perry v0.5.1593 (/root/claude-fix-10476/crates/perry) - Compiling x448 v0.14.0-pre.12 - Compiling ghash v0.6.0 - Compiling aes-kw v0.3.1 - Compiling xattr v1.6.1 - Compiling tempfile v3.27.0 - Compiling sha3 v0.12.0 - Compiling p521 v0.13.3 - Compiling x25519-dalek v2.0.1 - Compiling perry-codegen-js v0.5.1593 (/root/claude-fix-10476/crates/perry-codegen-js) - Compiling nanoid v0.5.0 - Compiling lzma-rust2 v0.16.4 - Compiling cbc v0.2.1 - Compiling ecb v0.2.1 - Compiling rustls-pemfile v2.2.0 - Compiling perry-validation v0.5.1593 (/root/claude-fix-10476/crates/perry-validation) - Compiling sha3-utils v0.5.0 - Compiling clap_derive v4.6.4 - Compiling lru v0.18.4 - Compiling is-terminal v0.4.17 - Compiling deflate64 v0.1.12 - Compiling ppmd-rust v1.4.0 - Compiling rustls-webpki v0.103.15 - Compiling constant_time_eq v0.4.2 - Compiling termcolor v1.4.1 - Compiling unit-prefix v0.5.2 - Compiling typed-path v0.12.3 - Compiling humantime v2.3.0 - Compiling shell-words v1.1.1 - Compiling env_logger v0.10.2 - Compiling dialoguer v0.12.0 - Compiling indicatif v0.18.6 - Compiling zip v8.6.0 - Compiling clap v4.6.6 - Compiling perry-codegen-wasm v0.5.1593 (/root/claude-fix-10476/crates/perry-codegen-wasm) - Compiling tar v0.4.46 - Compiling perry-perex v0.5.1593 (/root/claude-fix-10476/crates/perry-perex) - Compiling tokio-rustls v0.26.5 - Compiling hyper-rustls v0.27.9 - Compiling tungstenite v0.29.0 - Compiling reqwest v0.12.28 - Compiling mongodb v3.9.0 - Compiling tokio-tungstenite v0.29.0 - Compiling lettre v0.11.23 - Compiling perry-codegen-glance v0.5.1593 (/root/claude-fix-10476/crates/perry-codegen-glance) - Compiling perry-codegen-arkts v0.5.1593 (/root/claude-fix-10476/crates/perry-codegen-arkts) - Compiling perry-codegen-wear-tiles v0.5.1593 (/root/claude-fix-10476/crates/perry-codegen-wear-tiles) - Compiling perry-transform v0.5.1593 (/root/claude-fix-10476/crates/perry-transform) - Compiling perry-codegen-swiftui v0.5.1593 (/root/claude-fix-10476/crates/perry-codegen-swiftui) - Compiling fslock v0.2.1 -warning: `perry-runtime` (lib) generated 1 warning - Compiling perry-updater v0.5.1593 (/root/claude-fix-10476/crates/perry-updater) - Compiling perry-runtime-static v0.5.1593 (/root/claude-fix-10476/crates/perry-runtime-static) - Compiling perry-stdlib v0.5.1593 (/root/claude-fix-10476/crates/perry-stdlib) - Compiling perry-stdlib-static v0.5.1593 (/root/claude-fix-10476/crates/perry-stdlib-static) - Finished `perry-dev` profile [optimized] target(s) in 3m 47s diff --git a/cc-perf-campaign/codex/REPORT_layout_residue.md b/cc-perf-campaign/codex/REPORT_layout_residue.md deleted file mode 100644 index 69611e80acf..00000000000 --- a/cc-perf-campaign/codex/REPORT_layout_residue.md +++ /dev/null @@ -1,217 +0,0 @@ -# Per-object layout-mask residue histogram - -Runtime implementation SHA: `97b550085869f108c0789ec07ac620ab9de7f295` - -Young-log replay SHA: `dd279a8ba2de6b86a044d1074955e87fccf76d53` - -Branch: `perf/layout-residue-histogram`, based on -`fork/perf/minor-phases-and-logs` at -`151680fa0f6ffbf6ebb7d8166e2424fc0d031b49`. - -## Part 0: #9895 replay - -`git cherry 151680fa0 0a427a39f` prints `- 390796a11`: -`390796a11`'s one-pass layout prune and saturating filter are already in the -base. It prints `+ 19a6cd201`, so that commit alone was replayed. The only -conflict was `gc/tests/young_log_tests.rs`; the #9957 fixed-cost scanner tests -and #9895's layout-prune tests were kept as adjacent blocks. The runtime hunks -were not edited. - -`git range-diff 19a6cd201^! dd279a8ba^!` shows only commit metadata/message and -the expected `young_log_tests.rs` insertion context. No runtime/code hunk -differs. The replayed tests are present: - -- `dead_young_masked_owner_is_pruned_through_the_layout_log` -- `surviving_young_masked_owner_is_rekeyed_and_stays_logged` -- `old_layout_records_are_skipped_by_a_minor` - -The focused `layout` filter ran the first and third green. The middle name -does not contain `layout`; its required full-suite execution is one of the -gates the 12 GB disk floor prevented, so it is present but not claimed green -on this machine. - -The superseded `41a8af7da`, `bdd1fc003`, and `0a427a39f` were not replayed. -Consequently their full-walk test names/guard are intentionally absent: -`young_closure_prop_value_is_traced_and_moved_by_a_minor`, -`young_value_under_an_old_closure_owner_is_traced_by_a_minor`, -`old_closure_entries_survive_a_minor_full_walk`, and -`dropping_a_logged_closure_owner_trips_the_prune_rule2_check`. The original -young-walk tests remain because #9957 measured `closure.dynamic_props` winning -3.75 -> 3.06 ms and the base retains that log. - -## Diagnostic fields and derivation - -The instrument calls `layout_on()` exactly once in each non-empty full or -young death prune. When it is false, neither an `Instant` nor the surviving -mask pass is created. When true, `prune_walk_us` times only the existing prune -entry loop: the two `retain` walks for a full prune, or the drained young-key -loop for a minor. The diagnostic histogram pass runs afterwards and is not -included in that price. - -The first new line is: - -```text -[layout-diag] residue keys= closure= object= array= other= slots{4-7= 8-15= 16-31= 32-63= 64-255= 256+=} ptr_share{q1= q2= q3= q4=} space{nursery= old= malloc=} inserts_since{birth= rebuild= store=} prune_walk_us= -``` - -- `keys` is the surviving `LAYOUT_SLOT_MASKS.len()` after the death prune. -- `closure`, `object`, `array`, and `other` come from the tracked owner's - `GcHeader.obj_type`. `other` is defensive: legitimate mask owners are the - three layout-bearing kinds. -- Logical slots use the same owner facts as tracing: masked closure - `real_capture_count`, shape-derived `object_live_slot_count`, and array - `min(length, capacity)`. Other types fall back to GC payload words. The six - indices are `<=7`, 8-15, 16-31, 32-63, 64-255, and 256+. Under the default - floor a legitimate first-bucket mask is 4-7; the `<=7` implementation keeps - totals exhaustive if an override or corrupt residue produces a smaller one. -- Pointer slots are `LayoutSlotMask::count_slots(logical_slots)`. Quartiles - are non-overlapping: q1 `<=25%`, q2 `>25% and <=50%`, q3 `>50% and <=75%`, - q4 `>75%`. -- `nursery` is an arena owner in Eden or either survivor half. `malloc` is an - owner without `GC_FLAG_ARENA`. Remaining arena spaces (`Old`, `Longlived`, - and transient `PromotedYoung`) are `old` for this three-way price split. -- `birth`, `rebuild`, and `store` count fresh HashMap keys inserted by - `layout_init_from_slots`, `layout_rebuild_from_slots` (including the exact - rebuild wrapper), and `layout_note_slot`. Updates to an existing mask and - GC rekeys do not count. The three counters reset after every emitted prune. - Provenance is deliberately not stored on each `LayoutSlotMask`: doing so - would change a representation and trace/store path that exists when the - diagnostic is off. The separate counters answer insertion traffic, not the - historical origin of each survivor. -- `prune_walk_us` is `Instant::elapsed().as_micros()` around the existing loop, - saturated to `u64`. - -The second new line is: - -```text -[layout-diag] price per_key_prune_ns= est_tag_checks_saved_per_trace= -``` - -`per_key_prune_ns` is integer `prune_walk_us * 1000 / keys` (zero for no mask -keys). `est_tag_checks_saved_per_trace` is the saturated sum of -`logical_slots - pointer_slots` over every surviving mask: the maximum number -of exact tag checks the whole residue can avoid in one full trace. It is a -benefit ceiling, not a claim that every object is traced every cycle. - -This histogram can decide which owner kind and logical-slot bucket dominates, -how sparse the masks are, where their owners live, and whether the 64+ buckets -where a mask can plausibly earn program-global upkeep are a rounding error. -It does not change a threshold or selection rule. - -## Tests and sabotage evidence - -- `layout_residue_histogram_counts_by_kind_and_bucket` arms a per-thread test - sink, creates 5- and 20-capture closures with pointer captures, rebuilds one - 70-slot object, prunes with all owners surviving, and asserts kind, slot, - quartile, space, insert-site, saved-check, and output fields. It passed in - the focused release `layout` run (137 passed, 0 failed). Sabotage swapped - the 8-15 and 16-31 destinations; the - test failed with slots `[1, 1, 0, 0, 1, 0]` against expected - `[1, 0, 1, 0, 1, 0]`. -- `layout_residue_histogram_is_silent_when_unarmed` forces the per-thread sink - off, performs a prune, asserts no residue output, and reads a test-only - histogram-entry counter. It passed in the same focused release run. - Sabotage removed the full-prune `if layout_diag` guard; it failed with 1 - entry visited against expected 0. - -## Follow-up rule candidates - -### (a) Young-entry log for the prune - -This is orthogonal to deciding which masks deserve to exist, and Part 0 has -already stacked it here. `PerObjectLayoutHint.young_keys` is armed before every -new/moved young record becomes findable. A minor drains only those candidates, -drops stale/dead/promoted keys, and a full prune rebuilds the log from its -authoritative table walk. It changes repeated minor pruning from O(standing -keys) toward O(young churn), while the histogram describes the residue and is -armed-only. It cannot remove the full-trace walk or the mask's insert/store/ -death costs, so a high floor or shared representation can still win on top. - -### (b) Measured break-even floor - -A follow-up can replace the corpus default of four with a floor derived from -`per_key_prune_ns`, expected prunes during an owner's lifetime, and a separately -measured tag-check nanosecond cost. The mask's maximum per-trace return is -already printed as `slots - pointer_slots`; its standing prune cost is printed -per key. The relevant funnels are centralized: bulk birth and rebuild compare -against `layout_mask_min_slots`, while store-time creation goes through -`layout_prefers_scan_over_mask` (with the existing object-specific default of -eight). The missing input is tag-check cost and trace frequency by lifetime; -without those, converting the current price line directly into a slot number -would mix one prune with one full trace and repeat the campaign's wrong-ratio -failure mode. - -### (c) Closure masks keyed by function - -This is structurally possible when every instance agrees. `ClosureHeader` -provides a stable native `func_ptr` and `real_capture_count`, and -`layout_init_from_slots` observes the complete birth mask. A function-keyed -descriptor can store `(slot_count, mask)`, reuse it for agreeing instances, -and poison the function on the first differing birth or later capture store, -matching `SHAPE_LAYOUTS`' `Some/None` ambiguity pattern. Poison must make every -instance fall back to conservative tag scanning (safe even for earlier -instances that omitted per-object masks), while a diverging stored instance -can retain its exact per-object mask. The present header has only -`GC_LAYOUT_SIDE_MASK`, not a function-shared state, so mask resolution and -`layout_note_slot` would need an explicit shared lookup/fallback protocol. -Function entries then need no death prune because code pointers are stable and -the table is O(functions), but agreement/poison tests must cover post-birth -stores and differing capture counts before this becomes a rule. - -## Validation - -- `cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1 layout`: - PASS before the two sabotage checks: 137 passed, 0 failed, 3,143 filtered. - Both sabotages were then reverted. A final rerun against the restored source - could not start because the mandatory free-space check fell below 12 GB. -- Full `cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1`: - NOT RUN: blocked by the same free-space floor. -- `cargo build --release -p perry-runtime --features wasm-host -j4`: NOT RUN: - blocked by the same free-space floor. -- `rustfmt --check`: PASS on every changed Rust file. -- `git diff --check`: PASS. -- `scripts/check_file_size.sh`: PASS; no Rust file exceeds 2,000 lines - (`gc/layout.rs` is 1,999). -- No local cc run, as requested. - -Every Cargo attempt checked `df -g /` immediately beforehand. The final gate -rerun is currently blocked because the latest check reports 11 GB available, -below the binding 12 GB floor; no below-floor Cargo command was started. -Per the campaign's parked-lane rule, this worktree's disposable `target/` was -then removed. The focused run did compile and execute its release test binary, -but that cleanup means there is no retained artifact mtime to present as final -build proof; the focused result is evidence for the named tests, not a -substitute for the blocked final gates. - -## Stage LP: exact perrymaster request and falsifiers - -Relink the #9957 tree plus `97b550085869f108c0789ec07ac620ab9de7f295` -(young-log prune plus residue histogram) on m6mp's object cache. Run two -graceful four-turn 3300-character candidate repetitions against `app-m6mp` -with `PERRY_GC_DIAG=1`; do not enable layout diagnostics for the CPU A/B, -because its deliberate whole-residue histogram is measurement overhead. Then -run one additional candidate capture with -`PERRY_GC_DIAG=1 PERRY_LAYOUT_DIAG=stderr`. - -The falsifiers are: - -- `dead_owner_side_table_pruning` for `LAYOUT_SLOT_MASKS + TYPED_LAYOUTS` - falls from 8.7-9.3 ms to at most 1 ms per steady minor, following the - +3...+10 young-key churn rather than 155-161k standing keys. -- Total steady copied-minor pause falls from about 46 ms to about 38 ms. -- Four-turn CPU improves by 1-2%; report both repetitions, not only a minimum. -- Peak and settled RSS remain within +3%. - -For the +29 MB settled result #9895 observed on main, one 160k-key log retains -two `Vec` buffers. At a 262,144-entry capacity that is about 4 MiB, so a -single table-owning thread cannot explain +29 MB; that delta would require -about seven similarly grown thread-local logs or allocator-retained secondary -effects. Stage LP must either report enough per-thread log capacity to account -for it or show the settled delta gone. Do not label +29 MB “the log” without -that reconciliation. - -From the layout-diagnostic run, preserve the residue lines for minors 5, 10, -13 (turn-2 maximum), 17, and 25. Report medians of both price fields over the -steady minors, alongside the phase values. Those rows decide whether closure/ -object/array and the 4-7/8-15/16-31/32-63/64+ populations justify a threshold -or function-keyed follow-up. diff --git a/cc-perf-campaign/codex/REPORT_minor_phases_and_logs.md b/cc-perf-campaign/codex/REPORT_minor_phases_and_logs.md deleted file mode 100644 index 80af5e11b44..00000000000 --- a/cc-perf-campaign/codex/REPORT_minor_phases_and_logs.md +++ /dev/null @@ -1,232 +0,0 @@ -# Copying-minor phases and remaining scanner young logs - -Phase-instrument commit: `09846784c` - -Scanner-log implementation commit: `dae519296` - -Branch: `perf/minor-phases-and-logs`, based on -`8b7dc3342`. - -## Copying-minor phase instrument - -- `crates/perry-runtime/src/gc/copying_phase.rs:26` is the diagnostic-only - accumulator. It uses the same `Instant` clock as `pause_us` and records - non-overlapping spans for `root_scan`, `copy_evacuation`, - `remembered_set_young_logs`, `promotion`, - `dead_owner_side_table_pruning`, `from_space_finalization`, - `forwarding_fixups`, and `block_reset_flip`. `other` is the exact residual - between those named spans and the whole pause, and `phase_sum_us` is formed - from the nanosecond partition before conversion, so it equals `pause_us` - apart from the shared sub-microsecond truncation (well inside 2%). -- `crates/perry-runtime/src/gc/copying.rs:1220-1749` starts and records the - counters in the functions whose work they price. The two registered-root - passes accumulate in `root_scan`; the transitive worklist drain is - `copy_evacuation`; remembered snapshot/dirty scan and post-cycle restore are - accumulated together; promotion covers retag plus finish; forwarding covers - promoted-edge rebuild and verification/fixup work; reset covers to-space - preparation plus the final reset/flip. -- `crates/perry-runtime/src/gc/copying_phase.rs:84` renders counts where the - collector already owns them: copied/promoted objects and bytes, remembered - entries and dirty slots, and finalized map/set/error/regexp owners. The - dead-owner fan-out at `crates/perry-runtime/src/gc/dead_owner.rs:261` clocks - every registry table separately and appends those table names and - microseconds to the same field. Those prune callbacks expose no removed-row - count, so no invented count is printed. -- `crates/perry-runtime/src/gc/copying.rs:1962` appends `phases:` to every - completed `[gc-copy-minor] ran` line. `PERRY_GC_DIAG` off creates no phase - accumulator, takes no phase clocks, and builds no detail strings. -- The sabotage unit - `copied_minor_phase_residual_makes_the_partition_exact` removes a named - bucket from the expected arithmetic if the partition is widened or omitted. - -## Scanner map and young-entry logs - -### `scan_descriptor_roots_mut` - -This walks string-keyed property-attribute and accessor tables plus their two -owner indexes. Owner addresses are metadata-only and need a minor visit only -while movable/reclaimable; accessor get/set NaN-boxes are strong roots and may -require tracing through Longlived values. A #9754 owner log already existed. -The write funnel at `object/descriptor_state.rs:148` is present at all five -publication/transfer sites (`:985`, `:1208`, `:1277`, `:1394`, `:1428`). This -change narrows the metadata-key half from `addr_is_minor_relevant` to -`addr_is_minor_collectible`; the re-derivation and post-visit keep predicate -use the same rule at `object/descriptor_state/young.rs:42` and -`object/descriptor_state/gc_scan.rs:17`. The full walk is unchanged and -rebuilds the log. - -### `scan_closure_dynamic_props_roots_mut` - -This walks `CLOSURE_PROPS` values, `CLOSURE_STATIC_PROTOTYPES` values, and the -metadata-only owners of those tables and `CLOSURE_DELETED_KEYS`. A #9754 owner -log already existed. The enforced write funnels are -`closure/dynamic_props.rs:117`, `:186`, `:241`, `:388`, and `:1068`. Owner -retention is now collectible-only; property/prototype values keep the broader -transitive predicate. The minor path is `:533`; the full path remains whole -table and rebuilds the log. - -### `scan_builtin_closure_metadata_roots_mut` - -This walks two owner-keyed, pointer-free metadata tables: closure arity and the -non-constructable set. Only the closure address can move or die. There was no -partial log. The tables and their complete setters were extracted to -`object/native_module/callable_exports/builtin_closure_metadata.rs`; `:18` -arms the owner log before either setter publishes, `:95` drains only logged -collectible owners on a minor, and the unchanged full walk visits all owners -and rebuilds the log. - -### `scan_template_raw_roots_mut` - -This scanner owns three small tables: call-site to cooked/raw template arrays, -cooked to raw template arrays, and array named properties. The attempted young -logs were reverted after MP measurement showed 2.76 ms for the keyed path -against 1.83 ms for the original full walk. The scanner again walks the three -authoritative tables directly, with no insert-side log upkeep. - -### `scan_symbol_side_table_roots_mut` - -This walks six slot shapes: `SYMBOL_PROPERTIES` owner metadata and strong -symbol/value pairs, `SYMBOL_PROPERTY_ATTRS` owner metadata and strong symbol -keys, symbol accessors plus get/set roots, class-static symbol/value pairs, -and metadata-only `SYMBOL_POINTERS`. The attempted typed-slot young log was -reverted after MP measurement showed 2.47 ms for the keyed path against -1.74 ms for the original full walk. Direct scans again iterate the -authoritative tables, and budgeted scans again use the pre-existing full slot -snapshot; none of the symbol writers pays young-log upkeep. - -The retained descriptor, closure-dynamic-property, built-in-closure-metadata, -and shape-cache young logs continue to emit `[gc-young-log]` accounting with -logged/visited/kept/table size. - -## MP measurement and the two reverted/fixed logs - -Perrymaster measured MP-stage medians over 16 steady 3300-character minor -collections, comparing app-m6mp (the five scanner changes) with app-m6ms -(without them): - -| scanner | m6ms full walk | m6mp young log | delta | -|---|---:|---:|---:| -| descriptor_roots | 4.12 ms | 4.02 ms | -0.1 ms | -| closure_dynamic_props | 3.75 ms | 3.06 ms | **-0.7 ms** | -| builtin_closure_metadata | 1.42 ms | 0.93 ms | **-0.5 ms** | -| shape_cache | 0.68 ms | 0.27 ms | **-0.4 ms** | -| **template_raw_roots** | 1.83 ms | **2.76 ms** | **+0.9 ms** | -| **symbol_side_table** | 1.74 ms | **2.47 ms** | **+0.7 ms** | -| transition_cache / intern / class_side / singleton_closure / box | flat | flat | flat | -| **total** | **15.5 ms** | **15.3 ms** | **-0.2 ms** | - -Both regressions are case (b): the logged path made each visited entry more -expensive than the dense full walk. They are not duplicate-log failures: -`YoungLog::take_sorted` sorts and globally deduplicates every batch, and each -writer tests the young/relevant predicate before noting a key. - -- `template_raw_roots`: the full scanner streams each map directly and only - removes/reinserts keys that actually move. The young path sorted its keys, - performed a hash lookup for every cache entry, and unconditionally removed - and reinserted every logged raw-map and named-property owner even when the - owner did not move. A pointer or index cannot safely retain the full walk's - per-entry cost because insertion and rekeying can relocate these `HashMap` - entries. The three logs, their publication hooks, and their two rederivation - tests were therefore removed. -- `symbol_side_table`: the full scanner streams the maps and their property - vectors. The typed-slot path sorted its keys, then recovered every property - entry through an owner hash lookup plus a linear search of that owner's - vector; the other slot shapes also paid keyed table lookups. Hash-map - rekeying and vector growth make raw entry pointers or indices unstable, so a - safe O(young) path with the full walk's per-entry cost would require a - structural table redesign. The typed log, all writer hooks, and its - rederivation test were therefore removed. - -Re-measurement falsifier: on perrymaster, `template_raw_roots` must be at most -**1.83 ms** and `symbol_side_table` at most **1.74 ms** at the median, the -three improved scanners must remain unchanged, and total scanner time must be -at most **14 ms**. - -## Sabotage tests - -- `descriptor_log_rederivation_rejects_a_suppressed_setter`: suppresses the - real property-attrs funnel; re-derivation must report the missing owner. -- `closure_log_rederivation_rejects_a_suppressed_setter`: suppresses the real - closure dynamic-property funnel; re-derivation must report the missing - owner. -- `builtin_closure_log_rederivation_rejects_a_suppressed_writer`: suppresses - the arity setter; re-derivation must report the missing closure. -- `template_raw_log_rederivation_rejects_a_suppressed_writer`, - `array_named_log_rederivation_rejects_a_suppressed_setter`, and - `symbol_log_rederivation_rejects_a_suppressed_property_writer` were removed - with the two reverted logs; their enforced-writer invariant no longer - exists. - -Each completeness check is compiled under `debug_assertions` and `test`. In -the release lib run below, every named sabotage test passed. - -## Shape residual - -The residual is real young work, not another whole-table leak. The exact keep -predicate is `object/shapes.rs:2154`: - -- Nursery Eden, either survivor half, and `PromotedYoung` keys arrays stay - logged because their table keys must be rewritten if they move. -- Malloc-GC keys arrays stay only when an old/cache carrier makes the family a - root and the allocation remains minor-collectible. -- Longlived keys arrays stay only when an old/cache carrier roots the family - **and** at least one property-key leaf in the array is collectible. Longlived - non-carriers and carriers whose leaves are all old/Longlived drop out. -- Old keys arrays always drop out. - -There is one intentional transient duplicate at `object/shapes.rs:2244`: the -mark pass may move a family before the metadata-only slot index is repaired in -the rewrite pass, so both the post-copy address and stale index address must -survive between the passes. Tightening any of these remaining cases would -skip relocation, collection of malloc keys, a strong carrier edge, or the -between-pass index repair. This explains why shape time appears only on the -steady minors that create/grow a burst of genuinely young shape-key arrays; -there is no sound additional predicate tightening in this change. - -## Validation - -- `git diff --check`: PASS. -- `scripts/check_file_size.sh`: PASS (all Rust files at most 2,000 lines). -- `cargo fmt --all -- --check`: PASS. -- `scripts/check_thread_locals.py --self-test`: PASS in all seven directions. -- `scripts/check_thread_locals.py`: PASS, 411 hot declarations and 273 cold - declarations in 84 recorded files, below the 768-slot hot capacity. -- `scripts/gc_rekeyed_key_tables.py`: PASS, 42 sites and 25 registered prunes - classified with zero gaps. The split child now owns the `visit_owner` - inventory entry. -- `cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1` via - `measure_lock.sh --build`: PASS, 3,271 passed, 0 failed, 4 ignored. The three - rederivation tests tied to the reverted logs were explicitly removed; the - retained sabotage tests passed. -- `cargo build --release -p perry-runtime --features wasm-host -j4` via - `measure_lock.sh --build`: PASS. - -## Predictions and exact perrymaster request - -Prediction after the MP follow-up: the two reverted scanners return to their -measured full-walk medians or better, the retained closure, built-in closure, -and shape-cache improvements remain, and steady scanner total is at most -**14 ms**. The phase table, not an estimate, must name the next non-scanner -lever. RSS should fall slightly because the two reverted logs and their -retained buffers are gone. - -Exact perrymaster request: fetch pushed branch `perf/minor-phases-and-logs` and -relink this runtime-only change on main's cache. Run the three required gates -through -`/Users/amlug/projects/perry/secret-tests/cc-perf-campaign/measure_lock.sh --build` -detached, using exactly: - -1. `cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1` -2. `cargo build --release -p perry-runtime --features wasm-host -j4` -3. `cargo build --release -p perry -j4` - -Then run one -graceful four-turn 3300-character cc workload and one 400-character workload -with `PERRY_GC_DIAG=1`, printing and preserving **every complete** -`[gc-copy-minor] ran` line. The phase table for a steady minor is the -deliverable that names the next lever. Confirm `template_raw_roots` is at most -1.83 ms, `symbol_side_table` is at most 1.74 ms, the three improved scanner -medians are unchanged, and total scanner time is at most 14 ms. Finally run -paired **5x3300 + 3x400** against both main and #9950's runtime, -reporting cc turn CPU and peak RSS; target node/bun CPU parity, allowing only -+1-10% RSS. diff --git a/cc-perf-campaign/codex/REPORT_minor_scanner_young_logs.md b/cc-perf-campaign/codex/REPORT_minor_scanner_young_logs.md deleted file mode 100644 index fe8570d4a88..00000000000 --- a/cc-perf-campaign/codex/REPORT_minor_scanner_young_logs.md +++ /dev/null @@ -1,107 +0,0 @@ -# Minor scanner young logs - -Implementation SHA: `d399c39ddb638a92b2735a6bacc2aef13def944a` - -## Map and mechanism - -- `object/shapes.rs:1972` scans two address-keyed structures. `families` maps a - keys-array address to every descriptor id whose slab record carries that - address; the descriptor record is the authoritative rewritable `keys` edge. - A family is a strong minor root only when an old receiver or an optimization - cache carries one of its descriptors. `indices` is a weak key-to-slot - accelerator keyed by the same keys-array address and needs only relocation - repair. Shape property-key payloads are strings/symbol headers, both GC - leaves. Nursery keys arrays can move; old arrays cannot; Longlived arrays do - not move or die but can temporarily contain a collectible key leaf. -- Shapes already had #9755's `young_keys` address log and the four - `shapes.indices` arm sites. Its keep predicate was - `addr_is_minor_relevant`, so every Longlived keys array stayed in the log - forever. `object/shapes.rs:2154` now re-derives actual minor work: nursery - addresses remain for relocation, malloc roots remain while carrier-owned, - and a Longlived carrier remains only while its property-key payload contains - a collectible leaf. `object/shapes.rs:271` receives old/cache carrier notes - without recursively borrowing the shape table; `object/shapes.rs:801` is the - enforced structural-publication funnel that re-arms a same-address mutation. - Scanner-internal rekeys do not enqueue a duplicate visit. -- `box.rs:954` previously walked every address in `BOX_REGISTRY`. These are - malloc-allocated mutable-capture/async state cells; the registry address is - not a GC pointer. Only the `Box::value` NaN-box can point into the nursery. - `I32Box` and `BoolBox` registries contain no GC edge and were never part of - this scanner. There was no partial box log. -- `box.rs:123` adds the box remembered set. Both allocation arms and both - mutation ABIs arm it before publishing a minor-relevant payload - (`box.rs:133`, `box.rs:705`, `box.rs:725`, `box.rs:1318`, `box.rs:1357`). - The trusted setter is included because generated boxed-local stores use it; - omitting that silent path would violate the enforced-funnel rule. Release - paths only clear/de-register cells, and scanner rewrites compact their own - entries. `box.rs:1040` owns the priced `visited` counter. -- Both minor walks sort/deduplicate their logged addresses, drop stale keys, - and keep only post-visit non-old entries. Full/major scans still enumerate - the authoritative whole tables and rebuild the logs. Under - `debug_assertions` and in lib tests, each minor scan re-derives the relevant - set from the whole table and asserts that the log is complete. -- `gc/copying.rs:1889` now emits `pause_us=` and `scan_us=` together on every - completed `[gc-copy-minor] ran` line. `pause_us` is sampled as the final - action before the copied-minor returns to the mutator; `scan_us` is the - already-profiled scanner total returned by `gc/scanner_profile.rs:131`. - Timing remains behind the existing cached `PERRY_GC_DIAG` gate. - -## Tests and sabotages - -- `shape_table_minor_walk_visits_exactly_k_young_entries`: N old families and - k young families produce `visited == k`. Sabotage: remove - `note_young_keys`; the completeness re-derivation panics. -- `shape_table_rederivation_rejects_a_suppressed_logging_site`: a test-only - suppression skips the production family arm and the scan must panic. -- `shape_mutation_to_new_young_key_rearms_minor_log`: a Longlived carrier that - gains a new nursery key at the same address must move that key. Sabotage: - remove the re-arm in `stamp_object_shape_id_with_carrier_note`. -- `box_roots_minor_walk_visits_exactly_k_young_entries`: N old payloads and k - young payloads produce `visited == k`. Sabotage: remove either allocator arm. -- `box_root_rederivation_rejects_a_suppressed_mutation_hook`: a test-only - suppression skips `js_box_set_bits` logging and the authoritative registry - walk must panic. -- `box_mutation_to_new_young_object_is_visited`: an old box changed to a new - nursery object is visited. Sabotage: remove the setter hook. -- `promoted_shape_entry_leaves_young_log_and_remains_in_major_walk` and - `promoted_box_root_leaves_log_and_is_found_by_full_walk`: promotion makes - `kept == 0`, while the next authoritative full walk still visits the entry. - Sabotage: retain the pre-visit/from-space classification or scope the full - walk to the log. -- Existing scanner-completeness and moving-witness suites are unchanged and - remain part of the requested runtime-lib gate. - -## Validation - -- `scripts/check_file_size.sh`: PASS. -- `git diff --check`: PASS. -- Cargo gates: NOT RUN. `df -g /` immediately before the first possible Cargo - invocation reported `0` GB available, below the binding 12 GB floor. Per the - task rule, no Cargo command was started and no wait for disk was attempted. -- Not run for the same reason: - `cargo test -p perry-runtime --release --lib -- --test-threads=1`; - `cargo build --release -p perry-runtime --features wasm-host`; - `cargo build --release -p perry`. - -## Predictions and exact perrymaster request - -Predictions: on a zero-live steady minor, -`object::shapes::scan_shape_table_rekey_mut` and -`r#box::scan_box_roots_mut` each fall from about 2 ms to at most 0.2 ms; -steady-minor scanner total falls from 7–8 ms to at most 3 ms; every completed -minor reports `pause_us` and `scan_us`. CPU bound is about -3% at 3300 chars -and larger at 400 chars, where minors are a larger share. RSS should be -unchanged (small retained log capacities only, within the allowed 1–10%). - -Perrymaster request, from pushed SHA: relink on the I7-view tree -(runtime-only), then run the three gates through -`/Users/amlug/projects/perry/secret-tests/cc-perf-campaign/measure_lock.sh --build` -at `-j4` using detached `nohup`: (1) -`cargo test -p perry-runtime --release --lib -- --test-threads=1`, (2) -`cargo build --release -p perry-runtime --features wasm-host`, and (3) -`cargo build --release -p perry`. Because this is GC-adjacent, the coordinator -must apply `run-extended-tests`. After green gates, do one graceful four-turn -3300-char run and one 400-char run with `PERRY_GC_DIAG=1`, preserving complete -`[gc-copy-minor] ran pause_us=... scan_us=...` and -`[gc-scanner-profile] copying_minor` lines. Then run paired 5x3300 + 3x400 -against I7-view for CPU and RSS. diff --git a/cc-perf-campaign/codex/REPORT_receiver_repr_ledger.md b/cc-perf-campaign/codex/REPORT_receiver_repr_ledger.md deleted file mode 100644 index 09f121772e2..00000000000 --- a/cc-perf-campaign/codex/REPORT_receiver_repr_ledger.md +++ /dev/null @@ -1,178 +0,0 @@ -# Receiver-representation campaign PR 1: diagnostics and typed ledger - -Date: 2026-09-07 CEST - -Branch: `perf/receiver-repr-ledger` - -## Revisions - -- base `origin/main`: `8b7dc3342b22fe6270739c8d51585c3d2cdfa618` -- implementation: `9b6884e214beb93873f21dd76afe49e42f3f25df` -- report: this final branch commit (the pushed head named in the handoff) - -The merge-base is exactly the base SHA above. No #9937 commit or tree was used. - -## Result - -PR 1 adds measurement and metadata only. It does not change a JS-visible -representation, a release-path classifier, a wrapper, or native-result boxing. -All five new pointer-result classes enter the same `LoweredValue::native_handle` -branch used by the removed `NativeRetKind::Ptr`, so materialization is byte-for- -byte the existing pointer-tag path. `observed_wrapped` is therefore intentionally -zero in this PR. - -`PERRY_RECEIVER_REPR_DIAG=` reuses `hot_diag`'s sink parser and atomic -temporary-file rename. The first event publishes a snapshot; later events test -every 4,096 events and replace the file after at least one second. The line is: - -```text -[receiver-repr-diag] constructed common=… fetch=… zlib=… proxy=… timer=… text=… tui=… async_hook=… async_resource=… symbol_global=… external_buffer=… sab=… null_stub=…; observed_old common=… fetch=… zlib=… proxy=… timer=… text=… tui=… async_hook=… async_resource=… symbol_global=… external_buffer=… sab=… null_stub=…; observed_wrapped common=… fetch=… zlib=… proxy=… timer=… text=… tui=… async_hook=… async_resource=… symbol_global=… external_buffer=… sab=… null_stub=…; bare_managed=…; invalid_pointer_zero=…; direct_mismatch=… -``` - -Every producer and funnel has one `receiver_repr_on()` guard. After one-time -environment parsing, the test is a relaxed atomic load. When unarmed, no range, -registry, ownership, mutex, header, counter, or snapshot work runs. The only -release-path cost is that single guard. `direct_mismatch`'s direct header-byte -probe is compiled only with `debug_assertions`; even there it runs only when the -sink is armed. - -## Instrumented producers - -The current branch locations are: - -| Family | Producer(s) and diagnostic bump | -| --- | --- | -| common | `register_handle` at `crates/perry-stdlib/src/common/handle.rs:43` (bump `:47`); `register_handle_with_id` at `:55` (bump `:58`) | -| fetch | `alloc_fetch_handle_id` at `crates/perry-stdlib/src/fetch/mod.rs:223` (bump `:231`) | -| zlib | `next_zlib_id` at `crates/perry-stdlib/src/zlib.rs:722` (bump `:730`) | -| proxy | `js_proxy_new` at `crates/perry-runtime/src/proxy.rs:451` (bump `:483`) | -| timer | `next_timer_id` at `crates/perry-runtime/src/timer.rs:529` (bump `:534`) | -| text | `js_text_encoder_new` at `crates/perry-runtime/src/text.rs:106` (bump `:108`); decoder `register_decoder` at `:159` (bump `:179`) | -| tui | tree `register` at `crates/perry-runtime/src/tui/tree.rs:51` (bump `:55`); `js_perry_tui_state_alloc` at `tui/state.rs:100` (bump `:105`); `use_ref`, `use_app`, `use_stdout`, and `use_focus_manager` at `tui/hooks.rs:541,602,642,828` (bumps `:555,604,644,830`) | -| async_hook | `js_async_hooks_create_hook` at `crates/perry-runtime/src/async_hooks.rs:558` (bump `:572`) | -| async_resource | `new_async_resource_with_public_value` at `crates/perry-runtime/src/async_hooks.rs:1222` (bump `:1251`) | -| symbol_global | `well_known_symbol` at `crates/perry-runtime/src/symbol.rs:313` (bump `:336`); `intl_legacy_constructed_symbol` at `:642` (bump `:659`); `js_symbol_for` at `symbol/constructors.rs:44` (bump `:111`) | -| external_buffer | `js_buffer_register_external` at `crates/perry-runtime/src/buffer/header.rs:607` (bump `:617`) | -| sab | `alloc_shared_sab` at `crates/perry-runtime/src/shared_sab.rs:60` (bump `:88`) | -| null_stub | `js_unresolved_namespace_stub` at `crates/perry-runtime/src/object/null_stub.rs:37` (bump `:40`) | - -The five receiver/property observations are guarded at -`gc_pointer_and_type_from_value` (`object/native_call_method.rs:1025`), -`dispatch_primitive` (`object/native_call_method/primitive_methods.rs:15`), -`object_static_prototype` (`object/prototype_chain.rs:305`), the object field -tail (`object/field_get_set/get_field_by_name_tail.rs:11`), and `ic_miss` -(`object/field_get_set/ic_miss.rs:541`). - -Common/fetch/zlib use their audited reserved bands. Proxy, timer, decoder, TUI, -async hook/resource, symbol, external-buffer, SAB, and null-stub classification -uses authoritative registries or exact singleton identity. Because the old -encoding has no provenance and small integer registries overlap, one payload -may increment every semantic family whose registry/range claims it. That is an -intentional measurement of the old representation's ambiguity, not a new -release classifier. - -## Typed native-result ledger - -The executable declaration census on current `origin/main` is: - -| Kind | Rows | Meaning | -| --- | ---: | --- | -| `NR_GCPTR` | 131 | non-null managed Perry allocation with `GcHeader` | -| `NR_NULLABLE_GCPTR` | 2 | managed allocation, with zero retaining the provider's current null/failure behavior | -| `NR_HANDLE_ID` | 221 | integer registry id or sentinel | -| `NR_FOREIGN_PTR` | 4 | headerless native `Box` address (AsyncHook/AsyncResource backing) | -| `NR_JS_VALUE` | 13 | raw NaN-boxed JS bits in the integer ABI slot | -| **total** | **371** | every executable declaration formerly using the erased pointer kind | - -The campaign's quoted “372 rows” came from a textual `ret: NR_PTR` census. On -this base that text consists of 370 executable `NativeModSig.ret` fields and -two Fastify prose comments. Conversely, `http_client.rs` has one real result -kind in the positional `cr(...)` helper that the textual census missed. -Therefore the executable total is 371, not 372: 370 fields plus the helper. -Both comments were corrected and the missed helper is explicitly -`NR_HANDLE_ID`. No executable `NR_PTR` remains. - -`scripts/native_result_ledger.tsv` records 322 distinct runtime symbols, their -class, provider source, and provider Rust return type. The 81 symbols/rows that -the design's earlier signature census left unresolved were checked against -their provider implementations while constructing this inventory: **81/81 -resolved, zero unknown**. The checked provider set spans runtime, stdlib, and -the in-tree `perry-ext-*` implementations (rather than Android stubs or -force-link declarations). - -`scripts/native_result_ledger.py` checks both sides: every typed executable row -must agree with one provider ledger entry, every provider source must exist and -declare the symbol, no provider entry may be stale or classless, and a legacy -`NR_PTR` declaration is an immediate failure. A dedicated path-filtered CI -workflow runs `--self-test` and the real inventory. - -## Fail-capable tests and sabotage - -- `receiver_repr_family_fixtures_move_constructed_and_observed_old` constructs - real runtime proxy, timer, text, TUI, AsyncHook, AsyncResource, global-symbol, - external-buffer, SAB, and null-stub values, then sends each through the armed - receiver classifier. Common/fetch/zlib are dependency-lower producers, so - the fixture exercises their exact reserved bands and the companion source - witness binds them to their real producer bumps. Every family asserts - `constructed > 0`, `observed_old > 0`, and `observed_wrapped == 0`. -- `receiver_repr_every_family_producer_keeps_its_constructed_bump` pins the - exact number of bump sites in every audited producer file. Sabotage actually - performed: changed the first common producer's family token to `Fetch` and - ran the already-built release test. It failed exit 101 with `left: 1, - right: 2`; restoring the token returned the test to green. Dropping the bump - has the same failing count. -- `receiver_repr_unarmed_funnels_never_enter_classification` invokes all five - real funnels with the sink forced off and asserts the test-only classifier - entry count stays zero. Sabotage: delete any funnel guard; that funnel calls - `receiver_repr_note_*`, the entry counter becomes nonzero, and the equality - fails. -- `native_result_ledger.py --self-test` plants a legacy `NR_PTR` row and sees - the checker reject it, then plants a table/provider class disagreement and - sees that rejected too. Sabotage: re-add any erased row or remove/change its - provider class; the CI command exits 1. - -## Gates - -Each Cargo command used the campaign build lock and had `df -g /` checked -immediately before launch. Available space was 23 GB (runtime release test), -17 GB (codegen test), 17 GB (wasm-host build), and 14 GB (CLI build), all above -the required 12 GB launch floor. - -- `cargo test -p perry-runtime --release --lib -j6 -- --test-threads=1`: - PASS in 8m11s build + 7.02s tests; 3,262 passed, 4 ignored, 0 failed. -- `cargo test -p perry-codegen --lib -j6`: PASS; 1,450 passed, 1 ignored, - 0 failed (latest incremental build 16.49s, tests 2.83s). -- `python3 scripts/native_result_ledger.py --self-test`: PASS; planted erased - row and provider mismatch both rejected. -- `python3 scripts/native_result_ledger.py`: PASS; 371 rows, 322 providers, - counts exactly as above. -- `python3 scripts/gc_runtime_root_holders.py`: PASS; 1,363 declarations, - 1,160 identity-ratcheted, 593 scanner-reached, 350 inventory-classified, - 415 frontier-pinned, 152 registered scanners. -- `python3 scripts/check_thread_locals.py`: PASS; 405 hot declarations, 273 - cold declarations in 83 recorded files, capacity 768. No new TLS was added. -- `cargo build --release -p perry-runtime --features wasm-host -j6`: PASS in - 2m32s. -- `cargo build --release -p perry -j6`: PASS in 11m33s. Seven pre-existing - feature-dependent dead-code warnings were emitted from GC barrier/regexp - code; none names a changed diagnostic or ledger item. -- direct `rustfmt` over every touched Rust file: PASS. -- `git diff --check`: PASS. -- `scripts/check_file_size.sh`: PASS, “no Rust source files exceed 2000 - lines.” The touched field tail is 1,997 lines. - -## Perrymaster measurement request - -Relink the best cc bundle against implementation -`9b6884e214beb93873f21dd76afe49e42f3f25df`'s runtime. Run exactly one 3,300 -reply with `PERRY_RECEIVER_REPR_DIAG=stderr`, and report the final complete -`[receiver-repr-diag]` line together with the bundle SHA/build identity. Do not -average or omit zero buckets. - -That single line is the PR 2 pricing input: `constructed` gives wrapper -creations per reply by family, `observed_old` shows which families reach the -dynamic receiver/property paths, and the zero/nonzero relationship settles -the design's open question 1 for the best cc workload. It also provides the -required baselines for `observed_wrapped`, `bare_managed`, -`invalid_pointer_zero`, and debug-only `direct_mismatch` before any -representation change. diff --git a/cc-perf-campaign/codex/REPORT_regex_census_rows.md b/cc-perf-campaign/codex/REPORT_regex_census_rows.md deleted file mode 100644 index 604cab6ec60..00000000000 --- a/cc-perf-campaign/codex/REPORT_regex_census_rows.md +++ /dev/null @@ -1,175 +0,0 @@ -# RegExp heap-census rows - -## Branch and commits - -- Branch: `diag/regex-census-rows` -- Base: `a93908a6cc684d511a0af8561b65be4f0536fbd4` (`fork/perf/regex-literal-site-test`) -- Common implementation: `49f551f05` (`feat(diagnostics): account regex tables in heap census`) -- #9958 site-table integration: `5e8079138` (`feat(diagnostics): add literal-site regex census rows`) - -Both implementation commits are diagnostic-only. No construction, matching, -cache-maintenance, or collection path calls the new walkers. The walkers run -only while an explicitly requested heap census is being assembled. - -## Emitted rows and byte derivation - -Every row is a JSON object in the census's existing `side_tables` array: -`{"table":"regex.","entries":,"bytes":,...}`. - -- `regex.pointers`: `entries` is `REGEX_POINTERS.len()`; `bytes` is the - HashSet bucket/control estimate; `live_headers` is the marked-or-pinned - RegExp-header count at sweep entry. -- `regex.program_cache`: the 512-entry `REGEX_CACHE`; `bytes` is HashMap - storage plus one de-duplicated lower-bound estimate per compiled `regex` - program. `compiled_programs`, `opaque_program_bytes`, `cleared`, and - `evictions` are included. The event counters read the already-existing - `PERRY_REGEX_DIAG` state and are zero when that diagnostic is off. -- `regex.fancy_cache`: the 512-entry `FANCY_CACHE`; HashMap storage plus one - de-duplicated `fancy_regex::Regex` lower bound. -- `regex.repeat_cache`: the 512-entry `REPEAT_MATCHER_CACHE`; HashMap storage, - the public wrapper/Arc lower bound, and visible capture-name Vec/String - buffers. The opaque `regress::Regex` heap graph is not exposed. -- `regex.validated_patterns`: the 512-entry validation map, including map - storage and owned pattern/flag String capacities. -- `regex.content_cache`: the 1,024-entry content map, collision-bucket Vec - capacities, owned pattern/flag text, `Programs` Arc allocations, and matcher - lower bounds not already charged to an engine cache. It reports - `pinned_programs` and `opaque_program_bytes`. -- `regex.literal_sites`: the 1,024-slot literal-key Vec, including its full - `Option` capacity. Its Arc text allocations are shared with the - content table and are not charged twice. -- `regex.site_table`: the #9958 site-to-rooted-header map. `sites` and - `rooted_headers` are exact. `rooted_header_bytes` is reported but explicitly - outside `side_table_bytes`, because those 56-byte headers are already in the - GC live-heap census. `pinned_programs` and `pinned_program_bytes` are gross, - unique program-bundle retention measurements, including programs shared - with content/engine caches; that gross field is explicitly outside the - additive total to prevent double counting. `exclusively_attributed_programs` - and `attributed_program_bytes` are the de-duplicated subset owned nowhere - else and are inside this row's `bytes` and `side_table_bytes`. -- `regex.active_factory_sites`: the transient #9958 authorization-stack Vec - capacity and current entries (normally empty when a synchronous census - runs). -- `regex.expando_owners`: the RegExp owner share of the mixed exotic-expando - HashMap plus each RegExp-owned property Vec and key-string capacity; - `owners` and `properties` are included. -- `regex.matcher_kinds`: counts `unbuilt`, `standard`, `fancy`, and `repeat` - headers. `bytes=0` and `bytes_inside_side_table_bytes=false`, because the tag - resides in each already-counted `RegExpHeader` rather than a side table. - -The regex engines do not expose their complete compiled heap graphs. All -program rows therefore carry -`program_bytes_estimate="opaque_inline_lower_bound"`: Arc counters, the public -wrapper value, exposed source text, and exposed auxiliary buffers are counted; -unexposed automata/program allocations are not guessed. The program-count -fields remain exact and are the decisive signal if the RX2 delta is primarily -opaque engine storage. - -## Reconciliation - -`side_table_bytes` remains an explicit census estimate, not an allocator tag. -The assembly now computes: - -`side_table_bytes = non_regex_side_table_bytes + regex_side_table_bytes`. - -Legacy regex tuples from #9958 are removed from the ordinary row stream before -summing. The rich regex rows are serialized once, while -`regex_side_table_bytes` is built by an independent second diagnostic walk of -the same registered table inventory. Consequently the sum of every emitted -`regex.*` row's `bytes` must equal `regex_side_table_bytes`; omitting a row does -not silently shrink the attributed total. - -Gross `regex.site_table.rooted_header_bytes` and `pinned_program_bytes` are -labelled outside the additive total. The row's table bytes and -`attributed_program_bytes` are inside it. This preserves reconciliation while -still exposing the causal site-pinned working set side by side. - -## Tests and sabotage - -- `census_prints_regex_rows_that_reconcile_with_side_table_total` constructs - six distinct regex sources, executes them, evaluates one direct #9958 - literal site twice, serializes and parses the direct census document, and - asserts pointer entries >= 6, site/root/header/program counts >= 1, the full - row inventory, `sum(regex row bytes) == regex_side_table_bytes`, and - `side_table_bytes - non_regex_side_table_bytes == regex_side_table_bytes`. - Its sabotage assertion removes one non-zero row contribution and proves the - independent attribution total no longer reconciles. Deleting one row from - registration therefore fails the equality assertion. -- `census_regex_rows_are_zero_cost_when_not_requested` resets a cfg(test) - census-walk counter, constructs and matches a regex, proves the counter is - still zero, invokes the census directly, and proves it advances. Adding a - per-construction bookkeeping call makes its zero assertion fail. - -## Gates - -Every reported Cargo test/build invocation used `-j4` and the campaign build -lock, and launched only after `df -g /` reported at least 12 GiB. - -- `cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1 census`: - final tree, 20 passed, 0 failed, 3,261 filtered out. -- `cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1 regex`: - final tree, 130 passed, 0 failed, 3,151 filtered out. -- `cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1`: - the pre-split implementation passed through Cargo (3,276 passed, 0 failed, - 4 ignored); the exact final Cargo-built executable was then run directly - after the source-only commit split and passed 3,277, 0 failed, 4 ignored. - A final no-op Cargo wrapper retry was prohibited because its guarded - precheck reported 10 GiB after another lane's build. -- `cargo build --release -p perry-runtime --features wasm-host -j4`: - the combined implementation before its source-only commit split passed in - 4m34s. A final-tree refresh was prohibited by the same 10 GiB precheck; the - final default-feature release test target compiled without warnings. -- Direct `rustfmt --edition 2021 --check` on every touched Rust file: passed. -- `git diff --check`: passed. -- `scripts/check_file_size.sh`: passed; no Rust source exceeds 2,000 lines. -- `python3 -m json.tool scripts/gc_runtime_root_holders.json`: passed. -- `python3 scripts/gc_runtime_root_holders.py`: passed: 1,372 declarations, - 596 scanner-reached, 357 classified, 414 frontier-pinned, 152 scanners. -- `python3 scripts/gc_runtime_root_holders.py --self-test`: passed: 90 planted - declarations and 357 inventory entries. - -One non-mutating `cargo fmt --all -- --check` attempt was mistakenly allowed -to continue after its chained precheck printed 8 GiB; it reported only the two -formatting changes then applied. The final formatting gate was rerun directly -with `rustfmt --check` on every touched Rust file and passed. No build/test was -started below the floor. - -The GC snapshot pin was re-audited because `gc/census.rs` and the module list -changed. `PASS1_MARKED` is still taken out of TLS before `take_census`; all new -regex walks occur afterward, and neither boundary nor intervening cycle flow -changed. No thread-local was added. - -One initial full-suite run under a PTY-like harness state had 3,275 passing and -one environment-dependent failure in -`tty::tests::columns_undefined_when_not_tty` (it read terminal width 80). The -exact test passed in a non-TTY process, and the subsequent non-TTY full rerun -passed 3,276 with 4 ignored. The final-tree result above supersedes that -diagnostic history. - -## Origin/main application check - -The implementation was split at the stack boundary. In a disposable checkout -of `origin/main` at `8b7dc3342b22fe6270739c8d51585c3d2cdfa618`, -`git cherry-pick --no-commit 49f551f05` completed with no conflicts. The -excluded `5e8079138` commit contains the #9958 rooted-site row plus the -#9918/#9958 content/literal cache-layout accessors and the branch-specific GC -snapshot pins. Thus the common regex-table census applies cleanly to main; -the site-table integration is intentionally the one omitted stack row. - -## PerryMaster request - -On `app-main7rx` and `app-main7` (the still-running RX2 arm and control), run -one 120-second idle interval followed by one SIGUSR2 heap census on each. Send -the complete `regex.*` rows and the three side-table totals side by side: -`side_table_bytes`, `regex_side_table_bytes`, and -`non_regex_side_table_bytes`. - -In particular compare `regex.site_table.sites`, `rooted_headers`, -`pinned_programs`, `pinned_program_bytes`, and `attributed_program_bytes`, plus -the 512-entry engine-cache program counts. The expected explanation for RX2's -88.3 MB versus 82.4 MB (+6 MB) is roughly 550 site-pinned programs beyond the -512-entry engine cache. If that population is present, the gross site-pinned -lower bound/count identifies it even when shared ownership assigns additive -bytes to another regex row. If it is not present, the side-by-side reconciled -rows identify which other regex table grew; if no regex row explains the -delta, that is the finding and the residual belongs outside regex attribution. diff --git a/cc-perf-campaign/codex/REPORT_regex_literal_site_test.md b/cc-perf-campaign/codex/REPORT_regex_literal_site_test.md deleted file mode 100644 index a600ec854a6..00000000000 --- a/cc-perf-campaign/codex/REPORT_regex_literal_site_test.md +++ /dev/null @@ -1,116 +0,0 @@ -# Regex literal-site `.test` report - -## Branch and SHA - -- Branch: `perf/regex-literal-site-test` -- Base: `107d40adb9881ff5f91f94124e24907fcfea5796` -- Implementation commit: `2f799c7b0318b683bd0f320705ea6855f73fed85` -- Target remote: `fork/perf/regex-literal-site-test` - -## Map and mechanism - -- Ordinary regex literals still derive an identity from the address of a compiler-emitted private `i64` global, never from a hand-written constant (`crates/perry-codegen/src/expr/logical_collections.rs:61-79`). Ordinary lowering loads the interned pattern/flags handles and calls `js_regexp_new_site(pattern, flags, site)` (`logical_collections.rs:1382-1413`; runtime entry at `crates/perry-runtime/src/regex.rs:988-994`). -- A direct HIR `RegExpTest` whose receiver is exactly `Expr::RegExp` is the non-escaping shape: the literal node is consumed solely as this call's receiver, and only the boolean result is published. It lowers through `js_regexp_site_test_new`, captures `.test` before evaluating the argument, roots receiver and method across argument evaluation, then dispatches (`crates/perry-codegen/src/expr/instance_misc1.rs:1192-1226`). An escaping receiver such as `const r = /x/g; r.test(a); r.test(b)` remains on `js_regexp_new_site` plus the ordinary `js_regexp_test` route. -- `js_regexp_site_test_new` allocates and records one header on the cold evaluation, then reuses it on canonical hits (`crates/perry-runtime/src/regex/site_test.rs:157-200`). The site table owns a strong mutable raw root; its registered visitor marks and rewrites the header during evacuation (`site_test.rs:493-500`; registration at `crates/perry-runtime/src/gc/mod.rs:1003-1005`). The header therefore survives minors and cannot enter regex-death finalization while the site lives. -- Validation is performed on every evaluation. The realm's `RegExp.prototype`, canonical `test` closure, and own-slot index are recorded at intrinsic installation; the two heap values are representation-correct GC roots. The probe rejects a replaced/deleted/accessor `test` slot and any explicit receiver prototype (`crates/perry-runtime/src/object/regex_proto_thunks.rs:319-408`). A decline resolves the actual property and calls it generically (`site_test.rs:397-490`). Property Get remains before argument evaluation, so an argument that patches the prototype still invokes the method captured before that patch. -- Ordinary `js_regexp_test` implements stateful global/sticky `lastIndex` behavior (`crates/perry-runtime/src/regex.rs:1701 onward`). A fresh literal starts with zero on every evaluation, so the allocation-free dispatch resets the private cached header to zero immediately before its test (`site_test.rs:460-484`). The resulting write is unobservable: this exact receiver has no escaping reference, no `this` capture, and only the already-validated builtin sees it. -- The segment-view tier validates the same canonical prototype and calls `regexp_test_str_bounded` on a borrowed segment (`crates/perry-runtime/src/intl/segments_view.rs:350-394`; bounded matcher at `crates/perry-runtime/src/regex.rs:1661-1699`). It deliberately refuses global/sticky regexes and operates only after its receiver exists. Consequently it removed segment materialization but could not remove `g54.default()`'s per-grapheme RegExp construction; generic function-result dispatch is documented at `crates/perry-runtime/src/object/native_call_method/primitive_methods.rs:541-545`. -- For the real bundle shape, codegen recognizes `().test(arg)` and preserves the actual call and member lookup (`crates/perry-codegen/src/expr/calls.rs:77-101,879-950`). Functions/closures are eligible to claim an active caller site only when HIR proves zero parameters, non-async, non-generator, and exactly one `return ` statement (`crates/perry-codegen/src/codegen/function.rs:523-531`; `closure.rs:561-571`). The runtime resolves the actual callee's native entry on every call and pairs it with the site; only the exact factory identity may claim/reuse the header (`site_test.rs:202-252,321-395`). Reassignment, a rebound namespace member, a non-literal body, or a nested helper declines to the generic result path. Active identity frames have exception savepoints so caught throws cannot leave stale authorization. -- `[regex-diag]` now prints `site_test_no_alloc=` and `site_test_declined=(patched_prototype=...,callee_mismatch=...,non_literal=...)` in the whole line (`crates/perry-runtime/src/hot_diag.rs:196-203,374-424`). The no-allocation counter is incremented inside the construction entries that avoid the priced allocation. `new=` falls by the served count because a hit never enters `js_regexp_new_impl`. -- `PERRY_GC_CENSUS` now contains `regex.content_cache`, `regex.literal_sites`, and `regex.site_test_headers` (`crates/perry-runtime/src/gc/census.rs:565-604`; aggregation at `crates/perry-runtime/src/regex/site_test.rs:503-520`). - -## Named correctness and sabotage coverage - -- Codegen: `direct_literal_test_uses_the_site_header_and_post_get_dispatch`, `escaping_literal_is_not_transformed_and_keeps_one_stateful_receiver`, `direct_factory_call_records_function_identity_and_uses_the_caller_site`, and `namespace_member_factory_call_uses_the_member_wrapper` (`crates/perry-codegen/src/expr/regex_site_test_tests.rs:73-207`). -- Runtime: `direct_global_site_allocates_one_header_and_resets_last_index` compares a table with fresh generic `/x/g`; `direct_sticky_site_starts_each_evaluation_at_zero` checks `/x/y` anchoring and reset; `escaping_generic_global_header_carries_last_index_between_tests` proves the untransformed stateful case (`crates/perry-runtime/src/regex/site_test.rs:586-640`). -- Cross-function sabotage: `direct_factory_site_reuses_only_the_recorded_callee`, `nested_exact_factory_cannot_claim_a_different_callees_site`, and `namespace_member_factory_site_is_covered` cover direct `f()`, nested/non-literal decline, and namespace-member rebinding on the next call (`site_test.rs:699-813`). -- Prototype/rooting sabotage: `patched_regexp_prototype_test_declines_on_the_next_call`, `caught_throw_restores_an_orphaned_factory_site_frame`, and `site_header_root_is_rewritten_by_a_copying_minor` cover the next-call patch guard, exception cleanup, and copied-minor root rewriting (`site_test.rs:753-880`). The decline tests assert the individual reason buckets, not only the total. - -## Gates - -Completed after the final edits: - -- Direct `rustfmt` over touched Rust files. -- `git diff --check`. -- `scripts/check_file_size.sh`: passed; `regex.rs` is below the 2,000-line ceiling. -- `python3 -m json.tool scripts/gc_runtime_root_holders.json`: passed. -- `python3 scripts/gc_runtime_root_holders.py --self-test`: passed, 90 planted declarations and 347 inventory entries. -- `python3 scripts/gc_runtime_root_holders.py`: passed, 1,371 holders scanned, 594 reached by registered scanners, 358 classified, 414 frontier-pinned, 152 scanners. -- `python3 scripts/gc_rekeyed_key_tables.py`: passed, 42 rekey sites, 25 registered prunes, 0 gaps. - -Cargo history and disk stop: - -- `cargo test -j4 -p perry-codegen` through `measure_lock.sh --build` passed before the last guard-only codegen edit: 1,452 unit tests passed, 1 ignored, followed by all integration and doc tests passing. The final tree was not rerun. -- `cargo test -j4 -p perry-runtime --release --lib -- --test-threads=1` initially passed (3,265 passed, 4 ignored) before the exception/counter additions. The final-tree attempt compiled successfully and ran 3,266 passing tests plus one new synthetic nested-wrapper test failure; that fixture's trivial Rust wrapper had been release-folded with its callee. The fixture was made observably distinct with an atomic side effect and `inline(never)`, but was not rerun. -- Immediately after that invocation, `df -g /` reported 9 GB available. The binding rule prohibits every further Cargo invocation below 12 GB, so no wait or additional build was attempted. -- Not run on the final tree: the runtime lib gate rerun, the codegen gate rerun, `cargo build --release -p perry-runtime --features wasm-host`, and `cargo build --release -p perry`. -- A fresh archive and `nm` check were not produced because the archive build was prohibited. No local cc CPU/RSS measurement was run. - -## Predictions - -For the supplied I6d 3,300-character reply: - -- `new=`: 1,074,006 -> at most 10,000. -- `site_test_no_alloc=`: approximately 1,068,858 (one cold header means the exact value may be one lower for that site). -- `header_bytes`: 60,144,336 bytes -> approximately 0.3 MB. -- `ptr_ins` / `ptr_rm`: approximately zero at reply scale, apart from cold and unrelated regex objects. -- `test=`: unchanged at approximately 2,139,156. -- Turn CPU at 3,300 characters: -4% to -6%, from removing `js_regexp_new`, regex-death/finalization, and pointer-side-table work. Peak RSS should be lower; +1% to +10% remains acceptable under the campaign goal. - -## Exact perrymaster request - -This commit touches CODEGEN. Build the compiler from `2f799c7b0318b683bd0f320705ea6855f73fed85` on the I6d tree, or on the I7-view tree if all prerequisite picks apply, and perform a full cc bundle recompile; do not reuse the base bundle. From the resulting artefact, use `nm` to prove the new site-test runtime entry symbols are present and report the number of emitted call sites for `js_regexp_site_test_new`, `js_regexp_site_factory_call_value`, and `js_regexp_site_factory_call_method` (including the `g54.default().test(O)` site). - -Run one identical 3,300-character reply and provide the entire `[regex-diag]` line plus the per-pattern table. Confirm the 12,807-byte emoji `/.../g` row is constructed once, built once, and tested approximately 1,068,858 times; report `new`, `site_test_no_alloc`, the three decline buckets, `header_bytes`, `ptr_ins`, `ptr_rm`, `test`, `test_global`, and compile/cache counters. Expected: `new <= 10,000`, `site_test_no_alloc ~= 1,068,858`, `header_bytes ~= 0.3 MB`, `ptr_ins/ptr_rm ~= 0`, and unchanged `test`. - -Then run paired 5x3,300-character and 3x400-character comparisons against the base bundle with identical warmup, environment, inputs, and node-parity stop conditions. Report every turn's CPU and peak RSS. Expected 3,300-character turn CPU improvement is 4% to 6% and peak RSS is lower. Finally capture a perf draw and verify `js_regexp_new`, `regex_header_clear_dead_for_gc`, and the dead-owner regex path have disappeared from the top 25. - -## CI fixes 2026-09-07 - -### Fixed heads - -- #9918 `perf/regex-drop-source-table`: `dd1c5242d2ce87139d33436f347adb7245fe754d` (old head `ce9e12801e8d83fae471e06cc85429257ac10854`). -- #9958 fixed code head, before this final report-only commit: `54c9373c882fe7a2bb63cde806f563ce5799605d` (old head `abb0d907ff8dade12dfcf6b092cbd8f71bfc4233`). The final remote branch head is this report commit, whose hash is necessarily determined after the report contents are committed. - -### Triage items - -1. Formatting: direct `rustfmt` put the test modules in formatter order at `crates/perry-runtime/src/regex.rs:1760-1767`, moving `mod tests_part2;` after `tests_cache` and `tests_header`. Direct `rustfmt --check` passes. `cargo fmt --all --check` was not run: disk (8 GB available, below the binding 12 GB floor). -2. #9918 raw-handle debt: the two new bare reads in the nursery relocation fixture are now scoped `RuntimeHandle::with_const_ptr` stores at `crates/perry-runtime/src/regex.rs:390-395`; the two pre-existing production reads and the ceiling remain unchanged. `python3 scripts/raw_handle_debt.py` passes at 955 sites (baseline 963), and `--self-test` passes. -3. #9918 product warnings: the `Arc` import is feature-gated at `crates/perry-runtime/src/regex.rs:14-15`; `MatcherKind` carries a feature-off `dead_code` allow with the layout-only reason at `regex.rs:500-514`. The workflow's exact product command (`RUSTFLAGS='-D warnings' cargo check -p perry --bins`) was not run: disk. -4. #9918 all-target warnings: the unused `regex_has_repeat_program` import is gone at `crates/perry-runtime/src/regex/tests_part2.rs:5-7`, and the unnecessary `unsafe` block around the safe lazy-build/assertion calls is gone at `tests_part2.rs:600-607`. The workflow's host-compatible `cargo check --workspace --all-targets ...` command was not run: disk. -5. Main's benchmark-freshness, build-cache, and GC-ratchet reds were not touched. -6. #9958 root-holder custody/windows self-test: removed the three duplicate `REGEXP_PROTOTYPE_*_SLOT` entries that the stack re-added; the authoritative #9893 entries remain once each at `scripts/gc_runtime_root_holders.json:647-664`. `python3 scripts/gc_runtime_root_holders.py` passes (1,372 declarations, 596 scanner-reached, 357 inventory-classified, 414 frontier-pinned, 152 scanners), and `--self-test` passes (90 planted declarations, 357 inventory entries). -7. #9958 raw-handle debt: `canonical_rooted_header` now pairs the canonicality call with its post-call reload through `RuntimeHandle::across_mut` at `crates/perry-runtime/src/regex/site_test.rs:164-170`. No per-module ceiling was added; the same debt command and self-test in item 2 pass. -8. `async_hooks_constructors_expose_real_prototype_methods` is in `crates/perry/tests/issue_6764_async_hooks_prototype_metadata.rs`. Not run: disk (8 GB available). The hypothesis that duplicate inventory registration caused the runtime failure remains unverified locally; no codegen bisection or blind patch was performed. -9. Main's unrelated shard and GC reds were not touched. - -Other requested cargo gates were not run: disk: `cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1 regex`, the full runtime lib gate, and the single compiled async-hooks test. `git diff --check`, JSON parsing, both Python audits, and both audit self-tests pass. - -### Range-diffs - -#9918, `git range-diff 616a2cb84..ce9e12801 616a2cb84..dd1c5242d`: - -```text -1: d8daa4fd4 = 1: d8daa4fd4 perf(regex): remove the traced-source side table -2: e2b0a9054 = 2: e2b0a9054 perf(regex): share one program-set handle per header -3: 7a44e5948 = 3: 7a44e5948 perf(regex): tag the selected matcher on each header -4: 6ea7ad9eb = 4: 6ea7ad9eb test(regex): isolate WTF-8 source from matcher parsing -5: c217a231c = 5: c217a231c refactor(regex): split header properties and tests -6: 883d334a6 = 6: 883d334a6 fix(regex): retain canonical flags through allocation -7: ce9e12801 = 7: ce9e12801 perf(regex): preserve live literal programs on eviction --: --------- > 8: dd1c5242d fix(regex): clear branch-owned CI failures -``` - -All seven measured commits are byte-identical; only the new CI-fix commit is added. - -#9958, `git range-diff ce9e12801..abb0d907f dd1c5242d..54c9373c8`: - -```text -1: f5a2bdb7c = 1: 90e21317a perf(regex): reuse literal headers at test-only sites -2: abb0d907f ! 2: 47370d886 docs(perf): record regex literal-site handoff - The report commit no longer carries the inherited tests_part2 warning cleanup; - that exact hunk is now in #9918's dd1c5242d fix beneath the stack. --: --------- > 3: 54c9373c8 fix(regex): deduplicate CI custody records -``` - -The measured #9958 implementation commit is patch-identical. The only movement in the report commit is the listed inherited warning cleanup moving to the fixed base; the only new code hunk is the item 6/7 CI-fix commit. diff --git a/cc-perf-campaign/codex/REPORT_symbolizer_nm_gate.md b/cc-perf-campaign/codex/REPORT_symbolizer_nm_gate.md deleted file mode 100644 index ca74924c5c8..00000000000 --- a/cc-perf-campaign/codex/REPORT_symbolizer_nm_gate.md +++ /dev/null @@ -1,21 +0,0 @@ -# Frame symbolizer `nm` gate report - -Implementation SHA: `de719a1f01223e1674ce48097e90ceb0625e5ac4` - -The default static-symbol miss now reads one cached `PERRY_STACK_SYMBOLS` -boolean, compares the frame's `dladdr` base with one cached executable-image -base, and formats one `rt+0x...` string. It does not call `current_exe`, build -the static index, or spawn `nm`. Frames outside the executable image retain the -raw `0x...` form. With the flag enabled, the existing `nm -nC` index and -demangled `rt:{name}+0x{off}` output remain in place. - -Verification: - -- `rustfmt --check --edition 2021 crates/perry-runtime/src/error_stack_frames.rs`: pass. -- `git diff --check`: pass. -- `cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1 error_stack symbol`: not run: disk (7 GB free; required minimum is 12 GB). -- `cargo build --release -p perry-runtime --features wasm-host -j4`: not run: disk (7 GB free; required minimum is 12 GB). -- Default-path and opt-in `nm` tests: written as isolated child-process witnesses, but not run: disk. The default witness asserts `rt+0x...` and a test-only spawn counter of zero; removing the gate makes that counter non-zero. Sabotage execution: not run: disk. -- Runtime env-knob inventory: skipped because `scripts/check_gc_env_knobs.py` and `gc/tests/env_knob_parse.rs` inventory only GC-family knobs (plus an explicit GC/runtime allowlist), not general runtime flags. - -Gate: PERRY_STACK_SYMBOLS diff --git a/cc-perf-campaign/codex/REPORT_verify_evacuation_borrow.md b/cc-perf-campaign/codex/REPORT_verify_evacuation_borrow.md deleted file mode 100644 index 0fb5e6201b3..00000000000 --- a/cc-perf-campaign/codex/REPORT_verify_evacuation_borrow.md +++ /dev/null @@ -1,228 +0,0 @@ -# `PERRY_GC_VERIFY_EVACUATION` malloc-borrow fix - -## Commit - -- Fix commit: `499b71628d53b76d87ba68c6f4a59ed597e6d82e` (`fix(gc): release malloc borrow before verification`) -- Base: `8b7dc3342b22fe6270739c8d51585c3d2cdfa618` (`origin/main` when the task started) - -## Re-entrancy path - -The observed copied-minor path is diagnostic-only: - -1. `crates/perry-runtime/src/gc/copying.rs:1516-1519` gates - `verify_old_to_young_edges_covered()` on - `gc_verify_evacuation_enabled()`. -2. Before this fix, `verify_old_to_young_edges_collect()` held a shared - `MALLOC_STATE` borrow while iterating `s.objects` at - `crates/perry-runtime/src/gc/verify.rs:798-805` (base commit lines). -3. Each candidate reached - `verify_old_young_parent_slots_covered()` → `visit_gc_rewrite_slots()` → - `verify_old_young_slot_covered()` at current - `crates/perry-runtime/src/gc/verify.rs:731-753` and `:690-700`. -4. A non-arena child reaches the exact membership check in - `remembered_child_needs_tracking()` at - `crates/perry-runtime/src/gc/barrier/mod.rs:1568-1585`. -5. That calls `gc_malloc_header_is_tracked()`, whose inner mutable borrow is - `crates/perry-runtime/src/gc/malloc.rs:526-529` (`borrow_mut()` is line 527) - and whose `ensure_set_built()` may rebuild from `objects` at `:508-515`. - -Because `MALLOC_STATE` is thread-local, the shared outer borrow and mutable -inner borrow are on the same collection thread. `RefCell` therefore panics -before the verifier can inspect the heap. The path is entered only when -`PERRY_GC_VERIFY_EVACUATION` is enabled; the later stale-forwarded-reference -walk is independently gated at `copying.rs:1596-1600`. - -I audited the production exact-membership callers (`barrier/mod.rs`, -`young_log.rs`, `native_handle.rs`, `timer.rs`, `path.rs`, `symbol/get.rs`, -`value/dyn_index.rs`, and `json/stringify.rs`). None invokes the helper while -holding a `MALLOC_STATE` borrow. The exact nested path above is verifier-only; -there is no non-diagnostic production re-entrancy to prioritize. A second -diagnostic (`PERRY_GC_VERIFY_CLASSIFIER`) can cause live classification from -some GC walks, but that is also diagnostic, not a production path. - -## Change - -`crates/perry-runtime/src/gc/verify.rs:10-12` now snapshots the malloc header -vector and releases the `MALLOC_STATE` borrow before any verifier callback. -Every verifier-owned malloc-object walk uses that helper, including the -old-to-young check, marked-child checks, array-slot enumeration, and the final -evacuation heap walk. Exact validation semantics remain unchanged: there is no -`try_borrow` fallback and no weakened pointer check. - -The named regression test is -`gc::tests::copying::verify_malloc_borrow::test_copied_minor_verify_evacuation_releases_malloc_registry_before_validation`. -It runs on a spawned worker thread, creates a malloc-backed closure parent and -malloc-backed child, makes the non-empty registry inactive, proves the exact -lookup rebuild count advances, then completes a copying minor with evacuation -verification enabled and asserts that an actual nursery object copied and both -verification phases ran. Sabotage is explicit: restore the malloc verifier loop -under `MALLOC_STATE.with(...borrow())`; the child lookup's `borrow_mut()` panics -the worker and makes `join().expect(...)` fail. - -## Validation - -Not run because the mandatory pre-Cargo check, `df -g /`, reported only **11 -GB available**, below the 12 GB floor. Per task instructions I did not invoke -Cargo and did not wait for disk capacity. Consequently these gates were not -run: - -- the named regression test; -- every test matching `verify_evacuation`; -- every test matching `malloc`; -- `cargo test -p perry-runtime --release --lib -- --test-threads=1`; -- `cargo build --release -p perry-runtime --features wasm-host`. - -Non-Cargo static checks completed: `rustfmt --check` on all edited Rust files -and `git diff --check`. The largest touched Rust file is 1,994 lines, below the -2,000-line repository cap. - -## Perrymaster request - -Relink on main's cache, then run `cc` with -`PERRY_GC_VERIFY_EVACUATION=1` for **4 turns**. The run must complete all four -turns, emit `[gc-verify]`-style verifier output proving the diagnostic was live, -and contain no `RefCell already borrowed` or other panic. - -## VF2: the parent names itself - -### Commit - -- Implementation commit: `1ec9e0e8ac72cbce4098d86940b205f90effafd8` - (`fix(gc): attribute stale evacuation pointers`) -- Extended branch base: `4295d390d` (the first verifier report commit) - -### Failure line and field derivation - -Every stale-forwarding panic remains one physical line and now carries the -same field vocabulary for heap slots, roots, and runtime side-table scanners: - -- `parent` is the user address (`header + GC_HEADER_SIZE`). `parent_type` is - `gc_type_info(header.obj_type).name`. Root-owned slots use `n/a(root)` because - their scanner has no GC parent header. -- `parent_space` first reads `GC_FLAG_PINNED` (`pinned`), then - `GC_FLAG_ARENA` (clear means `malloc`). Arena parents use the current arena - block class: `PromotedYoung` means `promoted_in_place_this_cycle`; Eden and - the active survivor half mean `nursery_from`; the inactive survivor half - means `nursery_to`; Old and Longlived mean `old_page`. The transient - `PromotedYoung` block class is the collector's this-cycle promotion set, so - no historical/guessed tenuring classification is used. -- `slot_index` is the cumulative zero-based pointer-slot index within the - parent. It is derived only after failure by replaying the layout descriptors. - `visitor` is the matching `GcLayoutSlotKind` or, for side fields absent from - the layout walk, the matching `GcRewriteDescriptorKind` (for example - `GcMutableSlotDescriptor`, `ArrayElements`, `ObjectFields`, `RegExpFields`, - `ClosureCaptures`, `ObjectMeta`, or the corresponding side-field family). -- `child_type` reads `obj_type` from the still-valid forwarding source header; - if that source is not in the exact pointer census, it falls back to the - forwarded-to header. `child_space` classifies `forwarded_to` with the same - `GC_FLAG_PINNED` / `GC_FLAG_ARENA` checks and arena block classes. Thus - `nursery_to` is a survivor copy and `old_page` is a promoted copy. -- `remembered` re-snapshots the live remembered set on the cold failure path - and applies `old_young_slot_covered`, including an external `(page, owner)` - entry when the slot is outside its parent. `dirty_snapshot` tests the exact - pre-collection `RememberedDirtySnapshot` consumed by this copied minor. - Nursery parents report both as `n/a(nursery_parent)`. `young_logged` is - `n/a(heap_parent_uses_remembered_set)` for heap parents: young-entry logs own - side-table keys, not heap parents. Root/side-table failures report - `n/a(root_scanner_does_not_expose_owner_key)` because the scanner API exposes - the scanner class and value but not the table's log key; this is an explicit - non-answer rather than a guessed `no`. -- `minor` is a per-collection-thread evacuation-verifier ordinal. `trigger` is - the cycle's `GcTriggerKind`. `after_budgeted_step` compares a new per-thread - budgeted-cycle completion counter with the value observed by the preceding - verified minor, so an unrelated agent heap cannot set it. - -The original `slot`, `old`, and `forwarded_to` values remain present. The -failure line also has `surface`, a whitespace-free scanner/surface token, so a -root-side miss can be grouped without parsing prose. - -### Panic sites covered - -All callers of `panic_stale_forwarded_reference` pass the cycle context and -use the common formatter: - -- heap object rewrite descriptors (`heap fields`), remembered dirty ranges, - and remembered fallback headers; -- shadow-stack, native stack-map, and global mutable roots; -- each named Rust mutable-root scanner and the FFI mutable-root scanner; -- Rust and FFI copy-only root scanners; -- the `RuntimeRootVisitor` NaN-box, heap-word, tagged-raw-address, and - metadata-raw-address paths used by runtime side tables. - -Heap dirty-range verification now retains the owner header while visiting a -dirty slot, so a failure in that earlier verifier surface names the parent too, -instead of waiting for the later whole-heap walk. - -### Passing-path cost and liveness line - -The expensive work is behind the cold stale-reference branch: type lookup, -space classification, remembered-set re-snapshot, coverage probes, string -construction, and descriptor replay occur only immediately before panic. The -passing per-slot closure is unchanged: it records the layout read and invokes -`verify_slot`, with no new type, arena, set, or snapshot read. Counts are -accumulated once per accepted parent and once per descriptor from the -descriptor's existing slot count; there is no added per-slot diagnostic probe. - -When a copied minor passes and `PERRY_GC_DIAG=1`, it emits exactly one: - -```text -[gc-verify] minor= evacuation_ok parents= slots= old_young_edges= -``` - -`parents` and `slots` come from the live whole-heap verification walk; -`old_young_edges` is the already-computed count from -`verify_old_to_young_edges_covered`, so the line proves both verifier phases -ran without adding a second edge walk. - -### Tests and gates - -The disk-compliant focused gate ran with 13 GB available: - -```text -cargo test -p perry-runtime --release --lib -j4 -- --test-threads=1 verify -``` - -All 16 matching tests passed: the 14 existing verify/malloc-borrow tests plus -the two named VF2 tests. That run preceded the final failure-only dirty-owner -retention and cumulative slot-index cleanup; rerunning the resulting commit is -**not run: disk**. - -- `stale_forwarded_reference_panic_names_parent_slot_and_coverage` publishes - an old-page parent's nursery field without the write barrier, catches the - copied-minor verifier panic on a worker thread, and asserts - `parent_type=`, `parent_space=old_page`, `slot_index=0`, `remembered=no`, - `child_type=`, `minor=`, and `trigger=`. -- `evacuation_verifier_pass_line_counts_parents_and_slots` uses an isolated - child-test process with diagnostics enabled, captures stderr, requires - exactly one copied-minor success line, and parses `parents` as a positive - integer. - -Sabotage reruns: **not run: disk**. Removing one asserted panic field was -restored without retaining the mutation; the mandatory pre-Cargo check then -reported 11 GB, below the 12 GB floor. Skipping the pass line was likewise not -run for the same disk reason. The assertions are direct (missing the field or -line reaches `assert!` / `assert_eq!`), but no mutation-test pass is claimed. - -The full release `--lib` suite and the release `wasm-host` build are **not run: -disk**: subsequent checks reported 10--11 GB available. The attempted field -sabotage command was interrupted immediately after its pre-check exposed the -sub-floor value; no further Cargo gate completed. Static gates passed: -`rustfmt --check` and -`git diff --check`. Touched Rust files are below 2,000 lines; the largest is -`copying.rs` at 1,928 lines (`roots.rs` 1,886; `cycle.rs` 1,797; `verify.rs` -1,558; `verify_diag.rs` 293). - -### Perrymaster request - -Relink `app-vf` (main + this branch) and `app-vfat` (the AT2 tree + this branch) -on their existing caches. Run **N = 6** four-turn 3300 sessions for each app -with: - -```text -PERRY_GC_VERIFY_EVACUATION=1 PERRY_GC_DIAG=1 RUST_BACKTRACE=1 -``` - -Report every verifier failure line verbatim together with that minor's -preceding `[gc-step]`, `[gc-trigger]`, and `[gc-survival]` lines. For one clean -run of each app, report the `[gc-verify]` pass-line counts so verifier liveness -is independently visible. diff --git a/changelog.d/11186-lean-dependencies.md b/changelog.d/11186-lean-dependencies.md index fafdf352a2e..5c2a7978728 100644 --- a/changelog.d/11186-lean-dependencies.md +++ b/changelog.d/11186-lean-dependencies.md @@ -11,5 +11,5 @@ no longer depends on the optional async bridge. Add compatibility tests and CI dependency-boundary checks. Against the PR base, the macOS compiler graph drops from 339 to 287 packages (dev CLI: 331 to 255). -See `docs/audits/lean-dependencies.md` for graph methodology and remaining shared +See `docs/audits/lean-dependencies.md` (removed in #13193; `git show 44fcf437dd:docs/audits/lean-dependencies.md`) for graph methodology and remaining shared transitive dependencies. No version bump, as requested. diff --git a/changelog.d/13002-component-guest-cleanup.md b/changelog.d/13002-component-guest-cleanup.md index ebe49696261..07ce63ad683 100644 --- a/changelog.d/13002-component-guest-cleanup.md +++ b/changelog.d/13002-component-guest-cleanup.md @@ -16,4 +16,4 @@ disposal, return-value rooting and exactly-once destruction. On Linux, all `23b5c3aadc18237488d6c978ece554483d774c78`. A negative control reproduces the old checkpoint dispatching an immediate; the fixed checkpoint leaves it pending and preserves a returned value across an actual moving collection. Evidence: -`docs/validation/component-guest-cleanup-20261021.json`. +`docs/audits/wasi-component-validation-2026-10-21/component-guest-cleanup-20261021.json`. diff --git a/changelog.d/13003-wasi-network-providers.md b/changelog.d/13003-wasi-network-providers.md index 26277e2cacb..bd6f5351732 100644 --- a/changelog.d/13003-wasi-network-providers.md +++ b/changelog.d/13003-wasi-network-providers.md @@ -8,4 +8,4 @@ Perry guest UDP/DNS interoperability, blocking-I/O cancellation or additional host-platform support. All 22 component-host unit tests passed on Linux x86_64 at `bd0d064baa9217a33f5215c819ae890845e7944b`, including these three new tests. The source revision and evidence hashes are recorded in -`docs/validation/wasi-network-providers-20261021.json`. +`docs/audits/wasi-component-validation-2026-10-21/wasi-network-providers-20261021.json`. diff --git a/changelog.d/13005-wasi-network-interop.md b/changelog.d/13005-wasi-network-interop.md index 33bcae2eaa4..335435b67fc 100644 --- a/changelog.d/13005-wasi-network-interop.md +++ b/changelog.d/13005-wasi-network-interop.md @@ -16,5 +16,5 @@ This qualifies the component ABI and host providers, not `node:dgram` inside Perry-authored WASI guests, cancellation, HTTP or P3. Linux qualification passed 23 host tests, 20 runtime component tests and all 21 native acceptance phases, including TCP/UDP/DNS in normal and moving-GC runs. The receipt in -`docs/validation/wasi-network-interop-20261021.json` records the exact tested source, +`docs/audits/wasi-component-validation-2026-10-21/wasi-network-interop-20261021.json` records the exact tested source, artifact hashes and copying/verification/quarantine witnesses. diff --git a/changelog.d/13193-repository-cleanup.md b/changelog.d/13193-repository-cleanup.md new file mode 100644 index 00000000000..bfd2c03c612 --- /dev/null +++ b/changelog.d/13193-repository-cleanup.md @@ -0,0 +1,6 @@ +### Changed + +- Replace the long `CLAUDE.md` with a lean `AGENTS.md` that holds only per-PR obligations, build and verification traps, silent failures and gate policy. `CLAUDE.md` now imports it, and the doc-claim and Node-version lints read `AGENTS.md`. +- Keep the version only in `Cargo.toml`. The release preflight and the npm publish gate no longer compare it with a `CLAUDE.md` line, so PRs no longer edit `CLAUDE.md`. +- Remove stale root files (committed logs, task prompts, agent session notes) and obsolete issue records from `docs/`. Group the remaining point-in-time evidence under `docs/audits/` with an index. +- Regenerate the documentation translation catalogs with the pinned toolchain. diff --git a/changelog.d/7989-zod-corpus-triage.md b/changelog.d/7989-zod-corpus-triage.md index bf97faa48d5..cf6f2451707 100644 --- a/changelog.d/7989-zod-corpus-triage.md +++ b/changelog.d/7989-zod-corpus-triage.md @@ -1 +1 @@ -Triage of #7803 on a corpus that links again: the reproducer is stale, the subject is not. `gc-handoff/ZOD-NOTES.md` records the runs; no code change. +Triage of #7803 on a corpus that links again: the reproducer is stale, the subject is not. `gc-handoff/ZOD-NOTES.md` (removed in #13193; `git show 44fcf437dd:gc-handoff/ZOD-NOTES.md`) records the runs; no code change. diff --git a/changelog.d/8010-class-shape-uniformity-gate.md b/changelog.d/8010-class-shape-uniformity-gate.md index 67a03d6bbdf..46db41f6dba 100644 --- a/changelog.d/8010-class-shape-uniformity-gate.md +++ b/changelog.d/8010-class-shape-uniformity-gate.md @@ -35,4 +35,4 @@ stamp" is a presence check that both-stamped and both-unstamped each satisfy — only the mixture is the bug, and only a test comparing the two sides can see it. This one passes in either uniform state, so it survives a future policy flip. -Working notes, including the full bisect and the two dead ends: `gc-handoff/BISECT-NOTES.md`. +Working notes, including the full bisect and the two dead ends: `gc-handoff/BISECT-NOTES.md` (removed in #13193; `git show 44fcf437dd:gc-handoff/BISECT-NOTES.md`). diff --git a/changelog.d/8084-gc-7803-diagnostics-and-rooting.md b/changelog.d/8084-gc-7803-diagnostics-and-rooting.md index 7a791ea81b4..0b303afa911 100644 --- a/changelog.d/8084-gc-7803-diagnostics-and-rooting.md +++ b/changelog.d/8084-gc-7803-diagnostics-and-rooting.md @@ -6,7 +6,7 @@ localized but **not fixed**. It fails at `zod/src/v4/core/parse.ts:65` `undefined`), all three observed messages are one loss seen at different points, and the failure needs the `new Function` path: `jitless` gives 0/16 against 8/16 with it. Five hypotheses were tested and refuted or left unsupported; the -audit trail, including the null results, is in `gc-handoff/ZOD-NOTES.md`. +audit trail, including the null results, is in `gc-handoff/ZOD-NOTES.md` (removed in #13193; `git show 44fcf437dd:gc-handoff/ZOD-NOTES.md`). **Two rooting defects found and fixed on the way:** @@ -115,7 +115,7 @@ moves, preserving the slot's stored form. Measured on the pinned zod schedule: seeds 1, 2 and 5 flip from ~2/3 aborting to 0 failures (with `copying_minors>0` asserted per run); seed 3 retains one residual window, characterized to the exact slot, record and creation cycle in -`gc-handoff/ZOD-NOTES.md` §40. +`gc-handoff/ZOD-NOTES.md` (removed in #13193; `git show 44fcf437dd:gc-handoff/ZOD-NOTES.md`) §40. Also landed: the remembered-set rebuild for promoted objects now runs AFTER the worklist drain (it previously covered only root-phase promotions — diff --git a/changelog.d/8122-object-header-shrink-56-to-48.md b/changelog.d/8122-object-header-shrink-56-to-48.md index f30ac23786b..a8e18771e0e 100644 --- a/changelog.d/8122-object-header-shrink-56-to-48.md +++ b/changelog.d/8122-object-header-shrink-56-to-48.md @@ -77,7 +77,7 @@ rather than the quotient. Four codegen doc comments claiming "24 on 64-bit, 20 on ILP32" — wrong since `meta` landed in #6759 — are corrected, along with `docs/src/platforms/watchos.md` (the only user-facing statement of the pair), `docs/object-write-matrix.md`, and -`TYPE_LOWERING.md`. +`docs/type-lowering.md`. #### Two gates that could not have caught this diff --git a/changelog.d/PENDING-11919-zlib.md b/changelog.d/PENDING-11919-zlib.md index e9c0948c93c..d2d174a8ecd 100644 --- a/changelog.d/PENDING-11919-zlib.md +++ b/changelog.d/PENDING-11919-zlib.md @@ -12,6 +12,6 @@ - Remove the bundled stdlib zlib provider, its stream tables and method/property dispatch arms, and the binding's private queues, listener maps, root scanner and agent table lifecycle. Default and optimized builds select `perry-ext-zlib`. -Validation against the last buildable main, 78e2ab97e7: zero new failures across runtime, stdlib, codegen and ext-zlib; 54/58 selected gap cases pass versus 38/58 on main, with zero regressions. All ten real-program outputs agree with Node, including the previously failing buffer_heavy gunzip pipe. The historical n=5 interleaved performance comparison has two small explained increases: hello +0.1236% from linked pointer relocations and commander +0.0503% from the generic lazy-state guard on emitter methods. Other instruction deltas are within their same-binary floors. Named fix-forward plans and RSS/full-collection evidence are in docs/native-payload-zlib-validation.md. Native handle tables/producers fall from 197/183 to 195/161; the Buffer layout gate has zero new sites. All 25 stream/codec/lazy/source/worker sabotages and the nine Buffer layout sabotages turn red. The literal total-process bomb RSS bound remains unmet; queue and codec workspace stay bounded, with clean-process RSS reported explicitly. +Validation against the last buildable main, 78e2ab97e7: zero new failures across runtime, stdlib, codegen and ext-zlib; 54/58 selected gap cases pass versus 38/58 on main, with zero regressions. All ten real-program outputs agree with Node, including the previously failing buffer_heavy gunzip pipe. The historical n=5 interleaved performance comparison has two small explained increases: hello +0.1236% from linked pointer relocations and commander +0.0503% from the generic lazy-state guard on emitter methods. Other instruction deltas are within their same-binary floors. Named fix-forward plans and RSS/full-collection evidence are in docs/audits/native-payload-zlib-validation.md. Native handle tables/producers fall from 197/183 to 195/161; the Buffer layout gate has zero new sites. All 25 stream/codec/lazy/source/worker sabotages and the nine Buffer layout sabotages turn red. The literal total-process bomb RSS bound remains unmet; queue and codec workspace stay bounded, with clean-process RSS reported explicitly. -Final verification on main 75c38e93ff: zero new failures across ext-zlib (default threading), runtime, stdlib and codegen; 54/59 selected gap cases pass versus 40/59 on main, with zero regressions. tsc, Zod, qs, commander, hello and worker_heavy are within noise; fastify runs 7.8% fewer instructions. buffer_heavy in the default build is +7.5% from the runtime stream's per-chunk state traffic; see docs/native-payload-zlib-validation.md. +Final verification on main 75c38e93ff: zero new failures across ext-zlib (default threading), runtime, stdlib and codegen; 54/59 selected gap cases pass versus 40/59 on main, with zero regressions. tsc, Zod, qs, commander, hello and worker_heavy are within noise; fastify runs 7.8% fewer instructions. buffer_heavy in the default build is +7.5% from the runtime stream's per-chunk state traffic; see docs/audits/native-payload-zlib-validation.md. diff --git a/changelog.d/PENDING-12015-meta.md b/changelog.d/PENDING-12015-meta.md index 247c5468b37..c27d4767746 100644 --- a/changelog.d/PENDING-12015-meta.md +++ b/changelog.d/PENDING-12015-meta.md @@ -24,4 +24,4 @@ RSS medians have small increases on four drivers (up to 1 MiB) and a 1.34 MiB reduction on QS stringify, so the literal all-negative RSS/symmetric-window goal is not fully satisfied. Descriptor reflection's micro rises 0.19%. Full attribution, before/after/Node micro rows, program medians and baseline -failure lists: `docs/perf-12015-attribution.md`. Versions are unchanged. +failure lists: `docs/audits/perf-12015-attribution.md`. Versions are unchanged. diff --git a/changelog.d/PENDING-native-payload-lifecycle.md b/changelog.d/PENDING-native-payload-lifecycle.md index c4b7a3179bb..eddb80a1df3 100644 --- a/changelog.d/PENDING-native-payload-lifecycle.md +++ b/changelog.d/PENDING-native-payload-lifecycle.md @@ -32,7 +32,7 @@ record index is initialized in its existing open payload, rather than replacing that payload through attach and retiring the new record. The RSS attribution and identical-binary control are recorded in -`docs/native-payload-lifecycle-rss.md`. `scripts/runtime_rss_ab.py` prepares +`docs/audits/native-payload-lifecycle-rss.md`. `scripts/runtime_rss_ab.py` prepares each executable's file cache identically before interleaved Linux RSS runs; copied and linked copies of the same ELF can otherwise differ by over 10 MiB of clean file-backed RSS even with anonymous THP disabled. diff --git a/changelog.d/keylists-pinned.md b/changelog.d/keylists-pinned.md index 9a6404350db..38fe91a84b3 100644 --- a/changelog.d/keylists-pinned.md +++ b/changelog.d/keylists-pinned.md @@ -27,7 +27,7 @@ Both caches pay in deletion probes and remain; owned mutable lists and prototype words still require the residual shape scanner. The matched runtime suite reproduces seven existing main failures, and the native root corpus reproduces two main findings without weaker budgets. Detailed tables, RSS increases, -shared-runtime text growth and attribution are in lane-keylists/report.md. +shared-runtime text growth and attribution are in `lane-keylists/report.md` (removed in #13193; `git show 44fcf437dd:lane-keylists/report.md`). Copying root walks now retain the producer-decoded word and publish diagnostic provenance once per producer walk. Alignment, header validation, handle rejection, diff --git a/docs/CROSS_PLATFORM.md b/docs/CROSS_PLATFORM.md deleted file mode 100644 index 602cb638fbb..00000000000 --- a/docs/CROSS_PLATFORM.md +++ /dev/null @@ -1,271 +0,0 @@ -# Cross-Platform Development Guide - -> **Historical snapshot (v0.2.77).** This file is retained for early Docker -> and CI context; it is not the current installation or release runbook. Use -> [`src/getting-started/installation.md`](src/getting-started/installation.md), -> [`src/contributing/building.md`](src/contributing/building.md), and -> [`src/contributing/releasing.md`](src/contributing/releasing.md) for current -> toolchains and platform coverage. - -This guide covers how to develop Perry on macOS while compiling and deploying to Linux/Ubuntu targets. - -## Quick Start - -### Option 1: GitHub Actions (Recommended for Production) - -Template workflow files are provided in `templates/github-actions/`: -- `ci.yml` - Runs tests on Ubuntu and macOS, uploads build artifacts -- `release.yml` - Builds release binaries when you push a version tag - -To use them, copy to `.github/workflows/` in your repository: -```bash -mkdir -p .github/workflows -cp templates/github-actions/*.yml .github/workflows/ -``` - -Then push your code and GitHub Actions will automatically: -- Run tests on both Ubuntu and macOS -- Build release binaries for Linux (x86_64) and macOS (x86_64, aarch64) -- Upload artifacts that can be downloaded - -To create a release: -```bash -git tag v0.2.77 -git push origin v0.2.77 -``` - -### Option 2: Docker (Local Development) - -Build and test for Linux locally: - -```bash -# Build the Perry compiler Docker image -docker compose build perry - -# Compile a TypeScript file to a Linux binary -docker compose run --rm perry myfile.ts -o myfile - -# The compiled binary is now in your current directory -./myfile # (run on Linux or in Docker) -``` - -### Option 3: Cross-Compilation from macOS - -Install cross-compilation toolchain: - -```bash -# Install cross-rs for easier cross-compilation -cargo install cross - -# Build for Linux -cross build --release --target x86_64-unknown-linux-gnu -``` - -## Detailed Workflows - -### Development on macOS, Deploy to Ubuntu - -1. **Develop and test locally on macOS:** - ```bash - cargo build - cargo test - cargo run -- test.ts -o test_mac - ./test_mac # Test on macOS - ``` - -2. **Build Linux binary via Docker:** - ```bash - # One-liner to compile for Linux - docker compose run --rm perry test.ts -o test_linux - - # Or build inside a dev container - docker compose run --rm perry-dev cargo build --release - ``` - -3. **Copy to Ubuntu server:** - ```bash - scp test_linux user@ubuntu-server:/path/to/app - scp target/release/libperry_runtime.a user@ubuntu-server:/path/to/app - ``` - -### Testing with Services (MySQL, Redis, PostgreSQL) - -The docker-compose includes test databases: - -```bash -# Start services -docker compose up -d mysql redis postgres - -# Wait for services to be healthy -docker compose ps - -# Run tests with database connectivity -docker compose run --rm perry-dev cargo test - -# Or run specific integration tests -docker compose run --rm perry-dev bash -c " - cargo run --release -- test_mysql.ts -o test_mysql - ./test_mysql -" -``` - -### Interactive Development in Docker - -```bash -# Enter a dev shell with full Rust toolchain -docker compose run --rm perry-dev bash - -# Inside container: -cargo build --release -cargo test -cargo run -- /app/myfile.ts -o /app/myfile -``` - -## CI/CD Pipeline - -### GitHub Actions Workflows - -Template workflows are in `templates/github-actions/`. Copy them to `.github/workflows/` to activate. - -**`ci.yml`** - Runs on every push/PR: -- Checks formatting (`cargo fmt`) -- Runs linter (`cargo clippy`) -- Builds and tests on Ubuntu and macOS -- Uploads build artifacts - -**`release.yml`** - Runs on version tags: -- Builds release binaries for all platforms -- Creates GitHub Release with downloadable archives -- Generates release notes automatically - -### Creating a Release - -```bash -# 1. Update version in Cargo.toml and CLAUDE.md -# 2. Commit changes -git add -A && git commit -m "Release v0.2.77" - -# 3. Create and push tag -git tag v0.2.77 -git push origin main --tags -``` - -## Alternative Approaches - -### 1. GitHub Codespaces - -Create a `.devcontainer/devcontainer.json`: -```json -{ - "name": "Perry Dev", - "image": "mcr.microsoft.com/devcontainers/rust:1", - "features": { - "ghcr.io/devcontainers/features/docker-in-docker:2": {} - }, - "postCreateCommand": "cargo build" -} -``` - -### 2. Remote Development (VS Code) - -Use VS Code Remote - SSH to develop directly on an Ubuntu machine: -1. Install "Remote - SSH" extension -2. Connect to your Ubuntu server -3. Clone and work on the code directly - -### 3. Multipass (Ubuntu VMs on macOS) - -```bash -# Install multipass -brew install multipass - -# Create Ubuntu VM -multipass launch --name perry-dev --cpus 4 --memory 8G --disk 50G - -# Mount your code -multipass mount /path/to/perry perry-dev:/home/ubuntu/perry - -# SSH into VM -multipass shell perry-dev - -# Inside VM: install Rust and build -curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -cd ~/perry && cargo build --release -``` - -### 4. Lima (Lightweight VMs on macOS) - -```bash -# Install lima -brew install lima - -# Start Ubuntu VM -limactl start --name=perry template://ubuntu - -# Run commands in VM -lima cargo build --release -``` - -### 5. Nix with Cross-Compilation - -Create a `flake.nix` for reproducible builds across platforms: -```nix -{ - inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - - outputs = { self, nixpkgs }: { - packages.x86_64-linux.default = - nixpkgs.legacyPackages.x86_64-linux.callPackage ./default.nix {}; - packages.x86_64-darwin.default = - nixpkgs.legacyPackages.x86_64-darwin.callPackage ./default.nix {}; - }; -} -``` - -## Docker Image Variants - -The Dockerfile provides multiple stages: - -| Stage | Use Case | Size | -|-------|----------|------| -| `builder` | Building Perry from source | Large | -| `compiler` | Compiling TypeScript files | ~500MB | -| `runtime` | Running compiled binaries only | ~100MB | - -### Using Runtime Image for Deployment - -```dockerfile -# In your app's Dockerfile -FROM perry:compiler AS builder -COPY app.ts /app/app.ts -RUN perry /app/app.ts -o /app/app - -FROM perry:runtime -COPY --from=builder /app/app /app/app -CMD ["/app/app"] -``` - -## Troubleshooting - -### Linker Errors on Linux - -Ensure `libperry_runtime.a` is in the library path: -```bash -export PERRY_RUNTIME_LIB=/path/to/libperry_runtime.a -``` - -### Binary Won't Run on Ubuntu - -Check glibc compatibility: -```bash -ldd ./myprogram -``` - -If missing `libc.so.6`, the binary was compiled against a newer glibc. Use an older base image (e.g., `debian:bullseye` instead of `bookworm`). - -### SSL/TLS Errors - -Install CA certificates: -```bash -apt-get install ca-certificates -``` diff --git a/docs/android-crash-fix-v0.4.29.md b/docs/android-crash-fix-v0.4.29.md deleted file mode 100644 index 5a17fb20db0..00000000000 --- a/docs/android-crash-fix-v0.4.29.md +++ /dev/null @@ -1,67 +0,0 @@ -# Android Crash Fix — Perry v0.4.26–v0.4.29 - -> **Historical incident record.** This documents the v0.4.26–v0.4.29 Android -> crash and its fix; it is not current Android setup guidance. See -> [`src/platforms/android.md`](src/platforms/android.md) for the maintained -> platform documentation. - -## Summary - -Android UI apps crashed with `SIGSEGV at getLevelInfo+44` when accessing module-level arrays from UI pump tick callbacks. The root cause was the perry-native thread's arena being freed after `main()` returned. - -## Root Cause - -On Android, Perry's init chain runs on a background thread ("perry-native"): - -``` -Kotlin PerryActivity.startNative() - → Thread { PerryBridge.nativeMain() } - → main() // compiled TypeScript entry point - → _perry_init_labels_ts() // initializes thresholds[], levels[] - → App({ ... }) // sets up UI + timer pump - → main() returns - → thread exits ← ARENA DROPPED HERE -``` - -After `main()` returns, the perry-native thread exits. Rust's thread-local storage cleanup runs the arena's `Drop`, which **frees all memory blocks** — including module-level arrays (`thresholds`, `levels`) that were allocated during init. - -The UI thread's 8ms timer pump then calls `getLevelInfo()`, which dereferences the now-freed array pointers → **SIGSEGV**. - -This never happened on macOS/iOS because `App()` blocks forever in the event loop — the thread never exits, so the arena is never dropped. - -## Fix - -**`crates/perry-ui-android/src/lib.rs`**: After `main()` returns, park the thread forever instead of letting it exit: - -```rust -main(); -// Park thread — arena holds module-level objects needed by UI thread -loop { std::thread::park(); } -``` - -## Additional Fixes in v0.4.26–v0.4.29 - -| Version | Fix | -|---------|-----| -| v0.4.26 | Skip `strip_duplicate_objects_from_lib` on Android — `js_nanbox_*` symbols were stripped from UI lib while standalone runtime was skipped | -| v0.4.27 | `JNI_GetCreatedJavaVMs` stub — `jni-sys` extern ref unsatisfied on Android (no `libjvm.so`, `libnativehelper` only at API 31+) | -| v0.4.28 | Module-level arrays with `Unknown`/`Any` type loaded as F64 instead of I64 — now arrays/closures/maps/sets always use I64 | -| v0.4.29 | Thread-local arena freed after `main()` returned + `-Bsymbolic` linker flag to prevent ELF symbol interposition | - -## How to Rebuild for Android - -```bash -# 1. Ensure perry v0.4.29+ is installed -perry --version # should show 0.4.29 - -# 2. Cross-compile the Android UI library (one-time) -ANDROID_NDK_HOME=$HOME/Library/Android/sdk/ndk/28.0.12433566 \ - cargo build --release -p perry-ui-android --target aarch64-linux-android - -# 3. Compile your app -ANDROID_NDK_HOME=$HOME/Library/Android/sdk/ndk/28.0.12433566 \ - perry src/main.ts --target android -o android-build/app/src/main/jniLibs/arm64-v8a/libperry_app.so - -# 4. Clean Gradle build (important — clears cached .so) -cd android-build && ./gradlew clean assembleDebug -``` diff --git a/docs/audits/README.md b/docs/audits/README.md new file mode 100644 index 00000000000..5c2f3bfe1d1 --- /dev/null +++ b/docs/audits/README.md @@ -0,0 +1,19 @@ +# Audits and validation records + +Point-in-time evidence from specific issues and PRs: measurements, investigations and validation runs. These are not maintained documentation; each file reflects the commit it was measured on. Current behavior is documented in `docs/src/`. + +Nothing outside this directory links to these files except `scripts/check_gc_env_knobs.py`, which lists `statepoints-only-12023.md` as a historical document. Review this directory periodically and delete records whose work has landed. + +| Record | Date | Topic | +|--------|------|-------| +| `gc-rss-instructions-2026-10-03/` | 2026-10-03 | GC RSS and instruction-count measurement campaign (scripts, inputs, tables) | +| `native-stream-rooting-2026-10-04.md` | 2026-10-04 | Native stream pipeline rooting audit | +| `native-payload-lifecycle-rss.md` | 2026-10-05 | Lifecycle RSS attribution (#11919) | +| `native-payload-lifecycle-validation.md` | 2026-10-05 | Native payload lifecycle runtime validation (#11919) | +| `native-payload-zlib-validation.md` | 2026-10-07 | Native payload zlib validation (#11919) | +| `statepoints-only-12023*.md`, `statepoints-only-12023-inventory.txt` | 2026-10-06 | Statepoint lowering investigation and acceptance (#12023) | +| `perf-12015-attribution.md` | 2026-10-06 | Object metadata and enumeration attribution (#12015) | +| `design-lazy-literal-methods.md` | 2026-10-08 | Lazy object-literal methods (design note, not built) | +| `actions-consolidation-plan.md`, `actions-consolidation-inventory.json` | 2026-10-08 | GitHub Actions consolidation plan | +| `2026-10-11-stdelete.md` | 2026-10-11 | Class D side-table deletion | +| `wasi-component-validation-2026-10-21/` | 2026-10-21 | WASI and component-model validation runs | diff --git a/docs/design-lazy-literal-methods.md b/docs/audits/design-lazy-literal-methods.md similarity index 100% rename from docs/design-lazy-literal-methods.md rename to docs/audits/design-lazy-literal-methods.md diff --git a/docs/audits/lean-dependencies.md b/docs/audits/lean-dependencies.md deleted file mode 100644 index a2ff46b2422..00000000000 --- a/docs/audits/lean-dependencies.md +++ /dev/null @@ -1,109 +0,0 @@ -# Dependency cleanup and pull-on-use boundaries - -Baseline: `25ef4637f5` (before this PR). No version bump. - -This change replaces the narrow dependency surfaces identified in the audit: - -- `env_logger`: CLI logger over the existing `log` facade, with module/level - selection and Perex message filtering through `RUST_LOG`. -- `chrono`: CLI UTC formatting and the certificate parser's existing - `DateTime::unix_duration()` conversion. No new time-zone implementation. -- `jsonwebtoken`: shared Apple ES256 token framing; P-256 signing and PKCS#8 - parsing remain in RustCrypto. Both previous Apple-token callers share it. -- `uuid`: only v4 and monotonic v7, with OS entropy and independent opt-in - features. v1/v3/v5 and their hash dependencies are no longer selected. -- `lazy_static` / `once_cell`: Perry's direct uses move to std `LazyLock`. - Tokio's non-initializing activity probe keeps a separate initialization flag. -- `hex` / `base64`: dependency-free strict codec leaf crates. Existing permissive - Node Buffer codecs remain distinct. Tests compare base64 against the previous - 0.23 implementation, including malformed inputs and optional source-map padding. -- `resolv-conf`: private nameserver parser in the DNS module. Search/options - directives are ignored because this consumer uses only server addresses. -- `indicatif`: CLI progress display with terminal detection, bounded redraws, - byte/rate/ETA output and an on-demand ticker for unknown-length downloads. -- `dotenvy`: publish's environment loader, with quoting, multiline values, - interpolation and preservation of existing environment variables. The previous - crate is retained only as a test oracle. - -## Selection happens before linking - -`perry-cli-support` has no default features or unconditional dependencies. Its -UTC, dotenv, logging, progress and Apple JWT modules are independently selected. -It is never a runtime dependency. `perry` selects the helpers its core command -modules use; `publish-cli` and `mobile-cli` select `apple-api`, which selects the -JWT module and P-256. A dev CLI does not compile that signing stack. Commands -that remain in the old shared CLI module structure report a clear feature error -if they reach Apple signing in a build without `apple-api`. - -`perry-uuid` also defaults to no features/dependencies. `perry-stdlib/crypto` -selects v4+v7; `bundled-nodemailer` and `perry-ext-nodemailer` select v4. Minimal -stdlib builds do not pull this crate. The stdlib's always-on worker stack-size -helper was moved out of the optional async bridge so an empty-feature build -works without enabling async support. - -The compiler/runtime source fingerprints include the new helper sources, so -editing a helper invalidates cached archives even without a version bump. - -The hex/base64 crates contain only codecs and no initialization or retained FFI -entry points. Callers retain their existing optional dependency boundaries: -for example, runtime hex remains behind `node-api-host`, and stdlib's direct -codec edges follow crypto/TLS/fetch. Base64 is still a core runtime dependency -because core `atob`/`btoa`, source maps and secret-key dispatch call it. This PR -does not claim method-level feature elimination for those existing core APIs. -Likewise, minimal stdlib still reaches hex through its updater dependency. - -The ZIP reader/writer defaults to Stored and Deflate, the formats used for Perry -release archives, IPA extraction and HAP generation. Builds requiring uncommon -third-party formats can select `perry/extended-zip`. This adds AES, bzip2, -deflate64, Zopfli, LZMA, PPMd, zstd, xz and time support. `deflate-flate2` remains -the backend-neutral feature: selecting `zip/deflate` would change the shared -`node:zlib` backend (#10810). - -## Measured graph changes - -Host: `aarch64-apple-darwin`. Each package was queried separately with -`cargo tree --locked --offline --edges normal,build --prefix none --format '{p}'`. -Counts deduplicate **package name + version** and include workspace crates. -These are selected build graphs, not the union recorded in Cargo.lock, and not -measurements of executable bytes or build-time improvements. - -| Selected graph | Before | After | Net reduction | -| --- | ---: | ---: | ---: | -| Default `perry` | 339 | 287 | 52 | -| `perry --no-default-features --features dev-cli` | 331 | 255 | 76 | -| Default `perry-runtime` | 214 | 212 | 2 | -| Default `perry-stdlib` | 398 | 393 | 5 | -| `perry-stdlib --no-default-features` | 134 | 118 | 16 | - -Third-party users retain some packages in other graphs: e.g. base64, once_cell, -lazy_static, regex, and MongoDB's UUID. Test oracles are dev-dependencies only. -No cryptographic primitives, Unicode data, parsers, concurrent handle maps, -float formatting algorithms or Aho-Corasick matching were replaced. - -## Verification - -`python3 scripts/check_lean_dependencies.py --offline` checks selected Cargo -graphs, both capability-absent and capability-present cases, separately to avoid -workspace feature unification masking errors. The check job runs this script -without `--offline`, together with helper tests and minimal stdlib/dev CLI checks. -An empty-feature CLI-support or UUID crate must have no dependencies; the codec -crates must have no normal/build dependencies. A deliberately planted prohibited -edge verifies the checker rejects it. - -Helper tests cover canonical and malformed base64 against the previous library, -hex vectors, Gregorian boundaries, ES256 signature verification, UUID version/ -variant bits, same-millisecond order, clock rollback and counter overflow, -logging filters, dotenv grammar, and hidden/no-color progress. Runtime DNS tests -cover comments, IPv4/IPv6, scoped addresses and invalid inputs. - -Local validation: full runtime unit suite **4,438 passed, 4 ignored**; helper -unit tests and Clippy with warnings denied passed; full compiler/affected -extensions, dev CLI and empty-feature stdlib checked successfully. Repository -formatting, architecture, GC-root inventory, address inventory, test registration, -Node-version consistency and file-size gates passed. - -The stdlib crypto subset has **22 passing and 2 failing tests**, identical on a -fresh build of `25ef4637f5` with the same features/profile and serial execution: -`native_dispatch_pbkdf2_value_form_fires_callback` and -`native_dispatch_random_bytes_value_form_fires_callback`. They expect callback-timer -completion and also fail without this cleanup. They were not disabled or changed. diff --git a/docs/native-payload-lifecycle-rss.md b/docs/audits/native-payload-lifecycle-rss.md similarity index 100% rename from docs/native-payload-lifecycle-rss.md rename to docs/audits/native-payload-lifecycle-rss.md diff --git a/docs/native-payload-lifecycle-validation.md b/docs/audits/native-payload-lifecycle-validation.md similarity index 100% rename from docs/native-payload-lifecycle-validation.md rename to docs/audits/native-payload-lifecycle-validation.md diff --git a/docs/native-payload-zlib-validation.md b/docs/audits/native-payload-zlib-validation.md similarity index 100% rename from docs/native-payload-zlib-validation.md rename to docs/audits/native-payload-zlib-validation.md diff --git a/docs/gc-rss-audit/NATIVE_STREAM_ROOTING_20261004.md b/docs/audits/native-stream-rooting-2026-10-04.md similarity index 100% rename from docs/gc-rss-audit/NATIVE_STREAM_ROOTING_20261004.md rename to docs/audits/native-stream-rooting-2026-10-04.md diff --git a/docs/perf-12015-attribution.md b/docs/audits/perf-12015-attribution.md similarity index 100% rename from docs/perf-12015-attribution.md rename to docs/audits/perf-12015-attribution.md diff --git a/docs/audits/rust-dependencies-2026-09-14.json b/docs/audits/rust-dependencies-2026-09-14.json deleted file mode 100644 index 16a5f29e4f7..00000000000 --- a/docs/audits/rust-dependencies-2026-09-14.json +++ /dev/null @@ -1,1245 +0,0 @@ -{ -"commit": "4945fc1f7498debc76e9f861d7cf1517da5e67c9", -"cargo": "cargo 1.100.0-nightly (514c56dd7 2026-08-19)", -"semantics": "Cross-target lock graph, including optional and dev/build dependencies; not linked size. Lexical references need manual review. Marginal counts freeze third-party edges/features and remove all workspace edges to one package name.", -"summary": {"workspace_members": 83, "direct_external_names": 195, "registry_package_versions": 990, "registry_package_names": 863, "vendored_package_versions": 13, "registry_names_with_multiple_versions": 100}, -"direct": [ -{"name": "aes", "versions": ["0.8.4", "0.9.1"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "aes", "kind": "normal", "target": null, "optional": true, "requirement": "^0.8", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["aes@0.8.4"], "reference_lines": 33, "references": ["crates/perry-stdlib/src/crypto/cipher.rs:70", "crates/perry-stdlib/src/crypto/cipher.rs:72", "crates/perry-stdlib/src/crypto/cipher.rs:74", "crates/perry-stdlib/src/crypto/cipher.rs:76", "crates/perry-stdlib/src/crypto/cipher.rs:78", "crates/perry-stdlib/src/crypto/cipher.rs:80"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "aes_09", "kind": "normal", "target": null, "optional": true, "requirement": "^0.9", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["aes@0.9.1"], "reference_lines": 2, "references": ["crates/perry-stdlib/src/crypto/util.rs:3", "crates/perry-stdlib/src/webcrypto/util.rs:8"]}], "lock_closure_packages": 88, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "aes-gcm", "versions": ["0.10.3"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "aes_gcm", "kind": "normal", "target": null, "optional": true, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["aes-gcm@0.10.3"], "reference_lines": 26, "references": ["crates/perry-stdlib/src/crypto/cipher.rs:70", "crates/perry-stdlib/src/crypto/cipher.rs:72", "crates/perry-stdlib/src/crypto/cipher.rs:74", "crates/perry-stdlib/src/crypto/cipher.rs:76", "crates/perry-stdlib/src/crypto/cipher.rs:78", "crates/perry-stdlib/src/crypto/cipher.rs:80"]}], "lock_closure_packages": 52, "lock_packages_lost_if_all_workspace_edges_removed": ["aes-gcm@0.10.3", "ghash@0.5.1", "polyval@0.6.2"]}, -{"name": "aes-kw", "versions": ["0.3.1"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "aes_kw", "kind": "normal", "target": null, "optional": true, "requirement": "^0.3.0", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["aes-kw@0.3.1"], "reference_lines": 8, "references": ["crates/perry-stdlib/src/crypto/cipher.rs:916", "crates/perry-stdlib/src/crypto/cipher.rs:926", "crates/perry-stdlib/src/crypto/cipher.rs:936", "crates/perry-stdlib/src/crypto/cipher.rs:1048", "crates/perry-stdlib/src/crypto/cipher.rs:1058", "crates/perry-stdlib/src/crypto/cipher.rs:1068"]}], "lock_closure_packages": 79, "lock_packages_lost_if_all_workspace_edges_removed": ["aes-kw@0.3.1"]}, -{"name": "ahash", "versions": ["0.8.12"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "ahash", "kind": "normal", "target": null, "optional": false, "requirement": "^0.8.12", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["ahash@0.8.12"], "reference_lines": 3, "references": ["crates/perry-runtime/src/json/parser.rs:40", "crates/perry-runtime/src/json/parser.rs:48", "crates/perry-runtime/src/json/parser_scan_tests.rs:268"]}], "lock_closure_packages": 38, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "aho-corasick", "versions": ["1.1.4"], "edges": [{"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "aho_corasick", "kind": "normal", "target": null, "optional": false, "requirement": "^1.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["aho-corasick@1.1.4"], "reference_lines": 1, "references": ["crates/perry-codegen/src/codegen/retained_source_pool.rs:5"]}], "lock_closure_packages": 2, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "anyhow", "versions": ["1.0.104"], "edges": [{"owner": "perry-codegen-arkts", "manifest": "crates/perry-codegen-arkts/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 1, "references": ["crates/perry-codegen-arkts/src/lib.rs:49"]}, {"owner": "perry-codegen-glance", "manifest": "crates/perry-codegen-glance/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 1, "references": ["crates/perry-codegen-glance/src/lib.rs:9"]}, {"owner": "perry-codegen-js", "manifest": "crates/perry-codegen-js/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 1, "references": ["crates/perry-codegen-js/src/lib.rs:11"]}, {"owner": "perry-codegen-swiftui", "manifest": "crates/perry-codegen-swiftui/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 1, "references": ["crates/perry-codegen-swiftui/src/lib.rs:9"]}, {"owner": "perry-codegen-wasm", "manifest": "crates/perry-codegen-wasm/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 1, "references": ["crates/perry-codegen-wasm/src/lib.rs:11"]}, {"owner": "perry-codegen-wear-tiles", "manifest": "crates/perry-codegen-wear-tiles/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 1, "references": ["crates/perry-codegen-wear-tiles/src/lib.rs:9"]}, {"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 368, "references": ["crates/perry-codegen/src/codegen/artifacts.rs:8", "crates/perry-codegen/src/codegen/closure.rs:6", "crates/perry-codegen/src/codegen/closure.rs:117", "crates/perry-codegen/src/codegen/closure.rs:285", "crates/perry-codegen/src/codegen/closure.rs:296", "crates/perry-codegen/src/codegen/closure.rs:336"]}, {"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 0, "references": []}, {"owner": "perry-container-e2e", "manifest": "crates/perry-container-e2e/Cargo.toml", "alias": "anyhow", "kind": "dev", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 0, "references": []}, {"owner": "perry-doc-tests", "manifest": "crates/perry-doc-tests/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 10, "references": ["crates/perry-doc-tests/src/image_diff.rs:10", "crates/perry-doc-tests/src/image_diff.rs:49", "crates/perry-doc-tests/src/image_diff.rs:138", "crates/perry-doc-tests/src/lint.rs:9", "crates/perry-doc-tests/src/main.rs:12", "crates/perry-doc-tests/src/main.rs:151"]}, {"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 7, "references": ["crates/perry-ext-typescript/src/bun.rs:14", "crates/perry-ext-typescript/src/bun.rs:941", "crates/perry-ext-typescript/src/bun.rs:957", "crates/perry-ext-typescript/src/bun.rs:970", "crates/perry-ext-typescript/src/bun.rs:989", "crates/perry-ext-typescript/src/bun.rs:1023"]}, {"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 167, "references": ["crates/perry-hir/examples/solid_jsx.rs:6", "crates/perry-hir/examples/solid_jsx.rs:8", "crates/perry-hir/examples/solid_jsx.rs:19", "crates/perry-hir/src/destructuring/assignment_expr.rs:47", "crates/perry-hir/src/destructuring/assignment_expr.rs:98", "crates/perry-hir/src/destructuring/assignment_expr.rs:197"]}, {"owner": "perry-parser", "manifest": "crates/perry-parser/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 4, "references": ["crates/perry-parser/src/defines.rs:5", "crates/perry-parser/src/lib.rs:6", "crates/perry-parser/src/lib.rs:77", "crates/perry-parser/src/lib.rs:118"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 0, "references": []}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 0, "references": []}, {"owner": "perry-transform", "manifest": "crates/perry-transform/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 0, "references": []}, {"owner": "perry-updater", "manifest": "crates/perry-updater/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 3, "references": ["crates/perry-updater/src/cli_manifest.rs:3", "crates/perry-updater/src/cli_manifest.rs:163", "crates/perry-updater/src/cli_manifest.rs:172"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "anyhow", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["anyhow@1.0.104"], "reference_lines": 551, "references": ["crates/perry/src/commands/appstore.rs:3", "crates/perry/src/commands/attest.rs:33", "crates/perry/src/commands/audit.rs:3", "crates/perry/src/commands/audit.rs:485", "crates/perry/src/commands/cache.rs:14", "crates/perry/src/commands/cache.rs:62"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "argon2", "versions": ["0.5.3"], "edges": [{"owner": "perry-ext-argon2", "manifest": "crates/perry-ext-argon2/Cargo.toml", "alias": "argon2", "kind": "normal", "target": null, "optional": false, "requirement": "^0.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["argon2@0.5.3"], "reference_lines": 1, "references": ["crates/perry-ext-argon2/src/lib.rs:6"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "argon2", "kind": "normal", "target": null, "optional": true, "requirement": "^0.5", "default_features": true, "features": [], "direct_feature_activators": ["bundled-argon2"], "resolved": ["argon2@0.5.3"], "reference_lines": 12, "references": ["crates/perry-stdlib/src/argon2.rs:8", "crates/perry-stdlib/src/crypto/kdf.rs:285", "crates/perry-stdlib/src/lib.rs:337", "crates/perry-stdlib/src/lib.rs:339", "crates/perry-stdlib/src/webcrypto/hmac.rs:621", "crates/perry-stdlib/src/webcrypto/hmac.rs:623"]}], "lock_closure_packages": 48, "lock_packages_lost_if_all_workspace_edges_removed": ["argon2@0.5.3", "blake2@0.10.6"]}, -{"name": "async-trait", "versions": ["0.1.92"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "async_trait", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["async-trait@0.1.92"], "reference_lines": 10, "references": ["crates/perry-container-compose/src/backend/cli_backend.rs:7", "crates/perry-container-compose/src/backend.rs:6", "crates/perry-container-compose/src/commands/build.rs:5", "crates/perry-container-compose/src/commands/inspect.rs:6", "crates/perry-container-compose/src/commands/mod.rs:5", "crates/perry-container-compose/src/commands/run.rs:5"]}], "lock_closure_packages": 5, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "atty", "versions": ["0.2.14"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "atty", "kind": "normal", "target": null, "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["atty@0.2.14"], "reference_lines": 0, "references": []}], "lock_closure_packages": 6, "lock_packages_lost_if_all_workspace_edges_removed": ["atty@0.2.14", "hermit-abi@0.1.19"]}, -{"name": "base64", "versions": ["0.22.1", "0.23.1"], "edges": [{"owner": "perry-codegen-wasm", "manifest": "crates/perry-codegen-wasm/Cargo.toml", "alias": "base64", "kind": "normal", "target": null, "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 1, "references": ["crates/perry-codegen-wasm/src/lib.rs:12"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "base64", "kind": "normal", "target": null, "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 6, "references": ["crates/perry-ext-http/src/client_surface.rs:4", "crates/perry-ext-http/src/client_surface.rs:266", "crates/perry-ext-http/src/client_surface.rs:267", "crates/perry-ext-http/src/request_headers.rs:11", "crates/perry-ext-http/src/tls_client.rs:1050", "crates/perry-ext-http/src/tls_client.rs:1055"]}, {"owner": "perry-ext-jsonwebtoken", "manifest": "crates/perry-ext-jsonwebtoken/Cargo.toml", "alias": "base64", "kind": "normal", "target": null, "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 2, "references": ["crates/perry-ext-jsonwebtoken/src/lib.rs:230", "crates/perry-ext-jsonwebtoken/src/lib.rs:231"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "base64", "kind": "normal", "target": null, "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 13, "references": ["crates/perry-runtime/src/object/buffer_dispatch.rs:7", "crates/perry-runtime/src/object/buffer_dispatch.rs:279", "crates/perry-runtime/src/process/node_module/source_map.rs:3", "crates/perry-runtime/src/process/node_module/source_map.rs:749", "crates/perry-runtime/src/process/node_module/source_map.rs:750", "crates/perry-runtime/src/process/node_module/source_map.rs:759"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "base64", "kind": "normal", "target": null, "optional": true, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": ["crypto", "external-tls-server", "tls-runtime"], "resolved": ["base64@0.22.1"], "reference_lines": 61, "references": ["crates/perry-stdlib/src/crypto/certificate.rs:63", "crates/perry-stdlib/src/crypto/certificate.rs:142", "crates/perry-stdlib/src/crypto/hash_handles.rs:185", "crates/perry-stdlib/src/crypto/hash_handles.rs:186", "crates/perry-stdlib/src/crypto/hash_handles.rs:499", "crates/perry-stdlib/src/crypto/hash_handles.rs:500"]}, {"owner": "perry-ui-android", "manifest": "crates/perry-ui-android/Cargo.toml", "alias": "base64", "kind": "normal", "target": "cfg(target_os = \"android\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 2, "references": ["crates/perry-ui-android/src/ffi/issue_553.rs:286", "crates/perry-ui-android/src/ffi/issue_553.rs:294"]}, {"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "base64", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 2, "references": ["crates/perry-ui-gtk4/src/ffi/stubs_webview_attrtext_screenshot.rs:218", "crates/perry-ui-gtk4/src/ffi/stubs_webview_attrtext_screenshot.rs:226"]}, {"owner": "perry-ui-ios", "manifest": "crates/perry-ui-ios/Cargo.toml", "alias": "base64", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 2, "references": ["crates/perry-ui-ios/src/ffi/system.rs:364", "crates/perry-ui-ios/src/ffi/system.rs:372"]}, {"owner": "perry-ui-macos", "manifest": "crates/perry-ui-macos/Cargo.toml", "alias": "base64", "kind": "normal", "target": "cfg(target_os = \"macos\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 2, "references": ["crates/perry-ui-macos/src/lib_ffi/system_aux.rs:46", "crates/perry-ui-macos/src/lib_ffi/system_aux.rs:54"]}, {"owner": "perry-ui-tvos", "manifest": "crates/perry-ui-tvos/Cargo.toml", "alias": "base64", "kind": "normal", "target": "cfg(target_os = \"tvos\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 2, "references": ["crates/perry-ui-tvos/src/ffi/media_extras.rs:298", "crates/perry-ui-tvos/src/ffi/media_extras.rs:306"]}, {"owner": "perry-ui-visionos", "manifest": "crates/perry-ui-visionos/Cargo.toml", "alias": "base64", "kind": "normal", "target": "cfg(target_os = \"visionos\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 2, "references": ["crates/perry-ui-visionos/src/ffi_misc.rs:149", "crates/perry-ui-visionos/src/ffi_misc.rs:157"]}, {"owner": "perry-ui-windows-winui", "manifest": "crates/perry-ui-windows-winui/Cargo.toml", "alias": "base64", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 0, "references": []}, {"owner": "perry-ui-windows", "manifest": "crates/perry-ui-windows/Cargo.toml", "alias": "base64", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 2, "references": ["crates/perry-ui-windows/src/ffi/system.rs:185", "crates/perry-ui-windows/src/ffi/system.rs:193"]}, {"owner": "perry-updater", "manifest": "crates/perry-updater/Cargo.toml", "alias": "base64", "kind": "normal", "target": null, "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 16, "references": ["crates/perry-updater/src/cli_manifest.rs:4", "crates/perry-updater/src/cli_manifest.rs:77", "crates/perry-updater/src/cli_manifest.rs:159", "crates/perry-updater/src/cli_manifest.rs:168", "crates/perry-updater/src/cli_manifest.rs:185", "crates/perry-updater/src/cli_manifest.rs:199"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "base64", "kind": "normal", "target": null, "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["base64@0.22.1"], "reference_lines": 59, "references": ["crates/perry/src/commands/compile/collect_modules/wasm_asset.rs:247", "crates/perry/src/commands/compile/collect_modules/wasm_asset.rs:248", "crates/perry/src/commands/publish/credentials.rs:214", "crates/perry/src/commands/publish/credentials.rs:215", "crates/perry/src/commands/publish/mod.rs:870", "crates/perry/src/commands/publish/mod.rs:873"]}], "lock_closure_packages": 2, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "bcrypt", "versions": ["0.19.3"], "edges": [{"owner": "perry-ext-bcrypt", "manifest": "crates/perry-ext-bcrypt/Cargo.toml", "alias": "bcrypt", "kind": "normal", "target": null, "optional": false, "requirement": "^0.19", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["bcrypt@0.19.3"], "reference_lines": 5, "references": ["crates/perry-ext-bcrypt/src/lib.rs:38", "crates/perry-ext-bcrypt/src/lib.rs:69", "crates/perry-ext-bcrypt/src/lib.rs:88", "crates/perry-ext-bcrypt/src/lib.rs:114", "crates/perry-ext-bcrypt/src/lib.rs:141"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "bcrypt", "kind": "normal", "target": null, "optional": true, "requirement": "^0.19", "default_features": true, "features": [], "direct_feature_activators": ["bundled-bcrypt"], "resolved": ["bcrypt@0.19.3"], "reference_lines": 7, "references": ["crates/perry-stdlib/src/bcrypt.rs:36", "crates/perry-stdlib/src/bcrypt.rs:109", "crates/perry-stdlib/src/bcrypt.rs:155", "crates/perry-stdlib/src/bcrypt.rs:226", "crates/perry-stdlib/src/bcrypt.rs:277", "crates/perry-stdlib/src/lib.rs:332"]}], "lock_closure_packages": 78, "lock_packages_lost_if_all_workspace_edges_removed": ["bcrypt@0.19.3", "blowfish@0.10.0"]}, -{"name": "block2", "versions": ["0.6.2"], "edges": [{"owner": "perry-ext-ads", "manifest": "crates/perry-ext-ads/Cargo.toml", "alias": "block2", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": true, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": ["google-ads"], "resolved": [], "reference_lines": 1, "references": ["crates/perry-ext-ads/src/ios_real.rs:38"]}, {"owner": "perry-ui-ios", "manifest": "crates/perry-ui-ios/Cargo.toml", "alias": "block2", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["block2@0.6.2"], "reference_lines": 24, "references": ["crates/perry-ui-ios/src/app.rs:1109", "crates/perry-ui-ios/src/audio.rs:163", "crates/perry-ui-ios/src/audio.rs:200", "crates/perry-ui-ios/src/audio_playback.rs:605", "crates/perry-ui-ios/src/audio_playback.rs:606", "crates/perry-ui-ios/src/background.rs:46"]}, {"owner": "perry-ui-macos", "manifest": "crates/perry-ui-macos/Cargo.toml", "alias": "block2", "kind": "normal", "target": "cfg(target_os = \"macos\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["block2@0.6.2"], "reference_lines": 19, "references": ["crates/perry-ui-macos/src/app.rs:1093", "crates/perry-ui-macos/src/app.rs:1126", "crates/perry-ui-macos/src/app.rs:1777", "crates/perry-ui-macos/src/audio.rs:196", "crates/perry-ui-macos/src/audio_playback.rs:602", "crates/perry-ui-macos/src/audio_playback.rs:603"]}, {"owner": "perry-ui-tvos", "manifest": "crates/perry-ui-tvos/Cargo.toml", "alias": "block2", "kind": "normal", "target": "cfg(target_os = \"tvos\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["block2@0.6.2"], "reference_lines": 12, "references": ["crates/perry-ui-tvos/src/app.rs:703", "crates/perry-ui-tvos/src/audio.rs:163", "crates/perry-ui-tvos/src/audio.rs:200", "crates/perry-ui-tvos/src/audio_playback.rs:605", "crates/perry-ui-tvos/src/audio_playback.rs:606", "crates/perry-ui-tvos/src/background.rs:37"]}, {"owner": "perry-ui-visionos", "manifest": "crates/perry-ui-visionos/Cargo.toml", "alias": "block2", "kind": "normal", "target": "cfg(target_os = \"visionos\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["block2@0.6.2"], "reference_lines": 20, "references": ["crates/perry-ui-visionos/src/app.rs:513", "crates/perry-ui-visionos/src/audio.rs:163", "crates/perry-ui-visionos/src/audio.rs:200", "crates/perry-ui-visionos/src/audio_playback.rs:605", "crates/perry-ui-visionos/src/audio_playback.rs:606", "crates/perry-ui-visionos/src/background.rs:38"]}, {"owner": "perry-ui-watchos", "manifest": "crates/perry-ui-watchos/Cargo.toml", "alias": "block2", "kind": "normal", "target": "cfg(target_os = \"watchos\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["block2@0.6.2"], "reference_lines": 7, "references": ["crates/perry-ui-watchos/src/audio.rs:77", "crates/perry-ui-watchos/src/audio.rs:84", "crates/perry-ui-watchos/src/audio.rs:118", "crates/perry-ui-watchos/src/audio_playback.rs:605", "crates/perry-ui-watchos/src/audio_playback.rs:606", "crates/perry-ui-watchos/src/background.rs:119"]}], "lock_closure_packages": 3, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "brotli", "versions": ["8.0.4"], "edges": [{"owner": "perry-ext-zlib", "manifest": "crates/perry-ext-zlib/Cargo.toml", "alias": "brotli", "kind": "normal", "target": null, "optional": false, "requirement": "^8.0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["brotli@8.0.4"], "reference_lines": 6, "references": ["crates/perry-ext-zlib/src/stream.rs:110", "crates/perry-ext-zlib/src/stream.rs:117", "crates/perry-ext-zlib/src/stream.rs:366", "crates/perry-ext-zlib/src/stream.rs:367", "crates/perry-ext-zlib/src/stream.rs:463", "crates/perry-ext-zlib/src/stream.rs:466"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "brotli", "kind": "normal", "target": null, "optional": true, "requirement": "^8.0.2", "default_features": true, "features": [], "direct_feature_activators": ["bundled-streams", "compression-brotli"], "resolved": ["brotli@8.0.4"], "reference_lines": 8, "references": ["crates/perry-stdlib/src/streams/transform.rs:995", "crates/perry-stdlib/src/streams/transform.rs:999", "crates/perry-stdlib/src/zlib.rs:509", "crates/perry-stdlib/src/zlib.rs:517", "crates/perry-stdlib/src/zlib.rs:962", "crates/perry-stdlib/src/zlib.rs:964"]}], "lock_closure_packages": 4, "lock_packages_lost_if_all_workspace_edges_removed": ["brotli@8.0.4"]}, -{"name": "bson", "versions": ["3.1.0"], "edges": [{"owner": "perry-ext-mongodb", "manifest": "crates/perry-ext-mongodb/Cargo.toml", "alias": "bson", "kind": "normal", "target": null, "optional": false, "requirement": "^3.1", "default_features": true, "features": ["serde"], "direct_feature_activators": [], "resolved": ["bson@3.1.0"], "reference_lines": 1, "references": ["crates/perry-ext-mongodb/src/lib.rs:36"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "bson", "kind": "normal", "target": null, "optional": true, "requirement": "^3.1", "default_features": true, "features": ["serde"], "direct_feature_activators": ["bundled-mongodb"], "resolved": ["bson@3.1.0"], "reference_lines": 10, "references": ["crates/perry-stdlib/src/mongodb.rs:10", "crates/perry-stdlib/src/mongodb.rs:154", "crates/perry-stdlib/src/mongodb.rs:155", "crates/perry-stdlib/src/mongodb.rs:156", "crates/perry-stdlib/src/mongodb.rs:157", "crates/perry-stdlib/src/mongodb.rs:158"]}], "lock_closure_packages": 108, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "bytes", "versions": ["1.12.1"], "edges": [{"owner": "perry-ext-fastify", "manifest": "crates/perry-ext-fastify/Cargo.toml", "alias": "bytes", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["bytes@1.12.1"], "reference_lines": 9, "references": ["crates/perry-ext-fastify/src/context.rs:667", "crates/perry-ext-fastify/src/context.rs:678", "crates/perry-ext-fastify/src/lib.rs:849", "crates/perry-ext-fastify/src/lib.rs:850", "crates/perry-ext-fastify/src/lib.rs:881", "crates/perry-ext-fastify/src/lib.rs:884"]}, {"owner": "perry-ext-fetch", "manifest": "crates/perry-ext-fetch/Cargo.toml", "alias": "bytes", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["bytes@1.12.1"], "reference_lines": 1, "references": ["crates/perry-ext-fetch/src/lib.rs:11"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "bytes", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["bytes@1.12.1"], "reference_lines": 20, "references": ["crates/perry-ext-http/src/client_dispatch.rs:173", "crates/perry-ext-http/src/continue_client.rs:21", "crates/perry-ext-http/src/lib.rs:108", "crates/perry-ext-http/src/server/http2_server/pump.rs:10", "crates/perry-ext-http/src/server/http2_server/session.rs:11", "crates/perry-ext-http/src/server/http2_server.rs:22"]}, {"owner": "perry-ext-net", "manifest": "crates/perry-ext-net/Cargo.toml", "alias": "bytes", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["bytes@1.12.1"], "reference_lines": 14, "references": ["crates/perry-ext-net/src/buffer_pool.rs:65", "crates/perry-ext-net/src/buffer_pool.rs:142", "crates/perry-ext-net/src/bun_tcp.rs:15", "crates/perry-ext-net/src/jsvalue.rs:391", "crates/perry-ext-net/src/lib.rs:26", "crates/perry-ext-net/src/lib.rs:1247"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "bytes", "kind": "normal", "target": null, "optional": true, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": ["http-server"], "resolved": ["bytes@1.12.1"], "reference_lines": 28, "references": ["crates/perry-stdlib/src/crypto/certificate.rs:69", "crates/perry-stdlib/src/crypto/certificate.rs:74", "crates/perry-stdlib/src/crypto/certificate.rs:78", "crates/perry-stdlib/src/crypto/certificate.rs:82", "crates/perry-stdlib/src/crypto/certificate.rs:85", "crates/perry-stdlib/src/crypto/certificate.rs:90"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "cairo-rs", "versions": ["0.20.12", "0.22.9"], "edges": [{"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "cairo", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["cairo-rs@0.22.9"], "reference_lines": 7, "references": ["crates/perry-ui-gtk4/src/widgets/canvas.rs:207", "crates/perry-ui-gtk4/src/widgets/canvas.rs:208", "crates/perry-ui-gtk4/src/widgets/canvas.rs:249", "crates/perry-ui-gtk4/src/widgets/canvas.rs:252", "crates/perry-ui-gtk4/src/widgets/chart.rs:11", "crates/perry-ui-gtk4/src/widgets/chart.rs:202"]}], "lock_closure_packages": 67, "lock_packages_lost_if_all_workspace_edges_removed": ["cairo-rs@0.22.9", "cairo-sys-rs@0.22.0"]}, -{"name": "cbc", "versions": ["0.1.2", "0.2.1"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "cbc", "kind": "normal", "target": null, "optional": true, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["cbc@0.2.1"], "reference_lines": 2, "references": ["crates/perry-stdlib/src/crypto/util.rs:7", "crates/perry-stdlib/src/webcrypto/util.rs:12"]}], "lock_closure_packages": 85, "lock_packages_lost_if_all_workspace_edges_removed": ["cbc@0.2.1"]}, -{"name": "cc", "versions": ["1.4.4"], "edges": [{"owner": "perry-audio-miniaudio", "manifest": "crates/perry-audio-miniaudio/Cargo.toml", "alias": "cc", "kind": "build", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["cc@1.4.4"], "reference_lines": 1, "references": ["crates/perry-audio-miniaudio/build.rs:18"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "cc", "kind": "build", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["cc@1.4.4"], "reference_lines": 8, "references": ["crates/perry-runtime/build.rs:544", "crates/perry-runtime/build.rs:561", "crates/perry-runtime/src/thread.rs:1093", "crates/perry-runtime/src/thread.rs:1158", "crates/perry-runtime/src/thread.rs:1355", "crates/perry-runtime/src/thread.rs:1405"]}], "lock_closure_packages": 38, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "chacha20poly1305", "versions": ["0.10.1"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "chacha20poly1305", "kind": "normal", "target": null, "optional": true, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["chacha20poly1305@0.10.1"], "reference_lines": 4, "references": ["crates/perry-stdlib/src/webcrypto/aes.rs:155", "crates/perry-stdlib/src/webcrypto/aes.rs:156", "crates/perry-stdlib/src/webcrypto/aes.rs:179", "crates/perry-stdlib/src/webcrypto/aes.rs:180"]}], "lock_closure_packages": 50, "lock_packages_lost_if_all_workspace_edges_removed": ["chacha20@0.9.1", "chacha20poly1305@0.10.1", "poly1305@0.8.0"]}, -{"name": "chrono", "versions": ["0.4.45"], "edges": [{"owner": "perry-ext-cron", "manifest": "crates/perry-ext-cron/Cargo.toml", "alias": "chrono", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["chrono@0.4.45"], "reference_lines": 3, "references": ["crates/perry-ext-cron/src/lib.rs:22", "crates/perry-ext-cron/src/lib.rs:374", "crates/perry-ext-cron/src/lib.rs:386"]}, {"owner": "perry-ext-dayjs", "manifest": "crates/perry-ext-dayjs/Cargo.toml", "alias": "chrono", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["chrono@0.4.45"], "reference_lines": 1, "references": ["crates/perry-ext-dayjs/src/lib.rs:5"]}, {"owner": "perry-ext-moment", "manifest": "crates/perry-ext-moment/Cargo.toml", "alias": "chrono", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["chrono@0.4.45"], "reference_lines": 6, "references": ["crates/perry-ext-moment/src/lib.rs:10", "crates/perry-ext-moment/src/lib.rs:99", "crates/perry-ext-moment/src/lib.rs:201", "crates/perry-ext-moment/src/lib.rs:370", "crates/perry-ext-moment/src/lib.rs:372", "crates/perry-ext-moment/src/lib.rs:376"]}, {"owner": "perry-ext-mysql2", "manifest": "crates/perry-ext-mysql2/Cargo.toml", "alias": "chrono", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["chrono@0.4.45"], "reference_lines": 6, "references": ["crates/perry-ext-mysql2/src/lib.rs:306", "crates/perry-ext-mysql2/src/lib.rs:310", "crates/perry-ext-mysql2/src/lib.rs:314", "crates/perry-ext-mysql2/src/lib.rs:579", "crates/perry-ext-mysql2/src/lib.rs:675", "crates/perry-ext-mysql2/src/lib.rs:1769"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "chrono", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": ["serde"], "direct_feature_activators": [], "resolved": ["chrono@0.4.45"], "reference_lines": 42, "references": ["crates/perry-stdlib/src/cron.rs:96", "crates/perry-stdlib/src/cron.rs:453", "crates/perry-stdlib/src/cron.rs:473", "crates/perry-stdlib/src/crypto/x509.rs:552", "crates/perry-stdlib/src/crypto/x509.rs:557", "crates/perry-stdlib/src/crypto/x509.rs:561"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "chrono", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["chrono@0.4.45"], "reference_lines": 3, "references": ["crates/perry/src/commands/install/scanner/mod.rs:202", "crates/perry/src/commands/native/init.rs:199", "crates/perry/src/commands/native/init.rs:200"]}], "lock_closure_packages": 53, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "clap", "versions": ["4.6.6"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "clap", "kind": "normal", "target": null, "optional": false, "requirement": "^4.5", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["clap@4.6.6"], "reference_lines": 2, "references": ["crates/perry-container-compose/src/cli.rs:5", "crates/perry-container-compose/src/main.rs:3"]}, {"owner": "perry-doc-tests", "manifest": "crates/perry-doc-tests/Cargo.toml", "alias": "clap", "kind": "normal", "target": null, "optional": false, "requirement": "^4.5", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["clap@4.6.6"], "reference_lines": 1, "references": ["crates/perry-doc-tests/src/main.rs:13"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "clap", "kind": "normal", "target": null, "optional": false, "requirement": "^4.4", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["clap@4.6.6"], "reference_lines": 0, "references": []}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "clap", "kind": "normal", "target": null, "optional": false, "requirement": "^4.5", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["clap@4.6.6"], "reference_lines": 37, "references": ["crates/perry/src/commands/appstore.rs:4", "crates/perry/src/commands/audit.rs:4", "crates/perry/src/commands/cache.rs:15", "crates/perry/src/commands/check.rs:4", "crates/perry/src/commands/compile/tiny_program/mod.rs:298", "crates/perry/src/commands/compile/types.rs:9"]}], "lock_closure_packages": 21, "lock_packages_lost_if_all_workspace_edges_removed": ["anstream@1.0.0", "anstyle-parse@1.0.0", "anstyle-query@1.1.5", "anstyle-wincon@3.0.11", "anstyle@1.0.14", "clap@4.6.6", "clap_builder@4.6.6", "clap_derive@4.6.4", "clap_lex@1.1.0", "colorchoice@1.0.5", "is_terminal_polyfill@1.70.2", "once_cell_polyfill@1.70.2", "utf8parse@0.2.2"]}, -{"name": "console", "versions": ["0.15.11", "0.16.4"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "console", "kind": "normal", "target": null, "optional": false, "requirement": "^0.16", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["console@0.16.4"], "reference_lines": 1, "references": ["crates/perry-container-compose/src/installer.rs:5"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "console", "kind": "normal", "target": null, "optional": false, "requirement": "^0.16", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["console@0.16.4"], "reference_lines": 43, "references": ["crates/perry/src/commands/audit.rs:5", "crates/perry/src/commands/audit.rs:247", "crates/perry/src/commands/audit.rs:257", "crates/perry/src/commands/check.rs:404", "crates/perry/src/commands/check.rs:415", "crates/perry/src/commands/check.rs:425"]}], "lock_closure_packages": 20, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "const-oid", "versions": ["0.10.2", "0.9.6"], "edges": [{"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "const_oid", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["const-oid@0.10.2"], "reference_lines": 4, "references": ["crates/perry-ext-node-forge/src/crypto.rs:19", "crates/perry-ext-node-forge/src/crypto.rs:361", "crates/perry-ext-node-forge/src/crypto.rs:375", "crates/perry-ext-node-forge/src/crypto.rs:507"]}], "lock_closure_packages": 2, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "cron", "versions": ["0.17.0"], "edges": [{"owner": "perry-ext-cron", "manifest": "crates/perry-ext-cron/Cargo.toml", "alias": "cron", "kind": "normal", "target": null, "optional": false, "requirement": "^0.17", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["cron@0.17.0"], "reference_lines": 1, "references": ["crates/perry-ext-cron/src/lib.rs:23"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "cron", "kind": "normal", "target": null, "optional": true, "requirement": "^0.17", "default_features": true, "features": [], "direct_feature_activators": ["bundled-cron"], "resolved": ["cron@0.17.0"], "reference_lines": 3, "references": ["crates/perry-stdlib/src/cron.rs:28", "crates/perry-stdlib/src/lib.rs:385", "crates/perry-stdlib/src/lib.rs:387"]}], "lock_closure_packages": 68, "lock_packages_lost_if_all_workspace_edges_removed": ["cron@0.17.0", "winnow@0.7.15"]}, -{"name": "ctr", "versions": ["0.9.2"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "ctr", "kind": "normal", "target": null, "optional": true, "requirement": "^0.9", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["ctr@0.9.2"], "reference_lines": 4, "references": ["crates/perry-stdlib/src/crypto/cipher.rs:96", "crates/perry-stdlib/src/crypto/cipher.rs:97", "crates/perry-stdlib/src/crypto/cipher.rs:98", "crates/perry-stdlib/src/webcrypto/aes.rs:622"]}], "lock_closure_packages": 43, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "dashmap", "versions": ["5.5.3", "6.2.1"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "dashmap", "kind": "normal", "target": null, "optional": false, "requirement": "^6.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dashmap@6.2.1"], "reference_lines": 0, "references": []}, {"owner": "perry-ffi", "manifest": "crates/perry-ffi/Cargo.toml", "alias": "dashmap", "kind": "normal", "target": null, "optional": false, "requirement": "^6.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dashmap@6.2.1"], "reference_lines": 1, "references": ["crates/perry-ffi/src/handle.rs:75"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "dashmap", "kind": "normal", "target": null, "optional": false, "requirement": "^6.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dashmap@6.2.1"], "reference_lines": 3, "references": ["crates/perry-stdlib/src/common/handle.rs:10", "crates/perry-stdlib/src/container/types.rs:4", "crates/perry-stdlib/src/framework/server.rs:349"]}], "lock_closure_packages": 49, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "der", "versions": ["0.7.10", "0.8.1"], "edges": [{"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "der", "kind": "normal", "target": null, "optional": false, "requirement": "^0.8", "default_features": true, "features": ["oid"], "direct_feature_activators": [], "resolved": ["der@0.8.1"], "reference_lines": 11, "references": ["crates/perry-ext-node-forge/src/crypto.rs:20", "crates/perry-ext-node-forge/src/crypto.rs:21", "crates/perry-ext-node-forge/src/crypto.rs:22", "crates/perry-ext-node-forge/src/crypto.rs:236", "crates/perry-ext-node-forge/src/crypto.rs:239", "crates/perry-ext-node-forge/src/crypto.rs:260"]}], "lock_closure_packages": 15, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "dialoguer", "versions": ["0.11.0", "0.12.0"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "dialoguer", "kind": "normal", "target": null, "optional": false, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dialoguer@0.11.0"], "reference_lines": 1, "references": ["crates/perry-container-compose/src/installer.rs:6"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "dialoguer", "kind": "normal", "target": null, "optional": false, "requirement": "^0.12", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dialoguer@0.12.0"], "reference_lines": 16, "references": ["crates/perry/src/commands/publish/mod.rs:6", "crates/perry/src/commands/publish/mod.rs:680", "crates/perry/src/commands/run/devices.rs:293", "crates/perry/src/commands/setup/android.rs:3", "crates/perry/src/commands/setup/common_apple.rs:2", "crates/perry/src/commands/setup/harmonyos.rs:3"]}], "lock_closure_packages": 91, "lock_packages_lost_if_all_workspace_edges_removed": ["console@0.15.11", "dialoguer@0.11.0", "dialoguer@0.12.0", "shell-words@1.1.1"]}, -{"name": "dirs", "versions": ["6.0.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "dirs", "kind": "normal", "target": null, "optional": true, "requirement": "^6", "default_features": true, "features": [], "direct_feature_activators": ["full"], "resolved": ["dirs@6.0.0"], "reference_lines": 2, "references": ["crates/perry-runtime/src/os.rs:169", "crates/perry-runtime/src/update_notify.rs:527"]}, {"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "dirs", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dirs@6.0.0"], "reference_lines": 2, "references": ["crates/perry-ui-gtk4/src/widgets/webview.rs:90", "crates/perry-ui-gtk4/src/widgets/webview.rs:92"]}, {"owner": "perry-ui", "manifest": "crates/perry-ui/Cargo.toml", "alias": "dirs", "kind": "normal", "target": "cfg(any(target_os = \"macos\", target_os = \"windows\", target_os = \"linux\"))", "optional": false, "requirement": "^6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dirs@6.0.0"], "reference_lines": 1, "references": ["crates/perry-ui/src/frame.rs:87"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "dirs", "kind": "normal", "target": null, "optional": false, "requirement": "^6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dirs@6.0.0"], "reference_lines": 22, "references": ["crates/perry/src/commands/compile/compressed_libs.rs:118", "crates/perry/src/commands/compile/library_search/llvm_tool_discovery_tests.rs:19", "crates/perry/src/commands/compile/library_search/llvm_tool_discovery_tests.rs:38", "crates/perry/src/commands/compile/library_search.rs:535", "crates/perry/src/commands/compile/resolve/tests.rs:1969", "crates/perry/src/commands/compile/resolve.rs:397"]}], "lock_closure_packages": 41, "lock_packages_lost_if_all_workspace_edges_removed": ["dirs-sys@0.5.0", "dirs@6.0.0", "libredox@0.1.17", "option-ext@0.2.0", "redox_users@0.5.2"]}, -{"name": "dotenvy", "versions": ["0.15.7"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "dotenvy", "kind": "normal", "target": null, "optional": false, "requirement": "^0.15", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dotenvy@0.15.7"], "reference_lines": 0, "references": []}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "dotenvy", "kind": "normal", "target": null, "optional": false, "requirement": "^0.15", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dotenvy@0.15.7"], "reference_lines": 1, "references": ["crates/perry/src/commands/publish/mod.rs:90"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "dssim-core", "versions": ["3.5.1"], "edges": [{"owner": "perry-doc-tests", "manifest": "crates/perry-doc-tests/Cargo.toml", "alias": "dssim_core", "kind": "normal", "target": null, "optional": false, "requirement": "^3.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["dssim-core@3.5.1"], "reference_lines": 3, "references": ["crates/perry-doc-tests/src/image_diff.rs:61", "crates/perry-doc-tests/src/image_diff.rs:124", "crates/perry-doc-tests/src/image_diff.rs:125"]}], "lock_closure_packages": 18, "lock_packages_lost_if_all_workspace_edges_removed": ["dssim-core@3.5.1"]}, -{"name": "ecb", "versions": ["0.1.2", "0.2.1"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "ecb", "kind": "normal", "target": null, "optional": true, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["ecb@0.2.1"], "reference_lines": 7, "references": ["crates/perry-stdlib/src/crypto/cipher.rs:64", "crates/perry-stdlib/src/crypto/cipher.rs:65", "crates/perry-stdlib/src/crypto/cipher.rs:66", "crates/perry-stdlib/src/crypto/cipher.rs:67", "crates/perry-stdlib/src/crypto/cipher.rs:68", "crates/perry-stdlib/src/crypto/cipher.rs:69"]}], "lock_closure_packages": 85, "lock_packages_lost_if_all_workspace_edges_removed": ["ecb@0.2.1"]}, -{"name": "ed25519-dalek", "versions": ["2.2.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "ed25519_dalek", "kind": "normal", "target": null, "optional": true, "requirement": "^2.1", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["ed25519-dalek@2.2.0"], "reference_lines": 22, "references": ["crates/perry-stdlib/src/crypto/hash.rs:51", "crates/perry-stdlib/src/crypto/sign.rs:76", "crates/perry-stdlib/src/crypto/sign.rs:145", "crates/perry-stdlib/src/crypto/sign.rs:146", "crates/perry-stdlib/src/crypto/sign.rs:528", "crates/perry-stdlib/src/crypto/util.rs:189"]}, {"owner": "perry-updater", "manifest": "crates/perry-updater/Cargo.toml", "alias": "ed25519_dalek", "kind": "normal", "target": null, "optional": false, "requirement": "^2.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["ed25519-dalek@2.2.0"], "reference_lines": 5, "references": ["crates/perry-updater/src/cli_manifest.rs:5", "crates/perry-updater/src/cli_manifest.rs:75", "crates/perry-updater/src/cli_manifest.rs:180", "crates/perry-updater/src/core.rs:24", "crates/perry-updater/src/core.rs:449"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "ed25519_dalek", "kind": "normal", "target": null, "optional": true, "requirement": "^2.1", "default_features": true, "features": ["rand_core"], "direct_feature_activators": ["updater-cli"], "resolved": ["ed25519-dalek@2.2.0"], "reference_lines": 3, "references": ["crates/perry/src/commands/updater.rs:30", "crates/perry/src/commands/updater.rs:326", "crates/perry/src/commands/updater.rs:344"]}], "lock_closure_packages": 69, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "ed448-goldilocks", "versions": ["0.14.0-pre.15"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "ed448_goldilocks", "kind": "normal", "target": null, "optional": true, "requirement": "^0.14.0-pre.13", "default_features": false, "features": ["alloc", "signing"], "direct_feature_activators": ["crypto"], "resolved": ["ed448-goldilocks@0.14.0-pre.15"], "reference_lines": 7, "references": ["crates/perry-stdlib/src/webcrypto/hmac.rs:156", "crates/perry-stdlib/src/webcrypto/hmac.rs:385", "crates/perry-stdlib/src/webcrypto/hmac.rs:389", "crates/perry-stdlib/src/webcrypto/jwk.rs:337", "crates/perry-stdlib/src/webcrypto/jwk.rs:341", "crates/perry-stdlib/src/webcrypto/jwk.rs:929"]}], "lock_closure_packages": 100, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "encoding_rs", "versions": ["0.8.35"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "encoding_rs", "kind": "build", "target": null, "optional": false, "requirement": "^0.8", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["encoding_rs@0.8.35"], "reference_lines": 1, "references": ["crates/perry-runtime/build.rs:494"]}], "lock_closure_packages": 2, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "env_logger", "versions": ["0.10.2"], "edges": [{"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "env_logger", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["env_logger@0.10.2"], "reference_lines": 1, "references": ["crates/perry/src/main.rs:378"]}], "lock_closure_packages": 15, "lock_packages_lost_if_all_workspace_edges_removed": ["env_logger@0.10.2", "humantime@2.3.0", "is-terminal@0.4.17", "termcolor@1.4.1"]}, -{"name": "fast_image_resize", "versions": ["6.1.0"], "edges": [{"owner": "perry-ext-sharp", "manifest": "crates/perry-ext-sharp/Cargo.toml", "alias": "fast_image_resize", "kind": "normal", "target": null, "optional": false, "requirement": "^6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["fast_image_resize@6.1.0"], "reference_lines": 2, "references": ["crates/perry-ext-sharp/src/lib.rs:334", "crates/perry-ext-sharp/src/lib.rs:335"]}], "lock_closure_packages": 13, "lock_packages_lost_if_all_workspace_edges_removed": ["document-features@0.2.12", "fast_image_resize@6.1.0", "litrs@1.0.0"]}, -{"name": "flate2", "versions": ["1.1.10"], "edges": [{"owner": "perry-ext-zlib", "manifest": "crates/perry-ext-zlib/Cargo.toml", "alias": "flate2", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["flate2@1.1.10"], "reference_lines": 12, "references": ["crates/perry-ext-zlib/src/lib.rs:9", "crates/perry-ext-zlib/src/lib.rs:12", "crates/perry-ext-zlib/src/lib.rs:509", "crates/perry-ext-zlib/src/stream.rs:30", "crates/perry-ext-zlib/src/stream.rs:33", "crates/perry-ext-zlib/src/stream.rs:360"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "flate2", "kind": "normal", "target": null, "optional": true, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": ["bundled-streams", "compression-gzip"], "resolved": ["flate2@1.1.10"], "reference_lines": 11, "references": ["crates/perry-stdlib/src/streams/transform.rs:6", "crates/perry-stdlib/src/streams/transform.rs:9", "crates/perry-stdlib/src/zlib.rs:6", "crates/perry-stdlib/src/zlib.rs:9", "crates/perry-stdlib/src/zlib.rs:955", "crates/perry-stdlib/src/zlib.rs:956"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "flate2", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["flate2@1.1.10"], "reference_lines": 6, "references": ["crates/perry/src/commands/publish/mod.rs:7", "crates/perry/src/commands/publish/mod.rs:8", "crates/perry/src/commands/publish/tarball.rs:425", "crates/perry/src/commands/publish/tarball.rs:435", "crates/perry/src/update_checker.rs:991", "crates/perry/src/update_checker.rs:1789"]}], "lock_closure_packages": 7, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "fslock", "versions": ["0.2.1"], "edges": [{"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "fslock", "kind": "normal", "target": null, "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["fslock@0.2.1"], "reference_lines": 3, "references": ["crates/perry/src/commands/compile/optimized_libs/driver.rs:774", "crates/perry/src/update_checker.rs:159", "crates/perry/src/update_checker.rs:164"]}], "lock_closure_packages": 5, "lock_packages_lost_if_all_workspace_edges_removed": ["fslock@0.2.1"]}, -{"name": "futures-util", "versions": ["0.3.34"], "edges": [{"owner": "perry-ext-mongodb", "manifest": "crates/perry-ext-mongodb/Cargo.toml", "alias": "futures_util", "kind": "normal", "target": null, "optional": false, "requirement": "^0.3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["futures-util@0.3.34"], "reference_lines": 1, "references": ["crates/perry-ext-mongodb/src/lib.rs:37"]}, {"owner": "perry-ext-ws", "manifest": "crates/perry-ext-ws/Cargo.toml", "alias": "futures_util", "kind": "normal", "target": null, "optional": false, "requirement": "^0.3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["futures-util@0.3.34"], "reference_lines": 1, "references": ["crates/perry-ext-ws/src/lib.rs:42"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "futures_util", "kind": "normal", "target": null, "optional": true, "requirement": "^0.3", "default_features": true, "features": [], "direct_feature_activators": ["bundled-mongodb", "bundled-ws"], "resolved": ["futures-util@0.3.34"], "reference_lines": 2, "references": ["crates/perry-stdlib/src/mongodb.rs:341", "crates/perry-stdlib/src/ws.rs:7"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "futures_util", "kind": "normal", "target": null, "optional": false, "requirement": "^0.3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["futures-util@0.3.34"], "reference_lines": 3, "references": ["crates/perry/src/commands/publish/mod.rs:1579", "crates/perry/src/commands/publish/mod.rs:1622", "crates/perry/src/commands/run/remote.rs:19"]}], "lock_closure_packages": 13, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "ghash", "versions": ["0.5.1", "0.6.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "ghash", "kind": "normal", "target": null, "optional": true, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["ghash@0.6.0"], "reference_lines": 4, "references": ["crates/perry-stdlib/src/crypto/cipher.rs:116", "crates/perry-stdlib/src/crypto/cipher.rs:121", "crates/perry-stdlib/src/crypto/cipher.rs:122", "crates/perry-stdlib/src/crypto/cipher.rs:129"]}], "lock_closure_packages": 87, "lock_packages_lost_if_all_workspace_edges_removed": ["ghash@0.6.0", "polyval@0.7.3", "universal-hash@0.6.1"]}, -{"name": "gimli", "versions": ["0.34.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "gimli", "kind": "normal", "target": null, "optional": false, "requirement": "^0.34", "default_features": false, "features": ["read"], "direct_feature_activators": [], "resolved": ["gimli@0.34.0"], "reference_lines": 9, "references": ["crates/perry-runtime/src/eh_walker.rs:32", "crates/perry-runtime/src/eh_walker.rs:196", "crates/perry-runtime/src/eh_walker.rs:542", "crates/perry-runtime/src/eh_walker.rs:566", "crates/perry-runtime/src/eh_walker.rs:686", "crates/perry-runtime/src/eh_walker.rs:705"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": ["gimli@0.34.0"]}, -{"name": "governor", "versions": ["0.10.4"], "edges": [{"owner": "perry-ext-ratelimit", "manifest": "crates/perry-ext-ratelimit/Cargo.toml", "alias": "governor", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["governor@0.10.4"], "reference_lines": 1, "references": ["crates/perry-ext-ratelimit/src/lib.rs:20"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "governor", "kind": "normal", "target": null, "optional": true, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": ["bundled-ratelimit"], "resolved": ["governor@0.10.4"], "reference_lines": 1, "references": ["crates/perry-stdlib/src/ratelimit.rs:20"]}], "lock_closure_packages": 68, "lock_packages_lost_if_all_workspace_edges_removed": ["futures-timer@3.0.4", "governor@0.10.4", "nonzero_ext@0.3.0", "quanta@0.12.6", "raw-cpuid@11.6.0", "spinning_top@0.3.0"]}, -{"name": "gstreamer", "versions": ["0.25.3"], "edges": [{"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "gstreamer", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^0.25", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["gstreamer@0.25.3"], "reference_lines": 47, "references": ["crates/perry-ui-gtk4/src/camera.rs:25", "crates/perry-ui-gtk4/src/camera.rs:35", "crates/perry-ui-gtk4/src/camera.rs:428", "crates/perry-ui-gtk4/src/camera.rs:435", "crates/perry-ui-gtk4/src/camera.rs:437", "crates/perry-ui-gtk4/src/camera.rs:441"]}], "lock_closure_packages": 64, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "gstreamer-app", "versions": ["0.25.2"], "edges": [{"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "gstreamer_app", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^0.25", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["gstreamer-app@0.25.2"], "reference_lines": 3, "references": ["crates/perry-ui-gtk4/src/camera.rs:1", "crates/perry-ui-gtk4/src/camera.rs:462", "crates/perry-ui-gtk4/src/camera.rs:466"]}], "lock_closure_packages": 69, "lock_packages_lost_if_all_workspace_edges_removed": ["atomic_refcell@0.1.14", "gstreamer-app-sys@0.25.0", "gstreamer-app@0.25.2", "gstreamer-base-sys@0.25.0", "gstreamer-base@0.25.2"]}, -{"name": "gtk4", "versions": ["0.9.7"], "edges": [{"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "gtk4", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^0.9", "default_features": true, "features": ["v4_6"], "direct_feature_activators": [], "resolved": ["gtk4@0.9.7"], "reference_lines": 375, "references": ["crates/perry-ui-gtk4/src/app.rs:1", "crates/perry-ui-gtk4/src/app.rs:2", "crates/perry-ui-gtk4/src/app.rs:3", "crates/perry-ui-gtk4/src/app.rs:4", "crates/perry-ui-gtk4/src/app.rs:5", "crates/perry-ui-gtk4/src/app.rs:18"]}], "lock_closure_packages": 77, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "h2", "versions": ["0.4.19"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "h2", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["h2@0.4.19"], "reference_lines": 2, "references": ["crates/perry-ext-http/src/server/http2_server/session.rs:322", "crates/perry-ext-http/src/server/http2_server.rs:202"]}], "lock_closure_packages": 55, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "hex", "versions": ["0.4.3"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "hex", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["hex@0.4.3"], "reference_lines": 4, "references": ["crates/perry-container-compose/src/compose.rs:24", "crates/perry-container-compose/src/service.rs:6", "crates/perry-container-compose/src/service.rs:23", "crates/perry-container-compose/src/testing/mock_backend.rs:133"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "hex", "kind": "normal", "target": null, "optional": true, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": ["node-api-host"], "resolved": [], "reference_lines": 4, "references": ["crates/perry-runtime/build.rs:163", "crates/perry-runtime/build.rs:165", "crates/perry-runtime/src/node_api_host/loader.rs:223", "crates/perry-runtime/src/url/search_params.rs:290"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "hex", "kind": "normal", "target": null, "optional": true, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["hex@0.4.3"], "reference_lines": 37, "references": ["crates/perry-stdlib/src/crypto/cipher.rs:1243", "crates/perry-stdlib/src/crypto/cipher.rs:1244", "crates/perry-stdlib/src/crypto/cipher.rs:1245", "crates/perry-stdlib/src/crypto/cipher.rs:1261", "crates/perry-stdlib/src/crypto/ecdh.rs:267", "crates/perry-stdlib/src/crypto/hash.rs:15"]}, {"owner": "perry-updater", "manifest": "crates/perry-updater/Cargo.toml", "alias": "hex", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["hex@0.4.3"], "reference_lines": 4, "references": ["crates/perry-updater/src/cli_manifest.rs:154", "crates/perry-updater/src/cli_manifest.rs:194", "crates/perry-updater/src/core.rs:137", "crates/perry-updater/src/core.rs:517"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "hex", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["hex@0.4.3"], "reference_lines": 20, "references": ["crates/perry/src/commands/attest.rs:80", "crates/perry/src/commands/compile/build_cache.rs:973", "crates/perry/src/commands/compile/build_cache.rs:1038", "crates/perry/src/commands/compile/build_cache.rs:1151", "crates/perry/src/commands/compile/build_cache.rs:1193", "crates/perry/src/commands/compile/collect_modules/eval_worker.rs:34"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "hickory-proto", "versions": ["0.26.1"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "hickory_proto", "kind": "normal", "target": null, "optional": false, "requirement": "^0.26", "default_features": false, "features": ["std"], "direct_feature_activators": [], "resolved": ["hickory-proto@0.26.1"], "reference_lines": 3, "references": ["crates/perry-runtime/src/dns_resolver.rs:17", "crates/perry-runtime/src/dns_resolver.rs:18", "crates/perry-runtime/src/dns_resolver.rs:370"]}], "lock_closure_packages": 156, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "hkdf", "versions": ["0.12.4", "0.13.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "hkdf", "kind": "normal", "target": null, "optional": true, "requirement": "^0.13", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["hkdf@0.13.0"], "reference_lines": 7, "references": ["crates/perry-stdlib/src/crypto/kdf.rs:1107", "crates/perry-stdlib/src/crypto/util.rs:18", "crates/perry-stdlib/src/crypto_e2e.rs:11", "crates/perry-stdlib/src/webcrypto/hmac.rs:591", "crates/perry-stdlib/src/webcrypto/hmac.rs:594", "crates/perry-stdlib/src/webcrypto/hmac.rs:597"]}], "lock_closure_packages": 87, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "hmac", "versions": ["0.12.1", "0.13.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "hmac", "kind": "normal", "target": null, "optional": true, "requirement": "^0.13", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["hmac@0.13.0"], "reference_lines": 23, "references": ["crates/perry-stdlib/src/crypto/hash_handles.rs:156", "crates/perry-stdlib/src/crypto/hash_handles.rs:169", "crates/perry-stdlib/src/crypto/hash_handles.rs:629", "crates/perry-stdlib/src/crypto/hash_handles.rs:630", "crates/perry-stdlib/src/crypto/hash_handles.rs:631", "crates/perry-stdlib/src/crypto/hash_handles.rs:632"]}], "lock_closure_packages": 85, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "hostname", "versions": ["0.4.2"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "hostname", "kind": "normal", "target": null, "optional": true, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": ["full"], "resolved": ["hostname@0.4.2"], "reference_lines": 34, "references": ["crates/perry-runtime/src/dns/ffi.rs:15", "crates/perry-runtime/src/dns/ffi.rs:34", "crates/perry-runtime/src/dns/ffi.rs:66", "crates/perry-runtime/src/dns/ffi.rs:446", "crates/perry-runtime/src/dns/ffi.rs:457", "crates/perry-runtime/src/dns/ffi.rs:478"]}], "lock_closure_packages": 4, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "http-body-util", "versions": ["0.1.5"], "edges": [{"owner": "perry-ext-fastify", "manifest": "crates/perry-ext-fastify/Cargo.toml", "alias": "http_body_util", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["http-body-util@0.1.5"], "reference_lines": 1, "references": ["crates/perry-ext-fastify/src/server.rs:18"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "http_body_util", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["http-body-util@0.1.5"], "reference_lines": 4, "references": ["crates/perry-ext-http/src/server/http2_server/pump.rs:11", "crates/perry-ext-http/src/server/https_server.rs:13", "crates/perry-ext-http/src/server/response.rs:10", "crates/perry-ext-http/src/server/server.rs:16"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "http_body_util", "kind": "normal", "target": null, "optional": true, "requirement": "^0.1", "default_features": true, "features": [], "direct_feature_activators": ["http-server"], "resolved": ["http-body-util@0.1.5"], "reference_lines": 1, "references": ["crates/perry-stdlib/src/framework/server.rs:6"]}], "lock_closure_packages": 7, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "httpdate", "versions": ["1.0.3"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "httpdate", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["httpdate@1.0.3"], "reference_lines": 1, "references": ["crates/perry-ext-http/src/server/response.rs:591"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "hyper", "versions": ["1.11.1"], "edges": [{"owner": "perry-ext-fastify", "manifest": "crates/perry-ext-fastify/Cargo.toml", "alias": "hyper", "kind": "normal", "target": null, "optional": false, "requirement": "^1.4", "default_features": true, "features": ["server", "http1", "http2"], "direct_feature_activators": [], "resolved": ["hyper@1.11.1"], "reference_lines": 7, "references": ["crates/perry-ext-fastify/src/server.rs:19", "crates/perry-ext-fastify/src/server.rs:20", "crates/perry-ext-fastify/src/server.rs:21", "crates/perry-ext-fastify/src/server.rs:724", "crates/perry-ext-fastify/src/server.rs:893", "crates/perry-ext-fastify/src/server.rs:906"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "hyper", "kind": "normal", "target": null, "optional": false, "requirement": "^1.4", "default_features": true, "features": ["server", "http1", "http2"], "direct_feature_activators": [], "resolved": ["hyper@1.11.1"], "reference_lines": 37, "references": ["crates/perry-ext-http/src/server/http2_server/pump.rs:12", "crates/perry-ext-http/src/server/http2_server/pump.rs:34", "crates/perry-ext-http/src/server/http2_server/session.rs:12", "crates/perry-ext-http/src/server/http2_server/session.rs:13", "crates/perry-ext-http/src/server/http2_server.rs:23", "crates/perry-ext-http/src/server/http2_server.rs:24"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "hyper", "kind": "normal", "target": null, "optional": true, "requirement": "^1.4", "default_features": true, "features": ["server", "http1", "http2"], "direct_feature_activators": ["http-server"], "resolved": ["hyper@1.11.1"], "reference_lines": 4, "references": ["crates/perry-stdlib/src/framework/server.rs:7", "crates/perry-stdlib/src/framework/server.rs:8", "crates/perry-stdlib/src/framework/server.rs:9", "crates/perry-stdlib/src/framework/server.rs:137"]}], "lock_closure_packages": 62, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "hyper-util", "versions": ["0.1.20"], "edges": [{"owner": "perry-ext-fastify", "manifest": "crates/perry-ext-fastify/Cargo.toml", "alias": "hyper_util", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1", "default_features": true, "features": ["server", "server-auto", "tokio"], "direct_feature_activators": [], "resolved": ["hyper-util@0.1.20"], "reference_lines": 1, "references": ["crates/perry-ext-fastify/src/server.rs:22"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "hyper_util", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1", "default_features": true, "features": ["server", "server-auto", "tokio"], "direct_feature_activators": [], "resolved": ["hyper-util@0.1.20"], "reference_lines": 4, "references": ["crates/perry-ext-http/src/server/http2_server.rs:25", "crates/perry-ext-http/src/server/http2_server.rs:26", "crates/perry-ext-http/src/server/https_server.rs:17", "crates/perry-ext-http/src/server/server.rs:20"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "hyper_util", "kind": "normal", "target": null, "optional": true, "requirement": "^0.1", "default_features": true, "features": ["server", "server-auto", "tokio"], "direct_feature_activators": ["http-server"], "resolved": ["hyper-util@0.1.20"], "reference_lines": 1, "references": ["crates/perry-stdlib/src/framework/server.rs:10"]}], "lock_closure_packages": 67, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "icu_calendar", "versions": ["2.3.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "icu_calendar", "kind": "normal", "target": null, "optional": true, "requirement": "^2", "default_features": false, "features": ["compiled_data"], "direct_feature_activators": ["intl-datetime"], "resolved": ["icu_calendar@2.3.0"], "reference_lines": 0, "references": []}], "lock_closure_packages": 32, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "icu_datetime", "versions": ["2.3.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "icu_datetime", "kind": "normal", "target": null, "optional": true, "requirement": "^2", "default_features": false, "features": ["compiled_data"], "direct_feature_activators": ["intl-datetime"], "resolved": ["icu_datetime@2.3.0"], "reference_lines": 7, "references": ["crates/perry-runtime/src/intl/icu_dtf.rs:10", "crates/perry-runtime/src/intl/icu_dtf.rs:11", "crates/perry-runtime/src/intl/icu_dtf.rs:12", "crates/perry-runtime/src/intl/icu_dtf.rs:13", "crates/perry-runtime/src/intl/icu_dtf.rs:14", "crates/perry-runtime/src/intl/icu_dtf.rs:15"]}], "lock_closure_packages": 43, "lock_packages_lost_if_all_workspace_edges_removed": ["icu_datetime@2.3.0", "icu_datetime_data@2.3.0", "icu_pattern@0.5.0"]}, -{"name": "icu_decimal", "versions": ["2.3.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "icu_decimal", "kind": "normal", "target": null, "optional": true, "requirement": "^2", "default_features": false, "features": ["compiled_data"], "direct_feature_activators": ["intl-namespace"], "resolved": ["icu_decimal@2.3.0"], "reference_lines": 1, "references": ["crates/perry-runtime/src/intl/number_format.rs:513"]}], "lock_closure_packages": 33, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "icu_locale", "versions": ["2.2.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "icu_locale", "kind": "normal", "target": null, "optional": true, "requirement": "^2", "default_features": true, "features": [], "direct_feature_activators": ["intl-locale"], "resolved": ["icu_locale@2.2.0"], "reference_lines": 4, "references": ["crates/perry-runtime/src/intl/locale/likely_subtags.rs:14", "crates/perry-runtime/src/intl/locale/likely_subtags.rs:17", "crates/perry-runtime/src/intl.rs:504", "crates/perry-runtime/src/intl.rs:513"]}], "lock_closure_packages": 29, "lock_packages_lost_if_all_workspace_edges_removed": ["icu_locale@2.2.0", "icu_locale_data@2.2.0"]}, -{"name": "icu_locale_core", "versions": ["2.3.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "icu_locale_core", "kind": "normal", "target": null, "optional": true, "requirement": "^2", "default_features": true, "features": [], "direct_feature_activators": ["intl-datetime", "intl-locale", "intl-namespace"], "resolved": ["icu_locale_core@2.3.0"], "reference_lines": 2, "references": ["crates/perry-runtime/src/intl/icu_dtf.rs:17", "crates/perry-runtime/src/intl/number_format.rs:516"]}], "lock_closure_packages": 22, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "icu_provider", "versions": ["2.3.1"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "icu_provider", "kind": "normal", "target": null, "optional": true, "requirement": "^2", "default_features": false, "features": [], "direct_feature_activators": ["intl-namespace"], "resolved": ["icu_provider@2.3.1"], "reference_lines": 2, "references": ["crates/perry-runtime/src/intl/number_format.rs:514", "crates/perry-runtime/src/intl/number_format.rs:517"]}], "lock_closure_packages": 24, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "icu_time", "versions": ["2.3.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "icu_time", "kind": "normal", "target": null, "optional": true, "requirement": "^2", "default_features": false, "features": ["compiled_data"], "direct_feature_activators": ["intl-datetime"], "resolved": ["icu_time@2.3.0"], "reference_lines": 0, "references": []}], "lock_closure_packages": 34, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "idna", "versions": ["1.1.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "idna", "kind": "normal", "target": null, "optional": true, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": ["url-engine"], "resolved": ["idna@1.1.0"], "reference_lines": 3, "references": ["crates/perry-runtime/src/tls.rs:1235", "crates/perry-runtime/src/url/node_compat.rs:613", "crates/perry-runtime/src/url/url_class.rs:158"]}, {"owner": "perry-validation", "manifest": "crates/perry-validation/Cargo.toml", "alias": "idna", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["idna@1.1.0"], "reference_lines": 1, "references": ["crates/perry-validation/src/lib.rs:48"]}], "lock_closure_packages": 34, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "image", "versions": ["0.25.10"], "edges": [{"owner": "perry-doc-tests", "manifest": "crates/perry-doc-tests/Cargo.toml", "alias": "image", "kind": "normal", "target": null, "optional": false, "requirement": "^0.25", "default_features": false, "features": ["png"], "direct_feature_activators": [], "resolved": ["image@0.25.10"], "reference_lines": 12, "references": ["crates/perry-doc-tests/src/image_diff.rs:43", "crates/perry-doc-tests/src/image_diff.rs:72", "crates/perry-doc-tests/src/image_diff.rs:75", "crates/perry-doc-tests/src/image_diff.rs:88", "crates/perry-doc-tests/src/image_diff.rs:117", "crates/perry-doc-tests/src/image_diff.rs:118"]}, {"owner": "perry-ext-sharp", "manifest": "crates/perry-ext-sharp/Cargo.toml", "alias": "image", "kind": "normal", "target": null, "optional": false, "requirement": "^0.25", "default_features": true, "features": ["avif"], "direct_feature_activators": [], "resolved": ["image@0.25.10"], "reference_lines": 31, "references": ["crates/perry-ext-sharp/src/lib.rs:7", "crates/perry-ext-sharp/src/lib.rs:63", "crates/perry-ext-sharp/src/lib.rs:66", "crates/perry-ext-sharp/src/lib.rs:80", "crates/perry-ext-sharp/src/lib.rs:94", "crates/perry-ext-sharp/src/lib.rs:100"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "image", "kind": "normal", "target": null, "optional": true, "requirement": "^0.25", "default_features": true, "features": [], "direct_feature_activators": ["bundled-sharp", "full"], "resolved": ["image@0.25.10"], "reference_lines": 10, "references": ["crates/perry-stdlib/src/container/capability.rs:29", "crates/perry-stdlib/src/container/mod.rs:216", "crates/perry-stdlib/src/sharp.rs:10", "crates/perry-stdlib/src/sharp.rs:33", "crates/perry-stdlib/src/sharp.rs:56", "crates/perry-stdlib/src/sharp.rs:58"]}], "lock_closure_packages": 127, "lock_packages_lost_if_all_workspace_edges_removed": ["aligned-vec@0.6.4", "aligned@0.4.3", "arbitrary@1.4.2", "arg_enum_proc_macro@0.3.4", "as-slice@0.2.1", "av-scenechange@0.14.1", "av1-grain@0.2.5", "avif-serialize@0.8.9", "bit_field@0.10.3", "bitstream-io@4.10.0", "built@0.8.1", "byteorder-lite@0.1.0", "color_quant@1.1.0", "equator-macro@0.4.2", "equator@0.4.2", "exr@1.74.0", "fax@0.2.7", "gif@0.14.2", "half@2.7.1", "image-webp@0.2.4", "image@0.25.10", "interpolate_name@0.2.4", "itertools@0.14.0", "lebe@0.5.3", "libfuzzer-sys@0.4.12", "loop9@0.1.5", "maybe-rayon@0.1.1", "moxcms@0.8.1", "no_std_io2@0.9.4", "noop_proc_macro@0.3.0", "paste@1.0.15", "pastey@0.1.1", "profiling-procmacros@1.0.18", "profiling@1.0.18", "pxfm@0.1.29", "qoi@0.4.1", "quick-error@2.0.1", "rav1e@0.8.1", "ravif@0.13.0", "simd_helpers@0.1.0", "tiff@0.11.3", "v_frame@0.3.9", "y4m@0.8.0", "zune-core@0.5.1", "zune-inflate@0.2.54", "zune-jpeg@0.5.15"]}, -{"name": "indexmap", "versions": ["2.14.1"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "indexmap", "kind": "normal", "target": null, "optional": false, "requirement": "^2.2", "default_features": true, "features": ["serde"], "direct_feature_activators": [], "resolved": ["indexmap@2.14.1"], "reference_lines": 13, "references": ["crates/perry-container-compose/src/compose.rs:7", "crates/perry-container-compose/src/lib.rs:39", "crates/perry-container-compose/src/types.rs:7", "crates/perry-container-compose/src/workload.rs:6", "crates/perry-container-compose/tests/compose_tests.rs:1", "crates/perry-container-compose/tests/functional_orchestration.rs:16"]}], "lock_closure_packages": 12, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "indicatif", "versions": ["0.18.6"], "edges": [{"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "indicatif", "kind": "normal", "target": null, "optional": false, "requirement": "^0.18", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["indicatif@0.18.6"], "reference_lines": 3, "references": ["crates/perry/src/commands/publish/mod.rs:9", "crates/perry/src/commands/run/remote.rs:20", "crates/perry/src/update_checker.rs:7"]}], "lock_closure_packages": 38, "lock_packages_lost_if_all_workspace_edges_removed": ["indicatif@0.18.6", "unit-prefix@0.5.2"]}, -{"name": "inkwell", "versions": ["0.9.0"], "edges": [{"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "inkwell", "kind": "normal", "target": "cfg(not(windows))", "optional": true, "requirement": "^0.9.0", "default_features": false, "features": ["llvm22-1", "target-x86", "target-aarch64"], "direct_feature_activators": ["llvm-inprocess"], "resolved": ["inkwell@0.9.0"], "reference_lines": 82, "references": ["crates/perry-codegen/src/dialect/eh.rs:9", "crates/perry-codegen/src/dialect/eh.rs:10", "crates/perry-codegen/src/dialect/eh.rs:60", "crates/perry-codegen/src/dialect/eh.rs:97", "crates/perry-codegen/src/dialect/eh.rs:105", "crates/perry-codegen/src/dialect/eh.rs:180"]}, {"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "inkwell", "kind": "normal", "target": "cfg(windows)", "optional": true, "requirement": "^0.9.0", "default_features": false, "features": ["llvm22-1-no-llvm-linking", "target-x86", "target-aarch64"], "direct_feature_activators": ["llvm-inprocess"], "resolved": ["inkwell@0.9.0"], "reference_lines": 82, "references": ["crates/perry-codegen/src/dialect/eh.rs:9", "crates/perry-codegen/src/dialect/eh.rs:10", "crates/perry-codegen/src/dialect/eh.rs:60", "crates/perry-codegen/src/dialect/eh.rs:97", "crates/perry-codegen/src/dialect/eh.rs:105", "crates/perry-codegen/src/dialect/eh.rs:180"]}], "lock_closure_packages": 51, "lock_packages_lost_if_all_workspace_edges_removed": ["inkwell@0.9.0", "inkwell_internals@0.14.0"]}, -{"name": "itoa", "versions": ["1.0.18"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "itoa", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["itoa@1.0.18"], "reference_lines": 17, "references": ["crates/perry-runtime/src/array/join.rs:498", "crates/perry-runtime/src/json/stringify_api.rs:359", "crates/perry-runtime/src/json/stringify_buffer.rs:54", "crates/perry-runtime/src/json/stringify_buffer.rs:57", "crates/perry-runtime/src/json/stringify_buffer.rs:67", "crates/perry-runtime/src/json/stringify_buffer.rs:93"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "itoa", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["itoa@1.0.18"], "reference_lines": 0, "references": []}, {"owner": "perry-ui-android", "manifest": "crates/perry-ui-android/Cargo.toml", "alias": "itoa", "kind": "normal", "target": "cfg(target_os = \"android\")", "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["itoa@1.0.18"], "reference_lines": 0, "references": []}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "jni", "versions": ["0.22.4"], "edges": [{"owner": "perry-ui-android", "manifest": "crates/perry-ui-android/Cargo.toml", "alias": "jni", "kind": "normal", "target": "cfg(target_os = \"android\")", "optional": false, "requirement": "^0.22", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["jni@0.22.4"], "reference_lines": 1829, "references": ["crates/perry-ui-android/src/app.rs:1", "crates/perry-ui-android/src/app.rs:132", "crates/perry-ui-android/src/app.rs:135", "crates/perry-ui-android/src/app.rs:136", "crates/perry-ui-android/src/app.rs:180", "crates/perry-ui-android/src/app.rs:185"]}], "lock_closure_packages": 59, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "jsonwebtoken", "versions": ["11.0.0"], "edges": [{"owner": "perry-ext-jsonwebtoken", "manifest": "crates/perry-ext-jsonwebtoken/Cargo.toml", "alias": "jsonwebtoken", "kind": "normal", "target": null, "optional": false, "requirement": "^11.0", "default_features": false, "features": ["rust_crypto", "use_pem"], "direct_feature_activators": [], "resolved": ["jsonwebtoken@11.0.0"], "reference_lines": 1, "references": ["crates/perry-ext-jsonwebtoken/src/lib.rs:8"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "jsonwebtoken", "kind": "normal", "target": null, "optional": true, "requirement": "^11.0", "default_features": false, "features": ["rust_crypto", "use_pem"], "direct_feature_activators": ["bundled-jsonwebtoken"], "resolved": ["jsonwebtoken@11.0.0"], "reference_lines": 4, "references": ["crates/perry-stdlib/src/jsonwebtoken.rs:6", "crates/perry-stdlib/src/jsonwebtoken.rs:787", "crates/perry-stdlib/src/lib.rs:346", "crates/perry-stdlib/src/lib.rs:348"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "jsonwebtoken", "kind": "normal", "target": null, "optional": false, "requirement": "^11.0", "default_features": false, "features": ["rust_crypto", "use_pem"], "direct_feature_activators": [], "resolved": ["jsonwebtoken@11.0.0"], "reference_lines": 2, "references": ["crates/perry/src/commands/run/resign.rs:640", "crates/perry/src/commands/setup/common_apple.rs:7"]}], "lock_closure_packages": 119, "lock_packages_lost_if_all_workspace_edges_removed": ["jsonwebtoken@11.0.0", "pem@3.0.6", "simple_asn1@0.6.4"]}, -{"name": "kamadak-exif", "versions": ["0.6.1"], "edges": [{"owner": "perry-ext-sharp", "manifest": "crates/perry-ext-sharp/Cargo.toml", "alias": "exif", "kind": "normal", "target": null, "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["kamadak-exif@0.6.1"], "reference_lines": 2, "references": ["crates/perry-ext-sharp/src/lib.rs:129", "crates/perry-ext-sharp/src/lib.rs:130"]}], "lock_closure_packages": 2, "lock_packages_lost_if_all_workspace_edges_removed": ["kamadak-exif@0.6.1", "mutate_once@0.1.2"]}, -{"name": "ksni", "versions": ["0.3.6"], "edges": [{"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "ksni", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["tokio"], "direct_feature_activators": [], "resolved": ["ksni@0.3.6"], "reference_lines": 6, "references": ["crates/perry-ui-gtk4/src/tray.rs:49", "crates/perry-ui-gtk4/src/tray.rs:50", "crates/perry-ui-gtk4/src/tray.rs:89", "crates/perry-ui-gtk4/src/tray.rs:123", "crates/perry-ui-gtk4/src/tray.rs:190", "crates/perry-ui-gtk4/src/tray.rs:239"]}], "lock_closure_packages": 147, "lock_packages_lost_if_all_workspace_edges_removed": ["ksni@0.3.6"]}, -{"name": "lazy_static", "versions": ["1.5.0"], "edges": [{"owner": "perry-ext-fastify", "manifest": "crates/perry-ext-fastify/Cargo.toml", "alias": "lazy_static", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["lazy_static@1.5.0"], "reference_lines": 0, "references": []}, {"owner": "perry-ext-fetch", "manifest": "crates/perry-ext-fetch/Cargo.toml", "alias": "lazy_static", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["lazy_static@1.5.0"], "reference_lines": 2, "references": ["crates/perry-ext-fetch/src/lib.rs:12", "crates/perry-ext-fetch/src/lib.rs:175"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "lazy_static", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["lazy_static@1.5.0"], "reference_lines": 13, "references": ["crates/perry-ext-http/src/agent/tls_compat.rs:7", "crates/perry-ext-http/src/agent.rs:43", "crates/perry-ext-http/src/agent.rs:212", "crates/perry-ext-http/src/client_request_surface.rs:10", "crates/perry-ext-http/src/lib.rs:109", "crates/perry-ext-http/src/lib.rs:367"]}, {"owner": "perry-ext-ioredis", "manifest": "crates/perry-ext-ioredis/Cargo.toml", "alias": "lazy_static", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["lazy_static@1.5.0"], "reference_lines": 2, "references": ["crates/perry-ext-ioredis/src/lib.rs:11", "crates/perry-ext-ioredis/src/lib.rs:31"]}, {"owner": "perry-ext-streams", "manifest": "crates/perry-ext-streams/Cargo.toml", "alias": "lazy_static", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["lazy_static@1.5.0"], "reference_lines": 2, "references": ["crates/perry-ext-streams/src/lib.rs:51", "crates/perry-ext-streams/src/lib.rs:179"]}, {"owner": "perry-ext-ws", "manifest": "crates/perry-ext-ws/Cargo.toml", "alias": "lazy_static", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["lazy_static@1.5.0"], "reference_lines": 2, "references": ["crates/perry-ext-ws/src/lib.rs:43", "crates/perry-ext-ws/src/lib.rs:134"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "lazy_static", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["lazy_static@1.5.0"], "reference_lines": 5, "references": ["crates/perry-runtime/src/child_process/registry.rs:20", "crates/perry-runtime/src/net.rs:17", "crates/perry-runtime/src/plugin.rs:27", "crates/perry-runtime/src/plugin.rs:273", "crates/perry-runtime/src/text.rs:48"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "lazy_static", "kind": "normal", "target": null, "optional": false, "requirement": "^1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["lazy_static@1.5.0"], "reference_lines": 21, "references": ["crates/perry-stdlib/src/crypto/hash_handles.rs:61", "crates/perry-stdlib/src/dotenv.rs:13", "crates/perry-stdlib/src/fetch/body_metadata.rs:66", "crates/perry-stdlib/src/fetch/dispatch.rs:254", "crates/perry-stdlib/src/fetch/headers_method_value.rs:40", "crates/perry-stdlib/src/fetch/mod.rs:84"]}], "lock_closure_packages": 4, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "lettre", "versions": ["0.11.23"], "edges": [{"owner": "perry-ext-nodemailer", "manifest": "crates/perry-ext-nodemailer/Cargo.toml", "alias": "lettre", "kind": "normal", "target": null, "optional": false, "requirement": "^0.11", "default_features": false, "features": ["tokio1", "tokio1-rustls-tls", "smtp-transport", "builder", "hostname", "pool"], "direct_feature_activators": [], "resolved": ["lettre@0.11.23"], "reference_lines": 3, "references": ["crates/perry-ext-nodemailer/src/lib.rs:13", "crates/perry-ext-nodemailer/src/lib.rs:14", "crates/perry-ext-nodemailer/src/lib.rs:15"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "lettre", "kind": "normal", "target": null, "optional": true, "requirement": "^0.11", "default_features": false, "features": ["tokio1", "tokio1-rustls-tls", "smtp-transport", "builder", "hostname", "pool"], "direct_feature_activators": ["bundled-nodemailer"], "resolved": ["lettre@0.11.23"], "reference_lines": 3, "references": ["crates/perry-stdlib/src/nodemailer.rs:6", "crates/perry-stdlib/src/nodemailer.rs:7", "crates/perry-stdlib/src/nodemailer.rs:8"]}], "lock_closure_packages": 127, "lock_packages_lost_if_all_workspace_edges_removed": ["email-encoding@0.4.1", "email_address@0.2.9", "lettre@0.11.23", "quoted_printable@0.5.2"]}, -{"name": "libc", "versions": ["0.2.189"], "edges": [{"owner": "perry-audio-miniaudio", "manifest": "crates/perry-audio-miniaudio/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(any(target_os = \"linux\", target_os = \"windows\", target_os = \"android\"))", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 1, "references": ["crates/perry-audio-miniaudio/src/lib.rs:20"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "libc", "kind": "normal", "target": null, "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 1138, "references": ["crates/perry-runtime/src/arena/block.rs:231", "crates/perry-runtime/src/arena/quarantine.rs:209", "crates/perry-runtime/src/arena/quarantine.rs:389", "crates/perry-runtime/src/arena/quarantine.rs:392", "crates/perry-runtime/src/arena/quarantine.rs:405", "crates/perry-runtime/src/arena/quarantine.rs:430"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(unix)", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 19, "references": ["crates/perry-stdlib/src/readline/mod.rs:1276", "crates/perry-stdlib/src/readline/mod.rs:1281", "crates/perry-stdlib/src/readline/mod.rs:1282", "crates/perry-stdlib/src/readline/mod.rs:1294", "crates/perry-stdlib/src/readline/mod.rs:1295", "crates/perry-stdlib/src/readline/mod.rs:1296"]}, {"owner": "perry-ui-android", "manifest": "crates/perry-ui-android/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(target_os = \"android\")", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 2, "references": ["crates/perry-ui-android/src/ffi/issue_553.rs:295", "crates/perry-ui-android/src/screenshot.rs:230"]}, {"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 4, "references": ["crates/perry-ui-gtk4/src/app.rs:373", "crates/perry-ui-gtk4/src/audio.rs:398", "crates/perry-ui-gtk4/src/ffi/stubs_webview_attrtext_screenshot.rs:227", "crates/perry-ui-gtk4/src/screenshot.rs:63"]}, {"owner": "perry-ui-ios", "manifest": "crates/perry-ui-ios/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 28, "references": ["crates/perry-ui-ios/src/app.rs:941", "crates/perry-ui-ios/src/audio.rs:443", "crates/perry-ui-ios/src/audio.rs:447", "crates/perry-ui-ios/src/audio.rs:458", "crates/perry-ui-ios/src/crash_log.rs:85", "crates/perry-ui-ios/src/crash_log.rs:86"]}, {"owner": "perry-ui-macos", "manifest": "crates/perry-ui-macos/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(target_os = \"macos\")", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 32, "references": ["crates/perry-ui-macos/src/app.rs:670", "crates/perry-ui-macos/src/audio.rs:515", "crates/perry-ui-macos/src/audio.rs:518", "crates/perry-ui-macos/src/audio.rs:529", "crates/perry-ui-macos/src/crash_log.rs:90", "crates/perry-ui-macos/src/crash_log.rs:91"]}, {"owner": "perry-ui-tvos", "manifest": "crates/perry-ui-tvos/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(target_os = \"tvos\")", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 21, "references": ["crates/perry-ui-tvos/src/app.rs:535", "crates/perry-ui-tvos/src/audio.rs:443", "crates/perry-ui-tvos/src/audio.rs:447", "crates/perry-ui-tvos/src/audio.rs:458", "crates/perry-ui-tvos/src/crash_log.rs:85", "crates/perry-ui-tvos/src/crash_log.rs:86"]}, {"owner": "perry-ui-visionos", "manifest": "crates/perry-ui-visionos/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(target_os = \"visionos\")", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 22, "references": ["crates/perry-ui-visionos/src/audio.rs:443", "crates/perry-ui-visionos/src/audio.rs:447", "crates/perry-ui-visionos/src/audio.rs:458", "crates/perry-ui-visionos/src/crash_log.rs:85", "crates/perry-ui-visionos/src/crash_log.rs:86", "crates/perry-ui-visionos/src/crash_log.rs:87"]}, {"owner": "perry-ui-watchos", "manifest": "crates/perry-ui-watchos/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(target_os = \"watchos\")", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 6, "references": ["crates/perry-ui-watchos/src/audio.rs:181", "crates/perry-ui-watchos/src/audio.rs:184", "crates/perry-ui-watchos/src/audio.rs:195", "crates/perry-ui-watchos/src/notifications.rs:120", "crates/perry-ui-watchos/src/notifications.rs:149", "crates/perry-ui-watchos/src/system.rs:241"]}, {"owner": "perry-ui-windows-winui", "manifest": "crates/perry-ui-windows-winui/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 0, "references": []}, {"owner": "perry-ui-windows", "manifest": "crates/perry-ui-windows/Cargo.toml", "alias": "libc", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 5, "references": ["crates/perry-ui-windows/src/app.rs:1372", "crates/perry-ui-windows/src/ffi/system.rs:194", "crates/perry-ui-windows/src/screenshot.rs:117", "crates/perry-ui-windows/src/widgets/mod.rs:491", "crates/perry-ui-windows/src/widgets/mod.rs:587"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "libc", "kind": "normal", "target": null, "optional": false, "requirement": "^0.2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libc@0.2.189"], "reference_lines": 13, "references": ["crates/perry/src/commands/compile/strip_dedup.rs:118", "crates/perry/src/commands/compile/strip_dedup.rs:125", "crates/perry/src/commands/compile/strip_dedup.rs:131", "crates/perry/src/update_checker.rs:595", "crates/perry/tests/issue_9593_readline_escape_timeout.rs:68", "crates/perry/tests/issue_9593_readline_escape_timeout.rs:104"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "libmimalloc-sys", "versions": ["0.1.49"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "libmimalloc_sys", "kind": "normal", "target": "cfg(target_pointer_width = \"64\")", "optional": true, "requirement": "^0.1", "default_features": true, "features": ["extended"], "direct_feature_activators": ["alloc-mimalloc"], "resolved": ["libmimalloc-sys@0.1.49"], "reference_lines": 4, "references": ["crates/perry-runtime/src/gc/census.rs:650", "crates/perry-runtime/src/gc/cycle_malloc_trim.rs:107", "crates/perry-runtime/src/gc/tests/os_tag.rs:132", "crates/perry-runtime/src/mimalloc_os_tag.rs:66"]}], "lock_closure_packages": 40, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "libshumate", "versions": ["0.6.0"], "edges": [{"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "libshumate", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["libshumate@0.6.0"], "reference_lines": 10, "references": ["crates/perry-ui-gtk4/src/widgets/map_view.rs:18", "crates/perry-ui-gtk4/src/widgets/map_view.rs:25", "crates/perry-ui-gtk4/src/widgets/map_view.rs:31", "crates/perry-ui-gtk4/src/widgets/map_view.rs:32", "crates/perry-ui-gtk4/src/widgets/map_view.rs:35", "crates/perry-ui-gtk4/src/widgets/map_view.rs:40"]}], "lock_closure_packages": 79, "lock_packages_lost_if_all_workspace_edges_removed": ["libshumate-sys@0.6.0", "libshumate@0.6.0"]}, -{"name": "llvm-sys", "versions": ["221.0.1"], "edges": [{"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "llvm_sys", "kind": "normal", "target": "cfg(not(windows))", "optional": true, "requirement": "^221", "default_features": true, "features": [], "direct_feature_activators": ["llvm-inprocess"], "resolved": ["llvm-sys@221.0.1"], "reference_lines": 30, "references": ["crates/perry-codegen/src/dialect/eh.rs:181", "crates/perry-codegen/src/dialect/eh.rs:182", "crates/perry-codegen/src/dialect/eh.rs:192", "crates/perry-codegen/src/dialect/mod.rs:672", "crates/perry-codegen/src/dialect/mod.rs:674", "crates/perry-codegen/src/dialect/mod.rs:675"]}, {"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "llvm_sys", "kind": "normal", "target": "cfg(windows)", "optional": true, "requirement": "^221", "default_features": true, "features": ["no-llvm-linking"], "direct_feature_activators": ["llvm-inprocess"], "resolved": ["llvm-sys@221.0.1"], "reference_lines": 30, "references": ["crates/perry-codegen/src/dialect/eh.rs:181", "crates/perry-codegen/src/dialect/eh.rs:182", "crates/perry-codegen/src/dialect/eh.rs:192", "crates/perry-codegen/src/dialect/mod.rs:672", "crates/perry-codegen/src/dialect/mod.rs:674", "crates/perry-codegen/src/dialect/mod.rs:675"]}], "lock_closure_packages": 46, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "log", "versions": ["0.4.34"], "edges": [{"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "log", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["log@0.4.34"], "reference_lines": 10, "references": ["crates/perry-codegen/src/codegen/mod.rs:3730", "crates/perry-codegen/src/codegen/mod.rs:3767", "crates/perry-codegen/src/gc_map.rs:1345", "crates/perry-codegen/src/linker.rs:1030", "crates/perry-codegen/src/linker.rs:1829", "crates/perry-codegen/src/linker.rs:1847"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "log", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["log@0.4.34"], "reference_lines": 19, "references": ["crates/perry/src/commands/compile/cjs_wrap/tests.rs:811", "crates/perry/src/commands/compile/cjs_wrap/wrap.rs:1488", "crates/perry/src/commands/compile/cjs_wrap/wrap.rs:1490", "crates/perry/src/commands/compile/cjs_wrap/wrap.rs:1496", "crates/perry/src/commands/compile/collect_modules/finish.rs:302", "crates/perry/src/commands/compile/collect_modules/finish.rs:309"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "lru", "versions": ["0.18.3"], "edges": [{"owner": "perry-ext-lru-cache", "manifest": "crates/perry-ext-lru-cache/Cargo.toml", "alias": "lru", "kind": "normal", "target": null, "optional": false, "requirement": "^0.18", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["lru@0.18.3"], "reference_lines": 1, "references": ["crates/perry-ext-lru-cache/src/lib.rs:84"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "lru", "kind": "normal", "target": null, "optional": true, "requirement": "^0.18", "default_features": true, "features": [], "direct_feature_activators": ["bundled-lru-cache"], "resolved": ["lru@0.18.3"], "reference_lines": 1, "references": ["crates/perry-stdlib/src/lru_cache.rs:6"]}], "lock_closure_packages": 5, "lock_packages_lost_if_all_workspace_edges_removed": ["lru@0.18.3"]}, -{"name": "mach2", "versions": ["0.6.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "mach2", "kind": "normal", "target": "cfg(target_vendor = \"apple\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["mach2@0.6.0"], "reference_lines": 4, "references": ["crates/perry-runtime/src/gc/roots/stack_maps_sections.rs:25", "crates/perry-runtime/src/os.rs:355", "crates/perry-runtime/src/os.rs:1139", "crates/perry-runtime/src/os.rs:1181"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": ["mach2@0.6.0"]}, -{"name": "md-5", "versions": ["0.10.6", "0.11.0"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "md5", "kind": "normal", "target": null, "optional": false, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["md-5@0.11.0"], "reference_lines": 3, "references": ["crates/perry-container-compose/src/compose.rs:8", "crates/perry-container-compose/src/service.rs:1", "crates/perry-container-compose/src/testing/mock_backend.rs:128"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "md5", "kind": "normal", "target": null, "optional": true, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["md-5@0.11.0"], "reference_lines": 2, "references": ["crates/perry-stdlib/src/crypto/certificate.rs:198", "crates/perry-stdlib/src/crypto/util.rs:19"]}], "lock_closure_packages": 85, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "mimalloc", "versions": ["0.1.52"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "mimalloc", "kind": "normal", "target": "cfg(target_pointer_width = \"64\")", "optional": true, "requirement": "^0.1", "default_features": false, "features": [], "direct_feature_activators": ["alloc-mimalloc"], "resolved": ["mimalloc@0.1.52"], "reference_lines": 3, "references": ["crates/perry-runtime/src/lib.rs:34", "crates/perry-runtime/src/lib.rs:50", "crates/perry-runtime/src/lib.rs:51"]}], "lock_closure_packages": 41, "lock_packages_lost_if_all_workspace_edges_removed": ["mimalloc@0.1.52"]}, -{"name": "ml-kem", "versions": ["0.3.2"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "ml_kem", "kind": "normal", "target": null, "optional": true, "requirement": "^0.3.2", "default_features": true, "features": ["pkcs8"], "direct_feature_activators": ["crypto"], "resolved": ["ml-kem@0.3.2"], "reference_lines": 33, "references": ["crates/perry-stdlib/src/webcrypto/encapsulation.rs:2", "crates/perry-stdlib/src/webcrypto/encapsulation.rs:47", "crates/perry-stdlib/src/webcrypto/encapsulation.rs:51", "crates/perry-stdlib/src/webcrypto/encapsulation.rs:53", "crates/perry-stdlib/src/webcrypto/encapsulation.rs:59", "crates/perry-stdlib/src/webcrypto/encapsulation.rs:61"]}], "lock_closure_packages": 90, "lock_packages_lost_if_all_workspace_edges_removed": ["kem@0.3.0", "ml-kem@0.3.2", "module-lattice@0.2.3", "sha3@0.11.0"]}, -{"name": "mongodb", "versions": ["3.8.2"], "edges": [{"owner": "perry-ext-mongodb", "manifest": "crates/perry-ext-mongodb/Cargo.toml", "alias": "mongodb", "kind": "normal", "target": null, "optional": false, "requirement": "^3.7", "default_features": false, "features": ["bson-3", "compat-3-3-0", "rustls-tls", "dns-resolver"], "direct_feature_activators": [], "resolved": ["mongodb@3.8.2"], "reference_lines": 4, "references": ["crates/perry-ext-mongodb/src/lib.rs:38", "crates/perry-ext-mongodb/src/lib.rs:169", "crates/perry-ext-mongodb/src/lib.rs:218", "crates/perry-ext-mongodb/src/lib.rs:890"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "mongodb", "kind": "normal", "target": null, "optional": true, "requirement": "^3.7", "default_features": false, "features": ["bson-3", "compat-3-3-0", "rustls-tls", "dns-resolver"], "direct_feature_activators": ["bundled-mongodb"], "resolved": ["mongodb@3.8.2"], "reference_lines": 5, "references": ["crates/perry-stdlib/src/lib.rs:297", "crates/perry-stdlib/src/lib.rs:299", "crates/perry-stdlib/src/mongodb.rs:11", "crates/perry-stdlib/src/mongodb.rs:114", "crates/perry-stdlib/src/mongodb.rs:202"]}], "lock_closure_packages": 270, "lock_packages_lost_if_all_workspace_edges_removed": ["const-random-macro@0.1.16", "const-random@0.1.18", "core-foundation@0.9.4", "darling@0.23.0", "darling_core@0.23.0", "darling_macro@0.23.0", "derive-syn-parse@0.2.0", "derive-where@1.6.1", "hickory-net@0.26.1", "hickory-resolver@0.26.1", "ipconfig@0.3.4", "macro_magic@0.5.1", "macro_magic_core@0.5.1", "macro_magic_core_macros@0.5.1", "macro_magic_macros@0.5.1", "moka@0.12.15", "mongocrypt-sys@0.1.6+1.18.2", "mongocrypt@0.4.0", "mongodb-internal-macros@3.8.2", "mongodb@3.8.2", "ndk-context@0.1.1", "rustc_version_runtime@0.3.0", "serde_with@3.21.0", "serde_with_macros@3.21.0", "system-configuration-sys@0.6.0", "system-configuration@0.7.0", "tagptr@0.2.0", "take_mut@0.2.2", "tiny-keccak@2.0.2", "typed-builder-macro@0.22.0", "typed-builder@0.22.0", "widestring@1.2.1", "windows-registry@0.6.1"]}, -{"name": "mpris-server", "versions": ["0.10.0"], "edges": [{"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "mpris_server", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^0.10", "default_features": true, "features": ["tokio"], "direct_feature_activators": [], "resolved": ["mpris-server@0.10.0"], "reference_lines": 1, "references": ["crates/perry-ui-gtk4/src/media_playback.rs:561"]}], "lock_closure_packages": 148, "lock_packages_lost_if_all_workspace_edges_removed": ["mpris-server@0.10.0", "trait-variant@0.1.2"]}, -{"name": "nanoid", "versions": ["0.5.0"], "edges": [{"owner": "perry-ext-nanoid", "manifest": "crates/perry-ext-nanoid/Cargo.toml", "alias": "nanoid", "kind": "normal", "target": null, "optional": false, "requirement": "^0.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["nanoid@0.5.0"], "reference_lines": 3, "references": ["crates/perry-ext-nanoid/src/lib.rs:8", "crates/perry-ext-nanoid/src/lib.rs:14", "crates/perry-ext-nanoid/src/lib.rs:25"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "nanoid", "kind": "normal", "target": null, "optional": true, "requirement": "^0.5", "default_features": true, "features": [], "direct_feature_activators": ["bundled-nanoid"], "resolved": ["nanoid@0.5.0"], "reference_lines": 5, "references": ["crates/perry-stdlib/src/lib.rs:436", "crates/perry-stdlib/src/lib.rs:438", "crates/perry-stdlib/src/nanoid.rs:6", "crates/perry-stdlib/src/nanoid.rs:15", "crates/perry-stdlib/src/nanoid.rs:27"]}], "lock_closure_packages": 41, "lock_packages_lost_if_all_workspace_edges_removed": ["nanoid@0.5.0"]}, -{"name": "node-semver", "versions": ["2.2.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "node_semver", "kind": "normal", "target": null, "optional": true, "requirement": "^2.2.0", "default_features": true, "features": [], "direct_feature_activators": ["bun-cli-utils"], "resolved": ["node-semver@2.2.0"], "reference_lines": 4, "references": ["crates/perry-runtime/src/bun_compat/cli_utils.rs:195", "crates/perry-runtime/src/bun_compat/cli_utils.rs:202", "crates/perry-runtime/src/bun_compat/cli_utils.rs:223", "crates/perry-runtime/src/bun_compat/cli_utils.rs:230"]}], "lock_closure_packages": 19, "lock_packages_lost_if_all_workspace_edges_removed": ["miette-derive@7.6.0", "miette@7.6.0", "node-semver@2.2.0", "unicode-width@0.1.14"]}, -{"name": "notify", "versions": ["6.1.1"], "edges": [{"owner": "perry-ext-parcel-watcher", "manifest": "crates/perry-ext-parcel-watcher/Cargo.toml", "alias": "notify", "kind": "normal", "target": null, "optional": false, "requirement": "^6.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["notify@6.1.1"], "reference_lines": 3, "references": ["crates/perry-ext-parcel-watcher/src/lib.rs:8", "crates/perry-ext-parcel-watcher/src/lib.rs:9", "crates/perry-ext-parcel-watcher/src/lib.rs:730"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "notify", "kind": "normal", "target": "cfg(not(target_os = \"macos\"))", "optional": false, "requirement": "^6.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["notify@6.1.1"], "reference_lines": 16, "references": ["crates/perry-runtime/src/fs/dir_glob_watch/watch_backend.rs:352", "crates/perry-runtime/src/fs/dir_glob_watch/watch_backend.rs:353", "crates/perry-runtime/src/fs/dir_glob_watch/watch_backend.rs:397", "crates/perry-runtime/src/fs/dir_glob_watch/watch_backend.rs:398", "crates/perry-runtime/src/fs/dir_glob_watch/watch_backend.rs:400", "crates/perry-runtime/src/fs/dir_glob_watch/watch_backend.rs:401"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "notify", "kind": "normal", "target": null, "optional": true, "requirement": "^6.1", "default_features": true, "features": [], "direct_feature_activators": ["watch-cli"], "resolved": ["notify@6.1.1"], "reference_lines": 11, "references": ["crates/perry/src/commands/dev.rs:29", "crates/perry/src/commands/dev.rs:141", "crates/perry/src/commands/dev.rs:143", "crates/perry/src/commands/dev.rs:247", "crates/perry/src/commands/dev.rs:446", "crates/perry/src/commands/dev.rs:449"]}], "lock_closure_packages": 36, "lock_packages_lost_if_all_workspace_edges_removed": ["bitflags@1.3.2", "fsevent-sys@4.1.0", "inotify-sys@0.1.5", "inotify@0.9.6", "kqueue-sys@1.1.2", "kqueue@1.2.0", "mio@0.8.11", "notify@6.1.1", "windows-sys@0.48.0", "windows-targets@0.48.5", "windows_aarch64_gnullvm@0.48.5", "windows_aarch64_msvc@0.48.5", "windows_i686_gnu@0.48.5", "windows_i686_msvc@0.48.5", "windows_x86_64_gnu@0.48.5", "windows_x86_64_gnullvm@0.48.5", "windows_x86_64_msvc@0.48.5"]}, -{"name": "objc2", "versions": ["0.6.4"], "edges": [{"owner": "perry-ext-ads", "manifest": "crates/perry-ext-ads/Cargo.toml", "alias": "objc2", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": true, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": ["google-ads"], "resolved": [], "reference_lines": 4, "references": ["crates/perry-ext-ads/src/ios_real.rs:39", "crates/perry-ext-ads/src/ios_real.rs:40", "crates/perry-ext-ads/src/ios_real.rs:41", "crates/perry-ext-ads/src/ios_real.rs:216"]}, {"owner": "perry-ui-ios", "manifest": "crates/perry-ui-ios/Cargo.toml", "alias": "objc2", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["objc2@0.6.4"], "reference_lines": 608, "references": ["crates/perry-ui-ios/src/adaptive_layout.rs:8", "crates/perry-ui-ios/src/adaptive_layout.rs:9", "crates/perry-ui-ios/src/app.rs:1", "crates/perry-ui-ios/src/app.rs:2", "crates/perry-ui-ios/src/app.rs:3", "crates/perry-ui-ios/src/app.rs:311"]}, {"owner": "perry-ui-macos", "manifest": "crates/perry-ui-macos/Cargo.toml", "alias": "objc2", "kind": "normal", "target": "cfg(target_os = \"macos\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["objc2@0.6.4"], "reference_lines": 557, "references": ["crates/perry-ui-macos/src/app.rs:3", "crates/perry-ui-macos/src/app.rs:4", "crates/perry-ui-macos/src/app.rs:5", "crates/perry-ui-macos/src/app.rs:110", "crates/perry-ui-macos/src/app.rs:111", "crates/perry-ui-macos/src/app.rs:115"]}, {"owner": "perry-ui-tvos", "manifest": "crates/perry-ui-tvos/Cargo.toml", "alias": "objc2", "kind": "normal", "target": "cfg(target_os = \"tvos\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["objc2@0.6.4"], "reference_lines": 458, "references": ["crates/perry-ui-tvos/src/app.rs:1", "crates/perry-ui-tvos/src/app.rs:2", "crates/perry-ui-tvos/src/app.rs:3", "crates/perry-ui-tvos/src/app.rs:197", "crates/perry-ui-tvos/src/app.rs:221", "crates/perry-ui-tvos/src/app.rs:833"]}, {"owner": "perry-ui-visionos", "manifest": "crates/perry-ui-visionos/Cargo.toml", "alias": "objc2", "kind": "normal", "target": "cfg(target_os = \"visionos\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["objc2@0.6.4"], "reference_lines": 528, "references": ["crates/perry-ui-visionos/src/app.rs:1", "crates/perry-ui-visionos/src/app.rs:2", "crates/perry-ui-visionos/src/app.rs:3", "crates/perry-ui-visionos/src/app.rs:89", "crates/perry-ui-visionos/src/app.rs:643", "crates/perry-ui-visionos/src/audio.rs:1"]}, {"owner": "perry-ui-watchos", "manifest": "crates/perry-ui-watchos/Cargo.toml", "alias": "objc2", "kind": "normal", "target": "cfg(target_os = \"watchos\")", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["objc2@0.6.4"], "reference_lines": 90, "references": ["crates/perry-ui-watchos/src/audio.rs:1", "crates/perry-ui-watchos/src/audio.rs:2", "crates/perry-ui-watchos/src/audio.rs:3", "crates/perry-ui-watchos/src/audio.rs:77", "crates/perry-ui-watchos/src/audio.rs:84", "crates/perry-ui-watchos/src/audio_playback.rs:12"]}], "lock_closure_packages": 2, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "objc2-app-kit", "versions": ["0.3.2"], "edges": [{"owner": "perry-ui-macos", "manifest": "crates/perry-ui-macos/Cargo.toml", "alias": "objc2_app_kit", "kind": "normal", "target": "cfg(target_os = \"macos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["NSApplication", "NSWindow", "NSView", "NSButton", "NSTextField", "NSTextFieldCell", "NSActionCell", "NSCell", "NSStackView", "NSControl", "NSText", "NSRunningApplication", "NSResponder", "NSLayoutConstraint", "NSUserInterfaceLayout", "NSGraphics", "NSMenu", "NSMenuItem", "NSEvent", "NSBox", "NSSwitch", "NSSlider", "NSScrollView", "NSClipView", "NSPasteboard", "NSColor", "NSFont", "NSSavePanel", "NSOpenPanel", "NSSecureTextField", "NSProgressIndicator", "NSPopUpButton", "NSImage", "NSImageView", "NSStatusBar", "NSStatusItem", "NSStatusBarButton"], "direct_feature_activators": [], "resolved": ["objc2-app-kit@0.3.2"], "reference_lines": 74, "references": ["crates/perry-ui-macos/src/app.rs:6", "crates/perry-ui-macos/src/app.rs:1888", "crates/perry-ui-macos/src/clipboard.rs:4", "crates/perry-ui-macos/src/drag_drop.rs:31", "crates/perry-ui-macos/src/file_dialog.rs:3", "crates/perry-ui-macos/src/image_picker.rs:7"]}], "lock_closure_packages": 23, "lock_packages_lost_if_all_workspace_edges_removed": ["objc2-app-kit@0.3.2", "objc2-core-video@0.3.2"]}, -{"name": "objc2-core-foundation", "versions": ["0.3.2"], "edges": [{"owner": "perry-ui-ios", "manifest": "crates/perry-ui-ios/Cargo.toml", "alias": "objc2_core_foundation", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["CFCGTypes"], "direct_feature_activators": [], "resolved": ["objc2-core-foundation@0.3.2"], "reference_lines": 144, "references": ["crates/perry-ui-ios/src/adaptive_layout.rs:10", "crates/perry-ui-ios/src/app.rs:1055", "crates/perry-ui-ios/src/app.rs:1071", "crates/perry-ui-ios/src/app.rs:1174", "crates/perry-ui-ios/src/app.rs:1176", "crates/perry-ui-ios/src/app.rs:1183"]}, {"owner": "perry-ui-macos", "manifest": "crates/perry-ui-macos/Cargo.toml", "alias": "objc2_core_foundation", "kind": "normal", "target": "cfg(target_os = \"macos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["CFCGTypes"], "direct_feature_activators": [], "resolved": ["objc2-core-foundation@0.3.2"], "reference_lines": 177, "references": ["crates/perry-ui-macos/src/app.rs:10", "crates/perry-ui-macos/src/drag_drop.rs:32", "crates/perry-ui-macos/src/ffi.rs:68", "crates/perry-ui-macos/src/ffi.rs:69", "crates/perry-ui-macos/src/lib_ffi/system.rs:383", "crates/perry-ui-macos/src/lib_ffi/system.rs:384"]}, {"owner": "perry-ui-tvos", "manifest": "crates/perry-ui-tvos/Cargo.toml", "alias": "objc2_core_foundation", "kind": "normal", "target": "cfg(target_os = \"tvos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["CFCGTypes"], "direct_feature_activators": [], "resolved": ["objc2-core-foundation@0.3.2"], "reference_lines": 91, "references": ["crates/perry-ui-tvos/src/app.rs:649", "crates/perry-ui-tvos/src/app.rs:665", "crates/perry-ui-tvos/src/app.rs:768", "crates/perry-ui-tvos/src/app.rs:770", "crates/perry-ui-tvos/src/app.rs:777", "crates/perry-ui-tvos/src/app.rs:782"]}, {"owner": "perry-ui-visionos", "manifest": "crates/perry-ui-visionos/Cargo.toml", "alias": "objc2_core_foundation", "kind": "normal", "target": "cfg(target_os = \"visionos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["CFCGTypes"], "direct_feature_activators": [], "resolved": ["objc2-core-foundation@0.3.2"], "reference_lines": 137, "references": ["crates/perry-ui-visionos/src/app.rs:459", "crates/perry-ui-visionos/src/app.rs:475", "crates/perry-ui-visionos/src/app.rs:578", "crates/perry-ui-visionos/src/app.rs:580", "crates/perry-ui-visionos/src/app.rs:587", "crates/perry-ui-visionos/src/app.rs:592"]}], "lock_closure_packages": 13, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "objc2-foundation", "versions": ["0.3.2"], "edges": [{"owner": "perry-ext-ads", "manifest": "crates/perry-ext-ads/Cargo.toml", "alias": "objc2_foundation", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": true, "requirement": "^0.3", "default_features": true, "features": [], "direct_feature_activators": ["google-ads"], "resolved": [], "reference_lines": 1, "references": ["crates/perry-ext-ads/src/ios_real.rs:42"]}, {"owner": "perry-ui-ios", "manifest": "crates/perry-ui-ios/Cargo.toml", "alias": "objc2_foundation", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["NSString", "NSThread", "NSRunLoop", "NSURL", "NSArray", "NSError"], "direct_feature_activators": [], "resolved": ["objc2-foundation@0.3.2"], "reference_lines": 105, "references": ["crates/perry-ui-ios/src/app.rs:4", "crates/perry-ui-ios/src/audio.rs:139", "crates/perry-ui-ios/src/audio_playback.rs:202", "crates/perry-ui-ios/src/audio_playback.rs:282", "crates/perry-ui-ios/src/audio_playback.rs:283", "crates/perry-ui-ios/src/audio_playback.rs:287"]}, {"owner": "perry-ui-macos", "manifest": "crates/perry-ui-macos/Cargo.toml", "alias": "objc2_foundation", "kind": "normal", "target": "cfg(target_os = \"macos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["NSString", "NSThread", "NSRunLoop", "NSGeometry"], "direct_feature_activators": [], "resolved": ["objc2-foundation@0.3.2"], "reference_lines": 110, "references": ["crates/perry-ui-macos/src/app.rs:11", "crates/perry-ui-macos/src/audio_playback.rs:199", "crates/perry-ui-macos/src/audio_playback.rs:279", "crates/perry-ui-macos/src/audio_playback.rs:280", "crates/perry-ui-macos/src/audio_playback.rs:284", "crates/perry-ui-macos/src/audio_playback.rs:297"]}, {"owner": "perry-ui-tvos", "manifest": "crates/perry-ui-tvos/Cargo.toml", "alias": "objc2_foundation", "kind": "normal", "target": "cfg(target_os = \"tvos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["NSString", "NSThread", "NSRunLoop", "NSURL", "NSArray", "NSError"], "direct_feature_activators": [], "resolved": ["objc2-foundation@0.3.2"], "reference_lines": 67, "references": ["crates/perry-ui-tvos/src/app.rs:4", "crates/perry-ui-tvos/src/audio.rs:139", "crates/perry-ui-tvos/src/audio_playback.rs:202", "crates/perry-ui-tvos/src/audio_playback.rs:282", "crates/perry-ui-tvos/src/audio_playback.rs:283", "crates/perry-ui-tvos/src/audio_playback.rs:287"]}, {"owner": "perry-ui-visionos", "manifest": "crates/perry-ui-visionos/Cargo.toml", "alias": "objc2_foundation", "kind": "normal", "target": "cfg(target_os = \"visionos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["NSString", "NSThread", "NSRunLoop", "NSURL", "NSArray", "NSError"], "direct_feature_activators": [], "resolved": ["objc2-foundation@0.3.2"], "reference_lines": 92, "references": ["crates/perry-ui-visionos/src/app.rs:4", "crates/perry-ui-visionos/src/audio.rs:139", "crates/perry-ui-visionos/src/audio_playback.rs:202", "crates/perry-ui-visionos/src/audio_playback.rs:282", "crates/perry-ui-visionos/src/audio_playback.rs:283", "crates/perry-ui-visionos/src/audio_playback.rs:287"]}, {"owner": "perry-ui-watchos", "manifest": "crates/perry-ui-watchos/Cargo.toml", "alias": "objc2_foundation", "kind": "normal", "target": "cfg(target_os = \"watchos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["NSString"], "direct_feature_activators": [], "resolved": ["objc2-foundation@0.3.2"], "reference_lines": 26, "references": ["crates/perry-ui-watchos/src/audio.rs:46", "crates/perry-ui-watchos/src/audio.rs:47", "crates/perry-ui-watchos/src/audio_playback.rs:202", "crates/perry-ui-watchos/src/audio_playback.rs:282", "crates/perry-ui-watchos/src/audio_playback.rs:283", "crates/perry-ui-watchos/src/audio_playback.rs:287"]}], "lock_closure_packages": 14, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "objc2-ui-kit", "versions": ["0.3.2"], "edges": [{"owner": "perry-ui-ios", "manifest": "crates/perry-ui-ios/Cargo.toml", "alias": "objc2_ui_kit", "kind": "normal", "target": "cfg(target_os = \"ios\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["UIApplication", "UIWindow", "UIWindowScene", "UIScene", "UISceneSession", "UISceneConfiguration", "UIView", "UIViewController", "UILabel", "UIButton", "UIButtonConfiguration", "UIStackView", "UISwitch", "UISlider", "UIScrollView", "UITextField", "UITextView", "UIColor", "UIFont", "UIControl", "UIGeometry", "UIPasteboard", "UIResponder", "UIScreen"], "direct_feature_activators": [], "resolved": ["objc2-ui-kit@0.3.2"], "reference_lines": 45, "references": ["crates/perry-ui-ios/src/adaptive_layout.rs:11", "crates/perry-ui-ios/src/app.rs:5", "crates/perry-ui-ios/src/camera.rs:10", "crates/perry-ui-ios/src/ffi/widgets_basic.rs:27", "crates/perry-ui-ios/src/widgets/adbanner.rs:20", "crates/perry-ui-ios/src/widgets/attributed_text.rs:9"]}, {"owner": "perry-ui-tvos", "manifest": "crates/perry-ui-tvos/Cargo.toml", "alias": "objc2_ui_kit", "kind": "normal", "target": "cfg(target_os = \"tvos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["UIApplication", "UIWindow", "UIWindowScene", "UIScene", "UISceneSession", "UISceneConfiguration", "UIView", "UIViewController", "UILabel", "UIButton", "UIButtonConfiguration", "UIStackView", "UISwitch", "UISlider", "UIScrollView", "UITextField", "UITextView", "UIColor", "UIFont", "UIControl", "UIResponder", "UIScreen"], "direct_feature_activators": [], "resolved": ["objc2-ui-kit@0.3.2"], "reference_lines": 29, "references": ["crates/perry-ui-tvos/src/app.rs:5", "crates/perry-ui-tvos/src/lib.rs:89", "crates/perry-ui-tvos/src/widgets/attributed_text.rs:9", "crates/perry-ui-tvos/src/widgets/bloomview.rs:12", "crates/perry-ui-tvos/src/widgets/bottom_nav.rs:12", "crates/perry-ui-tvos/src/widgets/button.rs:5"]}, {"owner": "perry-ui-visionos", "manifest": "crates/perry-ui-visionos/Cargo.toml", "alias": "objc2_ui_kit", "kind": "normal", "target": "cfg(target_os = \"visionos\")", "optional": false, "requirement": "^0.3", "default_features": true, "features": ["UIApplication", "UIWindow", "UIWindowScene", "UIScene", "UISceneSession", "UISceneConfiguration", "UIView", "UIViewController", "UILabel", "UIButton", "UIButtonConfiguration", "UIStackView", "UISwitch", "UISlider", "UIScrollView", "UITextField", "UITextView", "UIColor", "UIFont", "UIControl", "UIPasteboard", "UIResponder", "UIScreen"], "direct_feature_activators": [], "resolved": ["objc2-ui-kit@0.3.2"], "reference_lines": 41, "references": ["crates/perry-ui-visionos/src/app.rs:5", "crates/perry-ui-visionos/src/camera.rs:10", "crates/perry-ui-visionos/src/ffi_core.rs:33", "crates/perry-ui-visionos/src/widgets/attributed_text.rs:9", "crates/perry-ui-visionos/src/widgets/bloomview.rs:13", "crates/perry-ui-visionos/src/widgets/bottom_nav.rs:12"]}], "lock_closure_packages": 24, "lock_packages_lost_if_all_workspace_edges_removed": ["objc2-core-location@0.3.2", "objc2-ui-kit@0.3.2", "objc2-user-notifications@0.3.2"]}, -{"name": "object", "versions": ["0.37.3"], "edges": [{"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "object", "kind": "normal", "target": null, "optional": false, "requirement": "^0.37", "default_features": false, "features": ["read", "std"], "direct_feature_activators": [], "resolved": ["object@0.37.3"], "reference_lines": 16, "references": ["crates/perry/src/commands/compile/collect_modules/crypto_ns.rs:14", "crates/perry/src/commands/compile/collect_modules/native_addon.rs:13", "crates/perry/src/commands/compile/collect_modules/native_addon.rs:133", "crates/perry/src/commands/compile/resolve/subpath_imports.rs:330", "crates/perry/src/commands/compile/size_report.rs:33", "crates/perry/src/commands/compile/size_report.rs:212"]}], "lock_closure_packages": 2, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "once_cell", "versions": ["1.21.4"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "once_cell", "kind": "normal", "target": null, "optional": false, "requirement": "^1.19", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["once_cell@1.21.4"], "reference_lines": 3, "references": ["crates/perry-container-compose/src/compose.rs:27", "crates/perry-container-compose/src/compose.rs:28", "crates/perry-container-compose/src/workload.rs:7"]}, {"owner": "perry-ffi", "manifest": "crates/perry-ffi/Cargo.toml", "alias": "once_cell", "kind": "normal", "target": null, "optional": false, "requirement": "^1.19", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["once_cell@1.21.4"], "reference_lines": 1, "references": ["crates/perry-ffi/src/handle.rs:76"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "once_cell", "kind": "normal", "target": null, "optional": false, "requirement": "^1.19", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["once_cell@1.21.4"], "reference_lines": 5, "references": ["crates/perry-stdlib/src/common/async_bridge.rs:20", "crates/perry-stdlib/src/common/handle.rs:11", "crates/perry-stdlib/src/fetch/abort_bridge.rs:24", "crates/perry-stdlib/src/framework/server.rs:350", "crates/perry-stdlib/src/webcrypto/util.rs:17"]}], "lock_closure_packages": 3, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "p12", "versions": ["0.6.3"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "p12", "kind": "normal", "target": null, "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["p12@0.6.3"], "reference_lines": 5, "references": ["crates/perry-ext-http/src/tls_client.rs:901", "crates/perry-ext-http/src/tls_client.rs:906", "crates/perry-ext-http/src/tls_client.rs:923", "crates/perry-ext-http/src/tls_client.rs:926", "crates/perry-ext-http/src/tls_client.rs:968"]}], "lock_closure_packages": 58, "lock_packages_lost_if_all_workspace_edges_removed": ["des@0.8.1", "p12@0.6.3", "rc2@0.8.1", "yasna@0.5.2"]}, -{"name": "p256", "versions": ["0.13.2"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "p256", "kind": "normal", "target": null, "optional": true, "requirement": "^0.13", "default_features": false, "features": ["pkcs8", "pem", "ecdsa", "ecdh"], "direct_feature_activators": ["bundled-jsonwebtoken", "crypto"], "resolved": ["p256@0.13.2"], "reference_lines": 23, "references": ["crates/perry-stdlib/src/crypto/kdf.rs:1182", "crates/perry-stdlib/src/crypto/kdf.rs:1183", "crates/perry-stdlib/src/crypto/sign.rs:321", "crates/perry-stdlib/src/crypto/sign.rs:472", "crates/perry-stdlib/src/crypto/util.rs:20", "crates/perry-stdlib/src/crypto/util.rs:21"]}], "lock_closure_packages": 73, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "p384", "versions": ["0.13.1"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "p384", "kind": "normal", "target": null, "optional": true, "requirement": "^0.13", "default_features": false, "features": ["pkcs8", "pem", "ecdsa", "ecdh"], "direct_feature_activators": ["crypto"], "resolved": ["p384@0.13.1"], "reference_lines": 3, "references": ["crates/perry-stdlib/src/webcrypto/util.rs:28", "crates/perry-stdlib/src/webcrypto/util.rs:29", "crates/perry-stdlib/src/webcrypto/util.rs:33"]}], "lock_closure_packages": 73, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "p521", "versions": ["0.13.3"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "p521", "kind": "normal", "target": null, "optional": true, "requirement": "^0.13", "default_features": false, "features": ["pkcs8", "pem", "ecdsa", "ecdh"], "direct_feature_activators": ["crypto"], "resolved": ["p521@0.13.3"], "reference_lines": 3, "references": ["crates/perry-stdlib/src/webcrypto/util.rs:34", "crates/perry-stdlib/src/webcrypto/util.rs:35", "crates/perry-stdlib/src/webcrypto/util.rs:39"]}], "lock_closure_packages": 73, "lock_packages_lost_if_all_workspace_edges_removed": ["p521@0.13.3"]}, -{"name": "pbkdf2", "versions": ["0.12.2", "0.13.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "pbkdf2", "kind": "normal", "target": null, "optional": true, "requirement": "^0.13", "default_features": true, "features": ["hmac"], "direct_feature_activators": ["crypto"], "resolved": ["pbkdf2@0.13.0"], "reference_lines": 6, "references": ["crates/perry-stdlib/src/crypto/kdf.rs:20", "crates/perry-stdlib/src/crypto/kdf.rs:792", "crates/perry-stdlib/src/webcrypto/hmac.rs:614", "crates/perry-stdlib/src/webcrypto/hmac.rs:615", "crates/perry-stdlib/src/webcrypto/hmac.rs:616", "crates/perry-stdlib/src/webcrypto/hmac.rs:617"]}], "lock_closure_packages": 87, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "pem", "versions": ["3.0.6", "4.0.0"], "edges": [{"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "pem", "kind": "normal", "target": null, "optional": false, "requirement": "^4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["pem@4.0.0"], "reference_lines": 2, "references": ["crates/perry-ext-node-forge/src/crypto.rs:476", "crates/perry-ext-node-forge/src/lib.rs:616"]}], "lock_closure_packages": 10, "lock_packages_lost_if_all_workspace_edges_removed": ["pem@4.0.0"]}, -{"name": "perex", "versions": ["0.1.4"], "edges": [{"owner": "perry-perex", "manifest": "crates/perry-perex/Cargo.toml", "alias": "perex", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["perex@0.1.4"], "reference_lines": 7, "references": ["crates/perry-perex/src/lib.rs:14", "crates/perry-perex/src/lib.rs:18", "crates/perry-perex/src/lib.rs:19", "crates/perry-perex/src/lib.rs:23", "crates/perry-perex/src/lib.rs:24", "crates/perry-perex/src/lib.rs:25"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "perex", "kind": "normal", "target": null, "optional": true, "requirement": "^0.1.4", "default_features": true, "features": [], "direct_feature_activators": ["regex-engine"], "resolved": ["perex@0.1.4"], "reference_lines": 94, "references": ["crates/perry-runtime/src/fs/dir_glob_watch/glob.rs:629", "crates/perry-runtime/src/gc/tests/runtime_roots/perex_cross_call.rs:11", "crates/perry-runtime/src/gc/tests/runtime_roots/perex_cross_call.rs:42", "crates/perry-runtime/src/gc/tests/runtime_roots/perex_cross_call.rs:46", "crates/perry-runtime/src/gc/tests/runtime_roots/perex_dispatch.rs:10", "crates/perry-runtime/src/gc/tests/runtime_roots/perex_dispatch.rs:370"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": ["perex@0.1.4"]}, -{"name": "pkcs5", "versions": ["0.7.1"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "pkcs5", "kind": "normal", "target": null, "optional": false, "requirement": "^0.7", "default_features": true, "features": ["alloc", "pbes2"], "direct_feature_activators": [], "resolved": ["pkcs5@0.7.1"], "reference_lines": 2, "references": ["crates/perry-ext-http/src/tls_client.rs:918", "crates/perry-ext-http/src/tls_client.rs:935"]}], "lock_closure_packages": 60, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "png", "versions": ["0.18.1"], "edges": [{"owner": "perry-ui-windows", "manifest": "crates/perry-ui-windows/Cargo.toml", "alias": "png", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^0.18", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["png@0.18.1"], "reference_lines": 5, "references": ["crates/perry-ui-windows/src/screenshot.rs:137", "crates/perry-ui-windows/src/screenshot.rs:138", "crates/perry-ui-windows/src/screenshot.rs:139", "crates/perry-ui-windows/src/screenshot.rs:142", "crates/perry-ui-windows/src/widgets/pdf_view.rs:625"]}], "lock_closure_packages": 17, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "printpdf", "versions": ["0.10.1"], "edges": [{"owner": "perry-ext-pdf", "manifest": "crates/perry-ext-pdf/Cargo.toml", "alias": "printpdf", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": false, "features": [], "direct_feature_activators": [], "resolved": ["printpdf@0.10.1"], "reference_lines": 1, "references": ["crates/perry-ext-pdf/src/lib.rs:46"]}], "lock_closure_packages": 124, "lock_packages_lost_if_all_workspace_edges_removed": ["aliasable@0.1.3", "allsorts-azul@0.16.5", "ecb@0.1.2", "glyph-names@0.2.0", "heck@0.4.1", "lopdf@0.39.0", "nom_locate@5.0.0", "ouroboros@0.17.2", "ouroboros_macro@0.17.2", "pathfinder_geometry@0.5.1", "pathfinder_simd@0.5.6", "printpdf@0.10.1", "proc-macro-error-attr@1.0.4", "proc-macro-error@1.0.4", "rangemap@1.7.1", "rustc-hash@1.1.0", "syn@1.0.109", "ttf-parser@0.25.1", "ucd-trie@0.1.7", "unicode-canonical-combining-class@1.0.0", "unicode-general-category@1.1.0", "unicode-joining-type@1.0.0"]}, -{"name": "proptest", "versions": ["1.11.0"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "proptest", "kind": "dev", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["proptest@1.11.0"], "reference_lines": 31, "references": ["crates/perry-container-compose/src/yaml.rs:505", "crates/perry-container-compose/src/yaml.rs:508", "crates/perry-container-compose/tests/compose_tests.rs:4", "crates/perry-container-compose/tests/compose_tests.rs:139", "crates/perry-container-compose/tests/fixtures_tests.rs:83", "crates/perry-container-compose/tests/fixtures_tests.rs:85"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "proptest", "kind": "dev", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["proptest@1.11.0"], "reference_lines": 13, "references": ["crates/perry-stdlib/tests/container_props.rs:9", "crates/perry-stdlib/tests/container_props.rs:20", "crates/perry-stdlib/tests/container_props.rs:21", "crates/perry-stdlib/tests/container_props.rs:22", "crates/perry-stdlib/tests/container_props.rs:23", "crates/perry-stdlib/tests/container_props.rs:28"]}], "lock_closure_packages": 91, "lock_packages_lost_if_all_workspace_edges_removed": ["bit-set@0.8.0", "bit-vec@0.8.0", "proptest@1.11.0", "quick-error@1.2.3", "rand_xorshift@0.4.0", "rusty-fork@0.3.1", "unarray@0.1.4", "wait-timeout@0.2.1"]}, -{"name": "qrcodegen", "versions": ["1.8.0"], "edges": [{"owner": "perry-ui-windows", "manifest": "crates/perry-ui-windows/Cargo.toml", "alias": "qrcodegen", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^1.8", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["qrcodegen@1.8.0"], "reference_lines": 1, "references": ["crates/perry-ui-windows/src/widgets/qrcode.rs:62"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": ["qrcodegen@1.8.0"]}, -{"name": "rand", "versions": ["0.10.2", "0.8.7", "0.9.4"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "rand", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rand@0.10.2"], "reference_lines": 2, "references": ["crates/perry-container-compose/src/service.rs:8", "crates/perry-container-compose/src/service.rs:26"]}, {"owner": "perry-ext-ethers", "manifest": "crates/perry-ext-ethers/Cargo.toml", "alias": "rand", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rand@0.10.2"], "reference_lines": 1, "references": ["crates/perry-ext-ethers/src/lib.rs:41"]}, {"owner": "perry-ext-nanoid", "manifest": "crates/perry-ext-nanoid/Cargo.toml", "alias": "rand", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rand@0.10.2"], "reference_lines": 2, "references": ["crates/perry-ext-nanoid/src/lib.rs:55", "crates/perry-ext-nanoid/src/lib.rs:56"]}, {"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "rand", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rand@0.10.2"], "reference_lines": 1, "references": ["crates/perry-ext-node-forge/src/crypto.rs:144"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "rand", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rand@0.10.2"], "reference_lines": 7, "references": ["crates/perry-runtime/src/buffer/mutate.rs:32", "crates/perry-runtime/src/buffer/mutate.rs:41", "crates/perry-runtime/src/math.rs:3", "crates/perry-runtime/src/math.rs:288", "crates/perry-runtime/src/object/native_module_crypto_random.rs:75", "crates/perry-runtime/src/object/native_module_crypto_random.rs:93"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "rand", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rand@0.10.2"], "reference_lines": 19, "references": ["crates/perry-stdlib/src/container/capability.rs:30", "crates/perry-stdlib/src/crypto/prime.rs:201", "crates/perry-stdlib/src/crypto/random.rs:66", "crates/perry-stdlib/src/crypto/random.rs:118", "crates/perry-stdlib/src/crypto/random.rs:255", "crates/perry-stdlib/src/crypto/random.rs:525"]}, {"owner": "perry-ui-geisterhand", "manifest": "crates/perry-ui-geisterhand/Cargo.toml", "alias": "rand", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rand@0.10.2"], "reference_lines": 6, "references": ["crates/perry-ui-geisterhand/src/chaos.rs:67", "crates/perry-ui-geisterhand/src/chaos.rs:83", "crates/perry-ui-geisterhand/src/chaos.rs:86", "crates/perry-ui-geisterhand/src/chaos.rs:109", "crates/perry-ui-geisterhand/src/chaos.rs:116", "crates/perry-ui-geisterhand/src/chaos.rs:127"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "rand", "kind": "normal", "target": null, "optional": true, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": ["updater-cli"], "resolved": ["rand@0.10.2"], "reference_lines": 2, "references": ["crates/perry/src/commands/updater.rs:160", "crates/perry/src/commands/updater.rs:162"]}], "lock_closure_packages": 79, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "rand_core", "versions": ["0.10.1", "0.6.4", "0.9.5"], "edges": [{"owner": "perry-ext-argon2", "manifest": "crates/perry-ext-argon2/Cargo.toml", "alias": "rand_core", "kind": "normal", "target": null, "optional": false, "requirement": "^0.6", "default_features": true, "features": ["getrandom"], "direct_feature_activators": [], "resolved": ["rand_core@0.6.4"], "reference_lines": 1, "references": ["crates/perry-ext-argon2/src/lib.rs:13"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "rand_core_06", "kind": "normal", "target": null, "optional": false, "requirement": "^0.6", "default_features": true, "features": ["getrandom"], "direct_feature_activators": [], "resolved": ["rand_core@0.6.4"], "reference_lines": 36, "references": ["crates/perry-stdlib/src/crypto/kdf.rs:1170", "crates/perry-stdlib/src/crypto/kdf.rs:1183", "crates/perry-stdlib/src/crypto/keys.rs:84", "crates/perry-stdlib/src/crypto/sign.rs:224", "crates/perry-stdlib/src/crypto/sign.rs:249", "crates/perry-stdlib/src/crypto/sign.rs:414"]}], "lock_closure_packages": 39, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "rayon", "versions": ["1.12.0"], "edges": [{"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "rayon", "kind": "normal", "target": null, "optional": false, "requirement": "^1.10", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rayon@1.12.0"], "reference_lines": 3, "references": ["crates/perry/src/commands/compile/bootstrap.rs:1016", "crates/perry/src/commands/compile/run_pipeline.rs:3129", "crates/perry/src/commands/compile.rs:4"]}], "lock_closure_packages": 13, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "redis", "versions": ["1.6.0"], "edges": [{"owner": "perry-ext-ioredis", "manifest": "crates/perry-ext-ioredis/Cargo.toml", "alias": "redis", "kind": "normal", "target": null, "optional": false, "requirement": "^1.2", "default_features": true, "features": ["tokio-comp", "connection-manager"], "direct_feature_activators": [], "resolved": ["redis@1.6.0"], "reference_lines": 9, "references": ["crates/perry-ext-ioredis/src/lib.rs:17", "crates/perry-ext-ioredis/src/lib.rs:32", "crates/perry-ext-ioredis/src/lib.rs:78", "crates/perry-ext-ioredis/src/lib.rs:91", "crates/perry-ext-ioredis/src/lib.rs:151", "crates/perry-ext-ioredis/src/lib.rs:152"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "redis", "kind": "normal", "target": null, "optional": true, "requirement": "^1.2", "default_features": true, "features": ["tokio-comp", "connection-manager"], "direct_feature_activators": ["bundled-ioredis"], "resolved": ["redis@1.6.0"], "reference_lines": 33, "references": ["crates/perry-stdlib/src/ioredis.rs:7", "crates/perry-stdlib/src/ioredis.rs:28", "crates/perry-stdlib/src/ioredis.rs:59", "crates/perry-stdlib/src/ioredis.rs:78", "crates/perry-stdlib/src/ioredis.rs:133", "crates/perry-stdlib/src/ioredis.rs:138"]}], "lock_closure_packages": 96, "lock_packages_lost_if_all_workspace_edges_removed": ["arc-swap@1.9.1", "arcstr@1.2.0", "backon@1.6.0", "num-bigint@0.5.1", "redis@1.6.0"]}, -{"name": "regex", "versions": ["1.13.1"], "edges": [{"owner": "perry-perex", "manifest": "crates/perry-perex/Cargo.toml", "alias": "regex", "kind": "dev", "target": null, "optional": false, "requirement": "^1.12", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["regex@1.13.1"], "reference_lines": 10, "references": ["crates/perry-perex/tests/dialect_parity.rs:177", "crates/perry-perex/tests/dialect_parity.rs:178", "crates/perry-perex/tests/dialect_parity.rs:179", "crates/perry-perex/tests/dialect_parity.rs:180", "crates/perry-perex/tests/dialect_parity.rs:181", "crates/perry-perex/tests/dialect_parity.rs:233"]}, {"owner": "perry-validation", "manifest": "crates/perry-validation/Cargo.toml", "alias": "regex", "kind": "dev", "target": null, "optional": false, "requirement": "^1.12", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["regex@1.13.1"], "reference_lines": 1, "references": ["crates/perry-validation/src/tests.rs:6"]}], "lock_closure_packages": 5, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "reqwest", "versions": ["0.12.28"], "edges": [{"owner": "perry-ext-axios", "manifest": "crates/perry-ext-axios/Cargo.toml", "alias": "reqwest", "kind": "normal", "target": null, "optional": false, "requirement": "^0.12", "default_features": false, "features": ["rustls-tls", "json", "multipart", "blocking"], "direct_feature_activators": [], "resolved": ["reqwest@0.12.28"], "reference_lines": 4, "references": ["crates/perry-ext-axios/src/lib.rs:81", "crates/perry-ext-axios/src/lib.rs:96", "crates/perry-ext-axios/src/lib.rs:114", "crates/perry-ext-axios/src/lib.rs:172"]}, {"owner": "perry-ext-fetch", "manifest": "crates/perry-ext-fetch/Cargo.toml", "alias": "reqwest", "kind": "normal", "target": null, "optional": false, "requirement": "^0.12", "default_features": false, "features": ["json", "rustls-tls", "http2"], "direct_feature_activators": [], "resolved": ["reqwest@0.12.28"], "reference_lines": 14, "references": ["crates/perry-ext-fetch/src/lib.rs:203", "crates/perry-ext-fetch/src/lib.rs:205", "crates/perry-ext-fetch/src/lib.rs:213", "crates/perry-ext-fetch/src/lib.rs:218", "crates/perry-ext-fetch/src/lib.rs:219", "crates/perry-ext-fetch/src/lib.rs:230"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "reqwest", "kind": "normal", "target": null, "optional": false, "requirement": "^0.12", "default_features": false, "features": ["json", "rustls-tls", "http2"], "direct_feature_activators": [], "resolved": ["reqwest@0.12.28"], "reference_lines": 39, "references": ["crates/perry-ext-http/src/agent/tls_compat.rs:8", "crates/perry-ext-http/src/agent/tls_compat.rs:39", "crates/perry-ext-http/src/agent.rs:213", "crates/perry-ext-http/src/agent.rs:221", "crates/perry-ext-http/src/agent.rs:258", "crates/perry-ext-http/src/agent.rs:637"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "reqwest", "kind": "normal", "target": null, "optional": true, "requirement": "^0.12", "default_features": false, "features": ["json", "rustls-tls", "http2"], "direct_feature_activators": ["web-fetch"], "resolved": ["reqwest@0.12.28"], "reference_lines": 26, "references": ["crates/perry-stdlib/src/axios.rs:50", "crates/perry-stdlib/src/axios.rs:64", "crates/perry-stdlib/src/axios.rs:104", "crates/perry-stdlib/src/axios.rs:110", "crates/perry-stdlib/src/axios.rs:116", "crates/perry-stdlib/src/axios.rs:141"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "reqwest", "kind": "normal", "target": null, "optional": false, "requirement": "^0.12", "default_features": false, "features": ["rustls-tls", "json", "multipart", "blocking"], "direct_feature_activators": [], "resolved": ["reqwest@0.12.28"], "reference_lines": 18, "references": ["crates/perry/src/commands/audit.rs:6", "crates/perry/src/commands/audit.rs:204", "crates/perry/src/commands/login.rs:79", "crates/perry/src/commands/publish/mod.rs:10", "crates/perry/src/commands/publish/mod.rs:1476", "crates/perry/src/commands/publish/mod.rs:1985"]}], "lock_closure_packages": 178, "lock_packages_lost_if_all_workspace_edges_removed": ["hyper-rustls@0.27.9", "lru-slab@0.1.2", "mime_guess@2.0.5", "quinn-proto@0.11.15", "quinn-udp@0.5.14", "quinn@0.11.9", "reqwest@0.12.28", "serde_urlencoded@0.7.1", "sync_wrapper@1.0.2", "tower-http@0.6.11", "tower-layer@0.3.3", "tower@0.5.3", "unicase@2.9.0", "windows-sys@0.60.2", "windows-targets@0.53.5", "windows_aarch64_gnullvm@0.53.1", "windows_aarch64_msvc@0.53.1", "windows_i686_gnu@0.53.1", "windows_i686_gnullvm@0.53.1", "windows_i686_msvc@0.53.1", "windows_x86_64_gnu@0.53.1", "windows_x86_64_gnullvm@0.53.1", "windows_x86_64_msvc@0.53.1"]}, -{"name": "resolv-conf", "versions": ["0.7.6"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "resolv_conf", "kind": "normal", "target": null, "optional": false, "requirement": "^0.7", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["resolv-conf@0.7.6"], "reference_lines": 1, "references": ["crates/perry-runtime/src/dns_resolver.rs:167"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "rgb", "versions": ["0.8.53"], "edges": [{"owner": "perry-doc-tests", "manifest": "crates/perry-doc-tests/Cargo.toml", "alias": "rgb", "kind": "normal", "target": null, "optional": false, "requirement": "^0.8", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rgb@0.8.53"], "reference_lines": 2, "references": ["crates/perry-doc-tests/src/image_diff.rs:128", "crates/perry-doc-tests/src/image_diff.rs:130"]}], "lock_closure_packages": 2, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "ring", "versions": ["0.17.14"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "ring", "kind": "normal", "target": null, "optional": false, "requirement": "^0.17", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["ring@0.17.14"], "reference_lines": 21, "references": ["crates/perry-ext-http/src/server/tls.rs:10", "crates/perry-ext-http/src/server/tls.rs:11", "crates/perry-ext-http/src/server/tls.rs:12", "crates/perry-ext-http/src/server/tls.rs:328", "crates/perry-ext-http/src/tls_client.rs:52", "crates/perry-ext-http/src/tls_client.rs:443"]}], "lock_closure_packages": 52, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "rsa", "versions": ["0.10.0-rc.18", "0.9.10"], "edges": [{"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "rsa", "kind": "normal", "target": null, "optional": false, "requirement": "^0.10.0-rc.18", "default_features": true, "features": ["sha2"], "direct_feature_activators": [], "resolved": ["rsa@0.10.0-rc.18"], "reference_lines": 11, "references": ["crates/perry-ext-node-forge/src/crypto.rs:23", "crates/perry-ext-node-forge/src/crypto.rs:24", "crates/perry-ext-node-forge/src/crypto.rs:25", "crates/perry-ext-node-forge/src/crypto.rs:26", "crates/perry-ext-node-forge/src/crypto.rs:148", "crates/perry-ext-node-forge/src/crypto.rs:152"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "rsa", "kind": "normal", "target": null, "optional": true, "requirement": "^0.9", "default_features": false, "features": ["pem", "pkcs5", "sha2"], "direct_feature_activators": ["bundled-jsonwebtoken"], "resolved": ["rsa@0.9.10"], "reference_lines": 32, "references": ["crates/perry-stdlib/src/crypto/certificate.rs:161", "crates/perry-stdlib/src/crypto/kdf.rs:1169", "crates/perry-stdlib/src/crypto/kdf.rs:1173", "crates/perry-stdlib/src/crypto/sign.rs:412", "crates/perry-stdlib/src/crypto/util.rs:33", "crates/perry-stdlib/src/crypto/util.rs:36"]}], "lock_closure_packages": 136, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "rusqlite", "versions": ["0.39.0"], "edges": [{"owner": "perry-ext-better-sqlite3", "manifest": "crates/perry-ext-better-sqlite3/Cargo.toml", "alias": "rusqlite", "kind": "normal", "target": null, "optional": false, "requirement": "^0.39", "default_features": true, "features": ["bundled"], "direct_feature_activators": [], "resolved": ["rusqlite@0.39.0"], "reference_lines": 8, "references": ["crates/perry-ext-better-sqlite3/src/lib.rs:21", "crates/perry-ext-better-sqlite3/src/lib.rs:80", "crates/perry-ext-better-sqlite3/src/lib.rs:89", "crates/perry-ext-better-sqlite3/src/lib.rs:96", "crates/perry-ext-better-sqlite3/src/lib.rs:104", "crates/perry-ext-better-sqlite3/src/lib.rs:251"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "rusqlite", "kind": "normal", "target": null, "optional": true, "requirement": "^0.39", "default_features": true, "features": ["bundled", "column_decltype", "limits", "session"], "direct_feature_activators": ["database-sqlite"], "resolved": ["rusqlite@0.39.0"], "reference_lines": 21, "references": ["crates/perry-stdlib/src/sqlite/backup.rs:9", "crates/perry-stdlib/src/sqlite/backup.rs:77", "crates/perry-stdlib/src/sqlite/backup.rs:79", "crates/perry-stdlib/src/sqlite/better.rs:7", "crates/perry-stdlib/src/sqlite/better.rs:141", "crates/perry-stdlib/src/sqlite/better.rs:158"]}], "lock_closure_packages": 70, "lock_packages_lost_if_all_workspace_edges_removed": ["fallible-iterator@0.3.0", "fallible-streaming-iterator@0.1.9", "rsqlite-vfs@0.1.1", "rusqlite@0.39.0", "sqlite-wasm-rs@0.5.5"]}, -{"name": "rust_decimal", "versions": ["1.43.0"], "edges": [{"owner": "perry-ext-decimal", "manifest": "crates/perry-ext-decimal/Cargo.toml", "alias": "rust_decimal", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rust_decimal@1.43.0"], "reference_lines": 2, "references": ["crates/perry-ext-decimal/src/lib.rs:8", "crates/perry-ext-decimal/src/lib.rs:9"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "rust_decimal", "kind": "normal", "target": null, "optional": true, "requirement": "^1.33", "default_features": true, "features": ["maths"], "direct_feature_activators": ["bundled-decimal"], "resolved": ["rust_decimal@1.43.0"], "reference_lines": 2, "references": ["crates/perry-stdlib/src/decimal.rs:7", "crates/perry-stdlib/src/decimal.rs:8"]}], "lock_closure_packages": 66, "lock_packages_lost_if_all_workspace_edges_removed": ["borsh-derive@1.6.1", "borsh@1.6.1", "rust_decimal@1.43.0"]}, -{"name": "rustc-demangle", "versions": ["0.1.28"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "rustc_demangle", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rustc-demangle@0.1.28"], "reference_lines": 1, "references": ["crates/perry-runtime/src/error_stack_frames.rs:459"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "rustc_demangle", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rustc-demangle@0.1.28"], "reference_lines": 1, "references": ["crates/perry/src/commands/compile/size_report.rs:730"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": ["rustc-demangle@0.1.28"]}, -{"name": "rustls", "versions": ["0.23.43"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "rustls", "kind": "normal", "target": null, "optional": false, "requirement": "^0.23", "default_features": true, "features": ["std", "ring", "tls12"], "direct_feature_activators": [], "resolved": ["rustls@0.23.43"], "reference_lines": 90, "references": ["crates/perry-ext-http/src/server/http2_server.rs:176", "crates/perry-ext-http/src/server/https_server.rs:236", "crates/perry-ext-http/src/server/tls.rs:13", "crates/perry-ext-http/src/server/tls.rs:14", "crates/perry-ext-http/src/server/tls.rs:15", "crates/perry-ext-http/src/server/tls.rs:294"]}, {"owner": "perry-ext-net", "manifest": "crates/perry-ext-net/Cargo.toml", "alias": "rustls", "kind": "normal", "target": null, "optional": false, "requirement": "^0.23", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rustls@0.23.43"], "reference_lines": 44, "references": ["crates/perry-ext-net/src/tls.rs:9", "crates/perry-ext-net/src/tls.rs:12", "crates/perry-ext-net/src/tls.rs:202", "crates/perry-ext-net/src/tls.rs:206", "crates/perry-ext-net/src/tls.rs:209", "crates/perry-ext-net/src/tls.rs:247"]}, {"owner": "perry-ext-ws", "manifest": "crates/perry-ext-ws/Cargo.toml", "alias": "rustls", "kind": "normal", "target": null, "optional": false, "requirement": "^0.23", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rustls@0.23.43"], "reference_lines": 1, "references": ["crates/perry-ext-ws/src/lib.rs:67"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "rustls", "kind": "normal", "target": null, "optional": true, "requirement": "^0.23", "default_features": true, "features": [], "direct_feature_activators": ["bundled-ws", "external-tls-server", "tls-runtime"], "resolved": ["rustls@0.23.43"], "reference_lines": 86, "references": ["crates/perry-stdlib/src/net/mod.rs:48", "crates/perry-stdlib/src/net/mod.rs:52", "crates/perry-stdlib/src/net/mod.rs:427", "crates/perry-stdlib/src/net/mod.rs:431", "crates/perry-stdlib/src/net/mod.rs:434", "crates/perry-stdlib/src/net/mod.rs:665"]}], "lock_closure_packages": 65, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "rustls-native-certs", "versions": ["0.8.4"], "edges": [{"owner": "perry-ext-net", "manifest": "crates/perry-ext-net/Cargo.toml", "alias": "rustls_native_certs", "kind": "normal", "target": null, "optional": false, "requirement": "^0.8", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rustls-native-certs@0.8.4"], "reference_lines": 1, "references": ["crates/perry-ext-net/src/tls.rs:386"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "rustls_native_certs", "kind": "normal", "target": null, "optional": true, "requirement": "^0.8", "default_features": true, "features": [], "direct_feature_activators": ["external-tls-server", "tls-runtime"], "resolved": ["rustls-native-certs@0.8.4"], "reference_lines": 1, "references": ["crates/perry-stdlib/src/net/mod.rs:678"]}], "lock_closure_packages": 44, "lock_packages_lost_if_all_workspace_edges_removed": ["core-foundation@0.10.1", "openssl-probe@0.2.1", "rustls-native-certs@0.8.4", "schannel@0.1.29", "security-framework-sys@2.17.0", "security-framework@3.7.0"]}, -{"name": "rustls-pemfile", "versions": ["2.2.0"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "rustls_pemfile", "kind": "normal", "target": null, "optional": false, "requirement": "^2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rustls-pemfile@2.2.0"], "reference_lines": 8, "references": ["crates/perry-ext-http/src/server/tls.rs:259", "crates/perry-ext-http/src/server/tls.rs:268", "crates/perry-ext-http/src/server/tls.rs:272", "crates/perry-ext-http/src/server/tls.rs:276", "crates/perry-ext-http/src/tls_client.rs:548", "crates/perry-ext-http/src/tls_client.rs:1176"]}, {"owner": "perry-ext-net", "manifest": "crates/perry-ext-net/Cargo.toml", "alias": "rustls_pemfile", "kind": "normal", "target": null, "optional": false, "requirement": "^2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rustls-pemfile@2.2.0"], "reference_lines": 6, "references": ["crates/perry-ext-net/src/tls.rs:250", "crates/perry-ext-net/src/tls.rs:262", "crates/perry-ext-net/src/tls.rs:437", "crates/perry-ext-net/src/tls.rs:442", "crates/perry-ext-net/src/tls.rs:563", "crates/perry-ext-net/src/tls.rs:583"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "rustls_pemfile", "kind": "normal", "target": null, "optional": true, "requirement": "^2", "default_features": true, "features": [], "direct_feature_activators": ["external-tls-server", "tls-runtime"], "resolved": ["rustls-pemfile@2.2.0"], "reference_lines": 11, "references": ["crates/perry-stdlib/src/net/mod.rs:726", "crates/perry-stdlib/src/net/mod.rs:739", "crates/perry-stdlib/src/net/mod.rs:755", "crates/perry-stdlib/src/net/mod.rs:760", "crates/perry-stdlib/src/net/mod.rs:1365", "crates/perry-stdlib/src/net/mod.rs:1380"]}], "lock_closure_packages": 34, "lock_packages_lost_if_all_workspace_edges_removed": ["rustls-pemfile@2.2.0"]}, -{"name": "rustls-webpki", "versions": ["0.103.13"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "rustls_webpki", "kind": "normal", "target": null, "optional": false, "requirement": "^0.103", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["rustls-webpki@0.103.13"], "reference_lines": 6, "references": ["crates/perry-ext-http/src/tls_client.rs:277", "crates/perry-ext-http/src/tls_client.rs:281", "crates/perry-ext-http/src/tls_client.rs:369", "crates/perry-ext-http/src/tls_client.rs:374", "crates/perry-ext-http/src/tls_client.rs:403", "crates/perry-ext-http/src/tls_client.rs:422"]}], "lock_closure_packages": 62, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "ryu", "versions": ["1.0.23"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "ryu", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["ryu@1.0.23"], "reference_lines": 2, "references": ["crates/perry-runtime/src/bun_compat/cli_utils.rs:1045", "crates/perry-runtime/src/node_stream_json.rs:21"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "ryu", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["ryu@1.0.23"], "reference_lines": 0, "references": []}, {"owner": "perry-ui-android", "manifest": "crates/perry-ui-android/Cargo.toml", "alias": "ryu", "kind": "normal", "target": "cfg(target_os = \"android\")", "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["ryu@1.0.23"], "reference_lines": 0, "references": []}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "ryu-js", "versions": ["1.0.3"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "ryu_js", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0.3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["ryu-js@1.0.3"], "reference_lines": 8, "references": ["crates/perry-runtime/src/json/stringify_api.rs:365", "crates/perry-runtime/src/json/stringify_flat.rs:198", "crates/perry-runtime/src/json/stringify_flat_tests.rs:308", "crates/perry-runtime/src/json/stringify_scalars.rs:53", "crates/perry-runtime/src/json/stringify_scalars_tests.rs:12", "crates/perry-runtime/src/json/stringify_scalars_tests.rs:40"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "scraper", "versions": ["0.27.0"], "edges": [{"owner": "perry-ext-cheerio", "manifest": "crates/perry-ext-cheerio/Cargo.toml", "alias": "scraper", "kind": "normal", "target": null, "optional": false, "requirement": "^0.27", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["scraper@0.27.0"], "reference_lines": 1, "references": ["crates/perry-ext-cheerio/src/lib.rs:9"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "scraper", "kind": "normal", "target": null, "optional": true, "requirement": "^0.27", "default_features": true, "features": [], "direct_feature_activators": ["bundled-cheerio"], "resolved": ["scraper@0.27.0"], "reference_lines": 1, "references": ["crates/perry-stdlib/src/cheerio.rs:10"]}], "lock_closure_packages": 55, "lock_packages_lost_if_all_workspace_edges_removed": ["cssparser-macros@0.7.0", "cssparser@0.37.0", "dtoa-short@0.3.5", "dtoa@1.0.11", "ego-tree@0.11.0", "getopts@0.2.24", "html5ever@0.39.0", "markup5ever@0.39.0", "phf@0.13.1", "phf_codegen@0.13.1", "phf_generator@0.13.1", "phf_macros@0.13.1", "phf_shared@0.13.1", "precomputed-hash@0.1.1", "scraper@0.27.0", "selectors@0.38.0", "servo_arc@0.4.3", "string_cache@0.9.0", "string_cache_codegen@0.6.1", "tendril@0.5.0", "web_atoms@0.2.4"]}, -{"name": "scrypt", "versions": ["0.11.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "scrypt", "kind": "normal", "target": null, "optional": true, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["scrypt@0.11.0"], "reference_lines": 9, "references": ["crates/perry-stdlib/src/crypto/kdf.rs:826", "crates/perry-stdlib/src/crypto/kdf.rs:827", "crates/perry-stdlib/src/crypto/kdf.rs:830", "crates/perry-stdlib/src/crypto/kdf.rs:871", "crates/perry-stdlib/src/crypto/kdf.rs:877", "crates/perry-stdlib/src/crypto/kdf.rs:1027"]}], "lock_closure_packages": 54, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "semver", "versions": ["1.0.28"], "edges": [{"owner": "perry-updater", "manifest": "crates/perry-updater/Cargo.toml", "alias": "semver", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["semver@1.0.28"], "reference_lines": 3, "references": ["crates/perry-updater/src/cli_manifest.rs:6", "crates/perry-updater/src/core.rs:80", "crates/perry-updater/src/core.rs:84"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "semver", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["semver@1.0.28"], "reference_lines": 3, "references": ["crates/perry/src/commands/compile/resolve/native_library.rs:1810", "crates/perry/src/update_checker.rs:8", "crates/perry/tests/issue_9600_bun_cli_utilities.rs:49"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "serde", "versions": ["1.0.229"], "edges": [{"owner": "perry-api-manifest", "manifest": "crates/perry-api-manifest/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": true, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": ["serde"], "resolved": ["serde@1.0.229"], "reference_lines": 5, "references": ["crates/perry-api-manifest/src/lib.rs:36", "crates/perry-api-manifest/src/lib.rs:128", "crates/perry-api-manifest/src/lib.rs:160", "crates/perry-api-manifest/src/lib.rs:192", "crates/perry-api-manifest/src/lib.rs:214"]}, {"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 21, "references": ["crates/perry-codegen/src/native_value/artifact.rs:6", "crates/perry-codegen/src/native_value/buffer.rs:1", "crates/perry-codegen/src/native_value/materialize.rs:1", "crates/perry-codegen/src/native_value/rep.rs:1", "crates/perry-codegen/src/opt_report/mod.rs:181", "crates/perry-codegen/src/opt_report/mod.rs:204"]}, {"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 9, "references": ["crates/perry-container-compose/src/backend/apple.rs:6", "crates/perry-container-compose/src/backend/docker.rs:6", "crates/perry-container-compose/src/backend.rs:7", "crates/perry-container-compose/src/compose.rs:1076", "crates/perry-container-compose/src/error.rs:6", "crates/perry-container-compose/src/error.rs:69"]}, {"owner": "perry-diagnostics", "manifest": "crates/perry-diagnostics/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive", "derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 3, "references": ["crates/perry-diagnostics/src/compat_report.rs:26", "crates/perry-diagnostics/src/diagnostic.rs:4", "crates/perry-diagnostics/src/span.rs:3"]}, {"owner": "perry-doc-tests", "manifest": "crates/perry-doc-tests/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 1, "references": ["crates/perry-doc-tests/src/main.rs:14"]}, {"owner": "perry-ext-jsonwebtoken", "manifest": "crates/perry-ext-jsonwebtoken/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 1, "references": ["crates/perry-ext-jsonwebtoken/src/lib.rs:10"]}, {"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 1, "references": ["crates/perry-ext-node-forge/src/lib.rs:36"]}, {"owner": "perry-ext-parcel-watcher", "manifest": "crates/perry-ext-parcel-watcher/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive", "derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 1, "references": ["crates/perry-ext-parcel-watcher/src/lib.rs:19"]}, {"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 2, "references": ["crates/perry-ext-typescript/src/bun.rs:23", "crates/perry-ext-typescript/src/lib.rs:12"]}, {"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 2, "references": ["crates/perry-hir/src/audit.rs:26", "crates/perry-hir/src/audit.rs:43"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 1, "references": ["crates/perry-runtime/src/node_api_host/loader.rs:3"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive", "derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 4, "references": ["crates/perry-stdlib/src/container/types.rs:6", "crates/perry-stdlib/src/fetch/bun_server_bridge.rs:10", "crates/perry-stdlib/src/fetch/bun_server_bridge.rs:18", "crates/perry-stdlib/src/jsonwebtoken.rs:10"]}, {"owner": "perry-ui-geisterhand", "manifest": "crates/perry-ui-geisterhand/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive", "derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 1, "references": ["crates/perry-ui-geisterhand/src/chaos.rs:20"]}, {"owner": "perry-updater", "manifest": "crates/perry-updater/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive", "derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 1, "references": ["crates/perry-updater/src/cli_manifest.rs:7"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "serde", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": ["derive"], "direct_feature_activators": [], "resolved": ["serde@1.0.229"], "reference_lines": 31, "references": ["crates/perry/src/commands/attest.rs:34", "crates/perry/src/commands/audit.rs:7", "crates/perry/src/commands/compile/asset_manifest.rs:7", "crates/perry/src/commands/compile/build_cache.rs:2", "crates/perry/src/commands/compile/collect_modules/static_require_transform.rs:6", "crates/perry/src/commands/compile/collect_modules/static_require_transform.rs:7"]}], "lock_closure_packages": 7, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "serde_json", "versions": ["1.0.151"], "edges": [{"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 46, "references": ["crates/perry-codegen/src/native_value/artifact.rs:620", "crates/perry-codegen/src/opt_report/mod.rs:1394", "crates/perry-codegen/src/opt_report/mod.rs:1410", "crates/perry-codegen/src/opt_report/render.rs:585", "crates/perry-codegen/src/opt_report/render.rs:733", "crates/perry-codegen/src/opt_report/render.rs:757"]}, {"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 33, "references": ["crates/perry-container-compose/src/backend/apple.rs:394", "crates/perry-container-compose/src/backend/apple.rs:413", "crates/perry-container-compose/src/backend/apple.rs:433", "crates/perry-container-compose/src/backend/detect.rs:199", "crates/perry-container-compose/src/backend/detect.rs:200", "crates/perry-container-compose/src/backend/detect.rs:239"]}, {"owner": "perry-diagnostics", "manifest": "crates/perry-diagnostics/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 9, "references": ["crates/perry-diagnostics/src/emitter.rs:275", "crates/perry-diagnostics/src/emitter.rs:279", "crates/perry-diagnostics/src/emitter.rs:285", "crates/perry-diagnostics/src/emitter.rs:287", "crates/perry-diagnostics/src/emitter.rs:294", "crates/perry-diagnostics/src/emitter.rs:301"]}, {"owner": "perry-diagnostics", "manifest": "crates/perry-diagnostics/Cargo.toml", "alias": "serde_json", "kind": "dev", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 9, "references": ["crates/perry-diagnostics/src/emitter.rs:275", "crates/perry-diagnostics/src/emitter.rs:279", "crates/perry-diagnostics/src/emitter.rs:285", "crates/perry-diagnostics/src/emitter.rs:287", "crates/perry-diagnostics/src/emitter.rs:294", "crates/perry-diagnostics/src/emitter.rs:301"]}, {"owner": "perry-doc-tests", "manifest": "crates/perry-doc-tests/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 4, "references": ["crates/perry-doc-tests/src/image_diff.rs:108", "crates/perry-doc-tests/src/main.rs:282", "crates/perry-doc-tests/tests/compiler_environment.rs:6", "crates/perry-doc-tests/tests/compiler_environment.rs:72"]}, {"owner": "perry-ext-dotenv", "manifest": "crates/perry-ext-dotenv/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 1, "references": ["crates/perry-ext-dotenv/src/lib.rs:124"]}, {"owner": "perry-ext-fastify", "manifest": "crates/perry-ext-fastify/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 8, "references": ["crates/perry-ext-fastify/src/app.rs:284", "crates/perry-ext-fastify/src/app.rs:294", "crates/perry-ext-fastify/src/app.rs:304", "crates/perry-ext-fastify/src/context.rs:274", "crates/perry-ext-fastify/src/context.rs:331", "crates/perry-ext-fastify/src/context.rs:724"]}, {"owner": "perry-ext-fetch", "manifest": "crates/perry-ext-fetch/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 2, "references": ["crates/perry-ext-fetch/src/lib.rs:694", "crates/perry-ext-fetch/src/lib.rs:888"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 116, "references": ["crates/perry-ext-http/src/agent/tls_compat.rs:222", "crates/perry-ext-http/src/agent/tls_compat.rs:233", "crates/perry-ext-http/src/agent/tls_compat.rs:238", "crates/perry-ext-http/src/agent.rs:1205", "crates/perry-ext-http/src/agent.rs:1253", "crates/perry-ext-http/src/agent.rs:1316"]}, {"owner": "perry-ext-jsonwebtoken", "manifest": "crates/perry-ext-jsonwebtoken/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 4, "references": ["crates/perry-ext-jsonwebtoken/src/lib.rs:19", "crates/perry-ext-jsonwebtoken/src/lib.rs:53", "crates/perry-ext-jsonwebtoken/src/lib.rs:206", "crates/perry-ext-jsonwebtoken/src/lib.rs:238"]}, {"owner": "perry-ext-mongodb", "manifest": "crates/perry-ext-mongodb/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 17, "references": ["crates/perry-ext-mongodb/src/lib.rs:327", "crates/perry-ext-mongodb/src/lib.rs:332", "crates/perry-ext-mongodb/src/lib.rs:370", "crates/perry-ext-mongodb/src/lib.rs:378", "crates/perry-ext-mongodb/src/lib.rs:421", "crates/perry-ext-mongodb/src/lib.rs:465"]}, {"owner": "perry-ext-mysql2", "manifest": "crates/perry-ext-mysql2/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["preserve_order"], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 9, "references": ["crates/perry-ext-mysql2/src/lib.rs:234", "crates/perry-ext-mysql2/src/lib.rs:318", "crates/perry-ext-mysql2/src/lib.rs:396", "crates/perry-ext-mysql2/src/lib.rs:398", "crates/perry-ext-mysql2/src/lib.rs:399", "crates/perry-ext-mysql2/src/lib.rs:401"]}, {"owner": "perry-ext-net", "manifest": "crates/perry-ext-net/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 3, "references": ["crates/perry-ext-net/src/lib.rs:880", "crates/perry-ext-net/src/socket_facade.rs:121", "crates/perry-ext-net/src/socket_facade.rs:122"]}, {"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 16, "references": ["crates/perry-ext-node-forge/src/lib.rs:103", "crates/perry-ext-node-forge/src/lib.rs:140", "crates/perry-ext-node-forge/src/lib.rs:142", "crates/perry-ext-node-forge/src/lib.rs:171", "crates/perry-ext-node-forge/src/lib.rs:185", "crates/perry-ext-node-forge/src/lib.rs:187"]}, {"owner": "perry-ext-parcel-watcher", "manifest": "crates/perry-ext-parcel-watcher/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 4, "references": ["crates/perry-ext-parcel-watcher/src/lib.rs:860", "crates/perry-ext-parcel-watcher/src/lib.rs:903", "crates/perry-ext-parcel-watcher/src/lib.rs:1049", "crates/perry-ext-parcel-watcher/src/lib.rs:1050"]}, {"owner": "perry-ext-qs", "manifest": "crates/perry-ext-qs/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 14, "references": ["crates/perry-ext-qs/src/lib.rs:44", "crates/perry-ext-qs/src/parse.rs:4", "crates/perry-ext-qs/src/parse.rs:337", "crates/perry-ext-qs/src/parse.rs:349", "crates/perry-ext-qs/src/parse.rs:355", "crates/perry-ext-qs/src/parse.rs:367"]}, {"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 11, "references": ["crates/perry-ext-typescript/src/bun.rs:556", "crates/perry-ext-typescript/src/bun.rs:655", "crates/perry-ext-typescript/src/bun.rs:668", "crates/perry-ext-typescript/src/lib.rs:13", "crates/perry-ext-typescript/src/lib.rs:42", "crates/perry-ext-typescript/src/lib.rs:54"]}, {"owner": "perry-ext-undici", "manifest": "crates/perry-ext-undici/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 1, "references": ["crates/perry-ext-undici/src/lib.rs:90"]}, {"owner": "perry-ext-validator", "manifest": "crates/perry-ext-validator/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 1, "references": ["crates/perry-ext-validator/src/lib.rs:199"]}, {"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 5, "references": ["crates/perry-hir/src/audit.rs:439", "crates/perry-hir/src/lower/lower_expr/json_literal/tests.rs:29", "crates/perry-hir/src/lower/lower_expr/json_literal/tests.rs:113", "crates/perry-hir/src/lower/lower_expr/json_literal.rs:125", "crates/perry-hir/src/lower/lower_expr/json_literal.rs:135"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 189, "references": ["crates/perry-runtime/src/bun_compat/cli_utils.rs:165", "crates/perry-runtime/src/bun_compat/cli_utils.rs:663", "crates/perry-runtime/src/child_process/fork.rs:198", "crates/perry-runtime/src/child_process/registry.rs:95", "crates/perry-runtime/src/gc/census.rs:644", "crates/perry-runtime/src/gc/census.rs:661"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 125, "references": ["crates/perry-stdlib/src/container/backend_ctl.rs:87", "crates/perry-stdlib/src/container/backend_ctl.rs:99", "crates/perry-stdlib/src/container/backend_ctl.rs:101", "crates/perry-stdlib/src/container/backend_ctl.rs:158", "crates/perry-stdlib/src/container/backend_ctl.rs:165", "crates/perry-stdlib/src/container/backend_ctl.rs:207"]}, {"owner": "perry-ui-android", "manifest": "crates/perry-ui-android/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": "cfg(target_os = \"android\")", "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 0, "references": []}, {"owner": "perry-ui-geisterhand", "manifest": "crates/perry-ui-geisterhand/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 17, "references": ["crates/perry-ui-geisterhand/src/chaos.rs:53", "crates/perry-ui-geisterhand/src/server.rs:295", "crates/perry-ui-geisterhand/src/server.rs:297", "crates/perry-ui-geisterhand/src/server.rs:323", "crates/perry-ui-geisterhand/src/server.rs:351", "crates/perry-ui-geisterhand/src/server.rs:422"]}, {"owner": "perry-updater", "manifest": "crates/perry-updater/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 0, "references": []}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "serde_json", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_json@1.0.151"], "reference_lines": 577, "references": ["crates/perry/src/commands/attest.rs:134", "crates/perry/src/commands/attest.rs:158", "crates/perry/src/commands/attest.rs:282", "crates/perry/src/commands/audit.rs:188", "crates/perry/src/commands/audit.rs:191", "crates/perry/src/commands/audit.rs:201"]}], "lock_closure_packages": 16, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "serde_yaml", "versions": ["0.9.34+deprecated"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "serde_yaml", "kind": "normal", "target": null, "optional": false, "requirement": "^0.9", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_yaml@0.9.34+deprecated"], "reference_lines": 102, "references": ["crates/perry-container-compose/src/cli.rs:195", "crates/perry-container-compose/src/compose.rs:429", "crates/perry-container-compose/src/compose.rs:430", "crates/perry-container-compose/src/compose.rs:438", "crates/perry-container-compose/src/compose.rs:439", "crates/perry-container-compose/src/compose.rs:444"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "serde_yaml", "kind": "dev", "target": null, "optional": false, "requirement": "^0.9", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["serde_yaml@0.9.34+deprecated"], "reference_lines": 1, "references": ["crates/perry-stdlib/tests/container_props.rs:164"]}], "lock_closure_packages": 16, "lock_packages_lost_if_all_workspace_edges_removed": ["serde_yaml@0.9.34+deprecated"]}, -{"name": "sha1", "versions": ["0.10.6", "0.11.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "rsa_sha1", "kind": "normal", "target": null, "optional": true, "requirement": "^0.10", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["sha1@0.10.6"], "reference_lines": 4, "references": ["crates/perry-stdlib/src/crypto/sign.rs:225", "crates/perry-stdlib/src/crypto/sign.rs:250", "crates/perry-stdlib/src/webcrypto/util.rs:1154", "crates/perry-stdlib/src/webcrypto/util.rs:1170"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "sha1", "kind": "normal", "target": null, "optional": true, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["sha1@0.11.0"], "reference_lines": 4, "references": ["crates/perry-stdlib/src/crypto/util.rs:45", "crates/perry-stdlib/src/crypto/x509.rs:682", "crates/perry-stdlib/src/crypto/x509.rs:1022", "crates/perry-stdlib/src/webcrypto/util.rs:53"]}], "lock_closure_packages": 87, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "sha2", "versions": ["0.10.9", "0.11.0"], "edges": [{"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "sha2", "kind": "normal", "target": null, "optional": false, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["sha2@0.11.0"], "reference_lines": 2, "references": ["crates/perry-ext-node-forge/src/crypto.rs:27", "crates/perry-ext-node-forge/src/crypto.rs:490"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "sha2", "kind": "normal", "target": null, "optional": true, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": ["node-api-host"], "resolved": ["sha2@0.11.0"], "reference_lines": 2, "references": ["crates/perry-runtime/build.rs:51", "crates/perry-runtime/src/node_api_host/loader.rs:4"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "sha2", "kind": "build", "target": null, "optional": false, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": ["node-api-host"], "resolved": ["sha2@0.11.0"], "reference_lines": 2, "references": ["crates/perry-runtime/build.rs:51", "crates/perry-runtime/src/node_api_host/loader.rs:4"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "sha2", "kind": "normal", "target": null, "optional": true, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["sha2@0.11.0"], "reference_lines": 9, "references": ["crates/perry-stdlib/src/crypto/kdf.rs:21", "crates/perry-stdlib/src/crypto/sign.rs:11", "crates/perry-stdlib/src/crypto/util.rs:40", "crates/perry-stdlib/src/crypto/util.rs:46", "crates/perry-stdlib/src/crypto/x509.rs:683", "crates/perry-stdlib/src/crypto/x509.rs:1023"]}, {"owner": "perry-updater", "manifest": "crates/perry-updater/Cargo.toml", "alias": "sha2", "kind": "normal", "target": null, "optional": false, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["sha2@0.11.0"], "reference_lines": 2, "references": ["crates/perry-updater/src/cli_manifest.rs:8", "crates/perry-updater/src/core.rs:11"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "sha2", "kind": "normal", "target": null, "optional": false, "requirement": "^0.11", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["sha2@0.11.0"], "reference_lines": 15, "references": ["crates/perry/src/commands/attest.rs:35", "crates/perry/src/commands/compile/asset_manifest.rs:8", "crates/perry/src/commands/compile/asset_modules.rs:13", "crates/perry/src/commands/compile/build_cache.rs:3", "crates/perry/src/commands/compile/collect_modules/eval_worker.rs:27", "crates/perry/src/commands/compile/link/archive_cache.rs:2"]}], "lock_closure_packages": 87, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "sha3", "versions": ["0.10.9", "0.11.0", "0.12.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "sha3", "kind": "normal", "target": null, "optional": true, "requirement": "^0.12", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["sha3@0.12.0"], "reference_lines": 0, "references": []}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "sha3_010", "kind": "normal", "target": null, "optional": true, "requirement": "^0.10", "default_features": false, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["sha3@0.10.9"], "reference_lines": 6, "references": ["crates/perry-stdlib/src/webcrypto/util.rs:1021", "crates/perry-stdlib/src/webcrypto/util.rs:1022", "crates/perry-stdlib/src/webcrypto/util.rs:1026", "crates/perry-stdlib/src/webcrypto/util.rs:1039", "crates/perry-stdlib/src/webcrypto/util.rs:1040", "crates/perry-stdlib/src/webcrypto/util.rs:1044"]}], "lock_closure_packages": 91, "lock_packages_lost_if_all_workspace_edges_removed": ["keccak@0.1.6", "sha3@0.10.9", "sha3@0.12.0"]}, -{"name": "sha3-utils", "versions": ["0.5.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "sha3_utils", "kind": "normal", "target": null, "optional": true, "requirement": "^0.5", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["sha3-utils@0.5.0"], "reference_lines": 4, "references": ["crates/perry-stdlib/src/webcrypto/util.rs:1027", "crates/perry-stdlib/src/webcrypto/util.rs:1033", "crates/perry-stdlib/src/webcrypto/util.rs:1045", "crates/perry-stdlib/src/webcrypto/util.rs:1051"]}], "lock_closure_packages": 7, "lock_packages_lost_if_all_workspace_edges_removed": ["sha3-utils@0.5.0"]}, -{"name": "shake", "versions": ["0.1.0"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "shake", "kind": "normal", "target": null, "optional": true, "requirement": "^0.1", "default_features": true, "features": [], "direct_feature_activators": ["crypto"], "resolved": ["shake@0.1.0"], "reference_lines": 3, "references": ["crates/perry-stdlib/src/crypto/hash_handles.rs:121", "crates/perry-stdlib/src/crypto/hash_handles.rs:122", "crates/perry-stdlib/src/crypto/util.rs:49"]}], "lock_closure_packages": 78, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "simdutf8", "versions": ["0.1.5"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "simdutf8", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1.5", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["simdutf8@0.1.5"], "reference_lines": 1, "references": ["crates/perry-runtime/src/string/utf16_count.rs:22"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "socket2", "versions": ["0.6.5"], "edges": [{"owner": "perry-ext-fastify", "manifest": "crates/perry-ext-fastify/Cargo.toml", "alias": "socket2", "kind": "normal", "target": "cfg(unix)", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["socket2@0.6.5"], "reference_lines": 1, "references": ["crates/perry-ext-fastify/src/cluster_bind.rs:29"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "socket2", "kind": "normal", "target": "cfg(unix)", "optional": false, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["socket2@0.6.5"], "reference_lines": 1, "references": ["crates/perry-ext-http/src/server/cluster_bind.rs:22"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "socket2", "kind": "normal", "target": null, "optional": false, "requirement": "^0.6", "default_features": true, "features": ["all"], "direct_feature_activators": [], "resolved": ["socket2@0.6.5"], "reference_lines": 8, "references": ["crates/perry-runtime/src/cluster.rs:107", "crates/perry-runtime/src/cluster.rs:108", "crates/perry-runtime/src/cluster.rs:109", "crates/perry-runtime/src/cluster.rs:110", "crates/perry-runtime/src/cluster_sched.rs:693", "crates/perry-runtime/src/dgram/net.rs:13"]}], "lock_closure_packages": 4, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "spki", "versions": ["0.7.3", "0.8.0"], "edges": [{"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "spki", "kind": "normal", "target": null, "optional": false, "requirement": "^0.8", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["spki@0.8.0"], "reference_lines": 1, "references": ["crates/perry-ext-node-forge/src/crypto.rs:40"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "spki", "kind": "normal", "target": null, "optional": true, "requirement": "^0.8", "default_features": false, "features": ["pem", "alloc"], "direct_feature_activators": ["bundled-jsonwebtoken"], "resolved": ["spki@0.8.0"], "reference_lines": 0, "references": []}], "lock_closure_packages": 17, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "sqlx", "versions": ["0.9.0"], "edges": [{"owner": "perry-ext-mysql2", "manifest": "crates/perry-ext-mysql2/Cargo.toml", "alias": "sqlx", "kind": "normal", "target": null, "optional": false, "requirement": "^0.9.0", "default_features": false, "features": ["runtime-tokio", "mysql", "mysql-rsa", "chrono", "json"], "direct_feature_activators": [], "resolved": ["sqlx@0.9.0"], "reference_lines": 8, "references": ["crates/perry-ext-mysql2/src/lib.rs:23", "crates/perry-ext-mysql2/src/lib.rs:24", "crates/perry-ext-mysql2/src/lib.rs:25", "crates/perry-ext-mysql2/src/lib.rs:733", "crates/perry-ext-mysql2/src/lib.rs:824", "crates/perry-ext-mysql2/src/lib.rs:856"]}, {"owner": "perry-ext-pg", "manifest": "crates/perry-ext-pg/Cargo.toml", "alias": "sqlx", "kind": "normal", "target": null, "optional": false, "requirement": "^0.9.0", "default_features": false, "features": ["runtime-tokio", "postgres", "chrono"], "direct_feature_activators": [], "resolved": ["sqlx@0.9.0"], "reference_lines": 5, "references": ["crates/perry-ext-pg/src/lib.rs:22", "crates/perry-ext-pg/src/lib.rs:23", "crates/perry-ext-pg/src/lib.rs:459", "crates/perry-ext-pg/src/lib.rs:511", "crates/perry-ext-pg/src/lib.rs:656"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "sqlx", "kind": "normal", "target": null, "optional": true, "requirement": "^0.9.0", "default_features": false, "features": ["runtime-tokio", "mysql", "postgres", "chrono"], "direct_feature_activators": ["bundled-mysql2", "bundled-pg"], "resolved": ["sqlx@0.9.0"], "reference_lines": 27, "references": ["crates/perry-stdlib/src/mysql2/connection.rs:7", "crates/perry-stdlib/src/mysql2/connection.rs:8", "crates/perry-stdlib/src/mysql2/connection.rs:36", "crates/perry-stdlib/src/mysql2/connection.rs:125", "crates/perry-stdlib/src/mysql2/connection.rs:135", "crates/perry-stdlib/src/mysql2/pool.rs:10"]}], "lock_closure_packages": 228, "lock_packages_lost_if_all_workspace_edges_removed": ["atoi@2.0.0", "crc-catalog@2.5.0", "crc@3.4.0", "crossbeam-queue@0.3.12", "etcetera@0.11.0", "flume@0.12.0", "futures-intrusive@0.5.0", "sqlx-core@0.9.0", "sqlx-macros-core@0.9.0", "sqlx-macros@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "sqlx@0.9.0", "tokio-stream@0.1.18", "whoami@2.1.2"]}, -{"name": "stacker", "versions": ["0.1.25"], "edges": [{"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "stacker", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1.24", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["stacker@0.1.25"], "reference_lines": 3, "references": ["crates/perry-hir/src/lower/lower_expr.rs:95", "crates/perry-hir/src/lower_decl/body_stmt.rs:85", "crates/perry-hir/src/lower_types.rs:341"]}], "lock_closure_packages": 44, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "swc_bundler", "versions": ["37.0.0"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_bundler", "kind": "normal", "target": null, "optional": false, "requirement": "^37.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_bundler@37.0.0"], "reference_lines": 1, "references": ["crates/perry-ext-typescript/src/bun.rs:24"]}], "lock_closure_packages": 206, "lock_packages_lost_if_all_workspace_edges_removed": ["auto_impl@1.3.0", "crc-catalog@1.1.1", "crc@2.1.0", "dashmap@5.5.3", "fixedbitset@0.5.7", "petgraph@0.7.1", "radix_fmt@1.0.0", "relative-path@1.9.3", "swc_bundler@37.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_graph_analyzer@14.0.2"]}, -{"name": "swc_common", "versions": ["18.0.1"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_common", "kind": "normal", "target": null, "optional": false, "requirement": "^18.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_common@18.0.1"], "reference_lines": 3, "references": ["crates/perry-ext-typescript/src/bun.rs:28", "crates/perry-ext-typescript/src/bun.rs:205", "crates/perry-ext-typescript/src/lib.rs:14"]}, {"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "swc_common", "kind": "normal", "target": null, "optional": false, "requirement": "^18.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_common@18.0.1"], "reference_lines": 44, "references": ["crates/perry-hir/src/destructuring/var_decl.rs:4", "crates/perry-hir/src/error.rs:8", "crates/perry-hir/src/eval_classifier.rs:704", "crates/perry-hir/src/eval_classifier.rs:744", "crates/perry-hir/src/lower/builder_fold.rs:401", "crates/perry-hir/src/lower/const_fold_fn.rs:51"]}, {"owner": "perry-parser", "manifest": "crates/perry-parser/Cargo.toml", "alias": "swc_common", "kind": "normal", "target": null, "optional": false, "requirement": "^18.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_common@18.0.1"], "reference_lines": 11, "references": ["crates/perry-parser/src/defines.rs:6", "crates/perry-parser/src/defines.rs:229", "crates/perry-parser/src/lib.rs:9", "crates/perry-parser/src/lib.rs:20", "crates/perry-parser/src/lib.rs:129", "crates/perry-parser/src/lib.rs:142"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "swc_common", "kind": "normal", "target": null, "optional": false, "requirement": "^18.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_common@18.0.1"], "reference_lines": 2, "references": ["crates/perry/src/commands/compile/collect_modules/import_meta_require.rs:13", "crates/perry/src/commands/lower_diagnostic.rs:96"]}], "lock_closure_packages": 96, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "swc_ecma_ast", "versions": ["19.0.0"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_ecma_ast", "kind": "normal", "target": null, "optional": false, "requirement": "^19.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_ast@19.0.0"], "reference_lines": 8, "references": ["crates/perry-ext-typescript/src/bun.rs:32", "crates/perry-ext-typescript/src/bun.rs:345", "crates/perry-ext-typescript/src/bun.rs:358", "crates/perry-ext-typescript/src/bun.rs:404", "crates/perry-ext-typescript/src/bun.rs:407", "crates/perry-ext-typescript/src/bun.rs:410"]}, {"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "swc_ecma_ast", "kind": "normal", "target": null, "optional": false, "requirement": "^19.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_ast@19.0.0"], "reference_lines": 5, "references": ["crates/perry-hir/src/lower/context.rs:411", "crates/perry-hir/src/lower/context.rs:413", "crates/perry-hir/src/lower/lowering_context.rs:67", "crates/perry-hir/src/lower/typed_parse.rs:16", "crates/perry-hir/src/lower_types/extract.rs:284"]}, {"owner": "perry-parser", "manifest": "crates/perry-parser/Cargo.toml", "alias": "swc_ecma_ast", "kind": "normal", "target": null, "optional": false, "requirement": "^19.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_ast@19.0.0"], "reference_lines": 12, "references": ["crates/perry-parser/src/lib.rs:10", "crates/perry-parser/src/lib.rs:17", "crates/perry-parser/src/lib.rs:134", "crates/perry-parser/src/lib.rs:1487", "crates/perry-parser/src/lib.rs:1492", "crates/perry-parser/src/lib.rs:1519"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "swc_ecma_ast", "kind": "normal", "target": null, "optional": false, "requirement": "^19.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_ast@19.0.0"], "reference_lines": 26, "references": ["crates/perry/src/commands/check.rs:573", "crates/perry/src/commands/check.rs:580", "crates/perry/src/commands/check.rs:636", "crates/perry/src/commands/check.rs:657", "crates/perry/src/commands/check.rs:661", "crates/perry/src/commands/compile/collect_modules/import_meta_require.rs:15"]}], "lock_closure_packages": 113, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "swc_ecma_codegen", "versions": ["21.0.0"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_ecma_codegen", "kind": "normal", "target": null, "optional": false, "requirement": "^21.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_codegen@21.0.0"], "reference_lines": 2, "references": ["crates/perry-ext-typescript/src/bun.rs:36", "crates/perry-ext-typescript/src/lib.rs:19"]}, {"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "swc_ecma_codegen", "kind": "dev", "target": null, "optional": false, "requirement": "^21.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_codegen@21.0.0"], "reference_lines": 1, "references": ["crates/perry-hir/examples/solid_jsx.rs:26"]}], "lock_closure_packages": 179, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "swc_ecma_loader", "versions": ["18.0.0"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_ecma_loader", "kind": "normal", "target": null, "optional": false, "requirement": "^18.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_loader@18.0.0"], "reference_lines": 1, "references": ["crates/perry-ext-typescript/src/bun.rs:37"]}], "lock_closure_packages": 98, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "swc_ecma_parser", "versions": ["29.0.2", "32.0.0"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_ecma_parser", "kind": "normal", "target": null, "optional": false, "requirement": "^32.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_parser@32.0.0"], "reference_lines": 2, "references": ["crates/perry-ext-typescript/src/bun.rs:38", "crates/perry-ext-typescript/src/lib.rs:20"]}, {"owner": "perry-parser", "manifest": "crates/perry-parser/Cargo.toml", "alias": "swc_ecma_parser", "kind": "normal", "target": null, "optional": false, "requirement": "^32.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_parser@32.0.0"], "reference_lines": 3, "references": ["crates/perry-parser/src/lib.rs:11", "crates/perry-parser/src/lib.rs:145", "crates/perry-parser/src/lib.rs:322"]}], "lock_closure_packages": 128, "lock_packages_lost_if_all_workspace_edges_removed": ["swc_ecma_parser@32.0.0"]}, -{"name": "swc_ecma_transforms_base", "versions": ["32.0.0"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_ecma_transforms_base", "kind": "normal", "target": null, "optional": false, "requirement": "^32.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_transforms_base@32.0.0"], "reference_lines": 2, "references": ["crates/perry-ext-typescript/src/bun.rs:39", "crates/perry-ext-typescript/src/lib.rs:21"]}, {"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "swc_ecma_transforms_base", "kind": "normal", "target": null, "optional": false, "requirement": "^32.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_transforms_base@32.0.0"], "reference_lines": 2, "references": ["crates/perry-hir/examples/solid_jsx.rs:25", "crates/perry-hir/src/solid_jsx.rs:51"]}, {"owner": "perry-parser", "manifest": "crates/perry-parser/Cargo.toml", "alias": "swc_ecma_transforms_base", "kind": "normal", "target": null, "optional": false, "requirement": "^32.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_transforms_base@32.0.0"], "reference_lines": 1, "references": ["crates/perry-parser/src/defines.rs:41"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "swc_ecma_transforms_base", "kind": "normal", "target": null, "optional": false, "requirement": "^32.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_transforms_base@32.0.0"], "reference_lines": 1, "references": ["crates/perry/src/commands/compile/collect_modules/import_meta_require.rs:16"]}], "lock_closure_packages": 128, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "swc_ecma_transforms_react", "versions": ["35.0.0"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_ecma_transforms_react", "kind": "normal", "target": null, "optional": false, "requirement": "^35.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_transforms_react@35.0.0"], "reference_lines": 2, "references": ["crates/perry-ext-typescript/src/bun.rs:40", "crates/perry-ext-typescript/src/lib.rs:22"]}], "lock_closure_packages": 146, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "swc_ecma_transforms_typescript", "versions": ["35.0.0"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_ecma_transforms_typescript", "kind": "normal", "target": null, "optional": false, "requirement": "^35.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_transforms_typescript@35.0.0"], "reference_lines": 2, "references": ["crates/perry-ext-typescript/src/bun.rs:41", "crates/perry-ext-typescript/src/lib.rs:23"]}], "lock_closure_packages": 147, "lock_packages_lost_if_all_workspace_edges_removed": ["swc_ecma_transforms_typescript@35.0.0"]}, -{"name": "swc_ecma_visit", "versions": ["19.0.0"], "edges": [{"owner": "perry-ext-typescript", "manifest": "crates/perry-ext-typescript/Cargo.toml", "alias": "swc_ecma_visit", "kind": "normal", "target": null, "optional": false, "requirement": "^19.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_visit@19.0.0"], "reference_lines": 1, "references": ["crates/perry-ext-typescript/src/bun.rs:42"]}, {"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "swc_ecma_visit", "kind": "normal", "target": null, "optional": false, "requirement": "^19.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_visit@19.0.0"], "reference_lines": 6, "references": ["crates/perry-hir/examples/solid_jsx.rs:4", "crates/perry-hir/src/lower/builder_fold.rs:44", "crates/perry-hir/src/lower/expr_object.rs:720", "crates/perry-hir/src/lower/pre_scan/class_decl_names.rs:26", "crates/perry-hir/src/lower_decl/helpers.rs:819", "crates/perry-hir/src/solid_jsx.rs:10"]}, {"owner": "perry-parser", "manifest": "crates/perry-parser/Cargo.toml", "alias": "swc_ecma_visit", "kind": "normal", "target": null, "optional": false, "requirement": "^19.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_visit@19.0.0"], "reference_lines": 2, "references": ["crates/perry-parser/src/defines.rs:8", "crates/perry-parser/src/lib.rs:12"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "swc_ecma_visit", "kind": "normal", "target": null, "optional": false, "requirement": "^19.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["swc_ecma_visit@19.0.0"], "reference_lines": 4, "references": ["crates/perry/src/commands/compile/collect_modules/import_meta_require.rs:17", "crates/perry/src/commands/compile/collect_modules/import_meta_resolve.rs:7", "crates/perry/src/commands/compile/collect_modules/reexport_prune/scan.rs:10", "crates/perry/src/commands/compile/collect_modules_helpers.rs:73"]}], "lock_closure_packages": 114, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "taffy", "versions": ["0.13.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "taffy", "kind": "normal", "target": null, "optional": false, "requirement": "^0.13", "default_features": false, "features": ["std", "flexbox", "taffy_tree"], "direct_feature_activators": [], "resolved": ["taffy@0.13.0"], "reference_lines": 24, "references": ["crates/perry-runtime/src/tui/layout.rs:18", "crates/perry-runtime/src/tui/layout.rs:19", "crates/perry-runtime/src/tui/layout.rs:41", "crates/perry-runtime/src/tui/layout.rs:55", "crates/perry-runtime/src/tui/layout.rs:90", "crates/perry-runtime/src/tui/layout.rs:134"]}], "lock_closure_packages": 11, "lock_packages_lost_if_all_workspace_edges_removed": ["slotmap@1.1.1", "taffy@0.13.0"]}, -{"name": "tar", "versions": ["0.4.46"], "edges": [{"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "tar", "kind": "normal", "target": null, "optional": false, "requirement": "^0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tar@0.4.46"], "reference_lines": 9, "references": ["crates/perry/src/commands/publish/tarball.rs:143", "crates/perry/src/commands/publish/tarball.rs:156", "crates/perry/src/commands/publish/tarball.rs:276", "crates/perry/src/commands/publish/tarball.rs:403", "crates/perry/src/commands/publish/tarball.rs:426", "crates/perry/src/commands/publish/tarball.rs:436"]}], "lock_closure_packages": 17, "lock_packages_lost_if_all_workspace_edges_removed": ["tar@0.4.46", "xattr@1.6.1"]}, -{"name": "tempfile", "versions": ["3.27.0"], "edges": [{"owner": "perry-doc-tests", "manifest": "crates/perry-doc-tests/Cargo.toml", "alias": "tempfile", "kind": "dev", "target": null, "optional": false, "requirement": "^3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tempfile@3.27.0"], "reference_lines": 5, "references": ["crates/perry-doc-tests/src/image_diff.rs:171", "crates/perry-doc-tests/src/image_diff.rs:183", "crates/perry-doc-tests/src/image_diff.rs:197", "crates/perry-doc-tests/src/tests.rs:31", "crates/perry-doc-tests/tests/compiler_environment.rs:7"]}, {"owner": "perry-ext-parcel-watcher", "manifest": "crates/perry-ext-parcel-watcher/Cargo.toml", "alias": "tempfile", "kind": "dev", "target": null, "optional": false, "requirement": "^3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tempfile@3.27.0"], "reference_lines": 5, "references": ["crates/perry-ext-parcel-watcher/src/lib.rs:938", "crates/perry-ext-parcel-watcher/src/lib.rs:971", "crates/perry-ext-parcel-watcher/src/lib.rs:993", "crates/perry-ext-parcel-watcher/src/lib.rs:1039", "crates/perry-ext-parcel-watcher/src/lib.rs:1113"]}, {"owner": "perry-ui", "manifest": "crates/perry-ui/Cargo.toml", "alias": "tempfile", "kind": "normal", "target": "cfg(any(target_os = \"macos\", target_os = \"windows\", target_os = \"linux\"))", "optional": false, "requirement": "^3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tempfile@3.27.0"], "reference_lines": 3, "references": ["crates/perry-ui/src/frame.rs:124", "crates/perry-ui/src/frame.rs:161", "crates/perry-ui/src/frame.rs:197"]}, {"owner": "perry-updater", "manifest": "crates/perry-updater/Cargo.toml", "alias": "tempfile", "kind": "dev", "target": null, "optional": false, "requirement": "^3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tempfile@3.27.0"], "reference_lines": 1, "references": ["crates/perry-updater/src/cli_manifest.rs:261"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "tempfile", "kind": "normal", "target": null, "optional": false, "requirement": "^3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tempfile@3.27.0"], "reference_lines": 1006, "references": ["crates/perry/src/commands/attest.rs:188", "crates/perry/src/commands/attest.rs:189", "crates/perry/src/commands/attest.rs:237", "crates/perry/src/commands/check.rs:774", "crates/perry/src/commands/compile/app_metadata.rs:232", "crates/perry/src/commands/compile/app_metadata.rs:257"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "tempfile", "kind": "dev", "target": null, "optional": false, "requirement": "^3", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tempfile@3.27.0"], "reference_lines": 1006, "references": ["crates/perry/src/commands/attest.rs:188", "crates/perry/src/commands/attest.rs:189", "crates/perry/src/commands/attest.rs:237", "crates/perry/src/commands/check.rs:774", "crates/perry/src/commands/compile/app_metadata.rs:232", "crates/perry/src/commands/compile/app_metadata.rs:257"]}], "lock_closure_packages": 70, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "temporal_rs", "versions": ["0.2.6"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "temporal_rs", "kind": "normal", "target": null, "optional": true, "requirement": "^0.2.3", "default_features": false, "features": ["std", "compiled_data"], "direct_feature_activators": ["temporal"], "resolved": ["temporal_rs@0.2.6"], "reference_lines": 69, "references": ["crates/perry-runtime/src/temporal/dispatch.rs:207", "crates/perry-runtime/src/temporal/dispatch.rs:221", "crates/perry-runtime/src/temporal/duration.rs:14", "crates/perry-runtime/src/temporal/instant.rs:10", "crates/perry-runtime/src/temporal/instant.rs:11", "crates/perry-runtime/src/temporal/mod.rs:59"]}], "lock_closure_packages": 77, "lock_packages_lost_if_all_workspace_edges_removed": ["ixdtf@0.6.5", "temporal_rs@0.2.6"]}, -{"name": "thiserror", "versions": ["1.0.69", "2.0.18"], "edges": [{"owner": "perry-codegen", "manifest": "crates/perry-codegen/Cargo.toml", "alias": "thiserror", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["thiserror@1.0.69"], "reference_lines": 0, "references": []}, {"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "thiserror", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["thiserror@1.0.69"], "reference_lines": 1, "references": ["crates/perry-container-compose/src/error.rs:7"]}, {"owner": "perry-hir", "manifest": "crates/perry-hir/Cargo.toml", "alias": "thiserror", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["thiserror@1.0.69"], "reference_lines": 0, "references": []}, {"owner": "perry-parser", "manifest": "crates/perry-parser/Cargo.toml", "alias": "thiserror", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["thiserror@1.0.69"], "reference_lines": 0, "references": []}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "thiserror", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["thiserror@1.0.69"], "reference_lines": 0, "references": []}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "thiserror", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["thiserror@1.0.69"], "reference_lines": 0, "references": []}, {"owner": "perry-transform", "manifest": "crates/perry-transform/Cargo.toml", "alias": "thiserror", "kind": "normal", "target": null, "optional": false, "requirement": "^1.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["thiserror@1.0.69"], "reference_lines": 0, "references": []}], "lock_closure_packages": 8, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "time", "versions": ["0.3.55"], "edges": [{"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "time", "kind": "normal", "target": null, "optional": false, "requirement": "^0.3", "default_features": true, "features": ["parsing"], "direct_feature_activators": [], "resolved": ["time@0.3.55"], "reference_lines": 6, "references": ["crates/perry-ext-node-forge/src/crypto.rs:41", "crates/perry-ext-node-forge/src/crypto.rs:308", "crates/perry-ext-node-forge/src/crypto.rs:309", "crates/perry-ext-node-forge/src/lib.rs:211", "crates/perry-ext-node-forge/tests/openssl_e2e.rs:47", "crates/perry-ext-node-forge/tests/openssl_e2e.rs:48"]}], "lock_closure_packages": 35, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "timezone_provider", "versions": ["0.2.6"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "timezone_provider", "kind": "normal", "target": null, "optional": true, "requirement": "^0.2.6", "default_features": false, "features": ["tzif"], "direct_feature_activators": ["intl-datetime"], "resolved": ["timezone_provider@0.2.6"], "reference_lines": 4, "references": ["crates/perry-runtime/src/date.rs:324", "crates/perry-runtime/src/date.rs:326", "crates/perry-runtime/src/date.rs:336", "crates/perry-runtime/src/date.rs:349"]}], "lock_closure_packages": 60, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "tiny_http", "versions": ["0.12.0"], "edges": [{"owner": "perry-ui-geisterhand", "manifest": "crates/perry-ui-geisterhand/Cargo.toml", "alias": "tiny_http", "kind": "normal", "target": null, "optional": false, "requirement": "^0.12", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tiny_http@0.12.0"], "reference_lines": 2, "references": ["crates/perry-ui-geisterhand/src/server.rs:6", "crates/perry-ui-geisterhand/src/server.rs:213"]}], "lock_closure_packages": 5, "lock_packages_lost_if_all_workspace_edges_removed": ["chunked_transfer@1.5.0", "tiny_http@0.12.0"]}, -{"name": "tokio", "versions": ["1.53.1"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 52, "references": ["crates/perry-container-compose/src/backend/cli_backend.rs:11", "crates/perry-container-compose/src/backend/cli_backend.rs:37", "crates/perry-container-compose/src/backend/detect.rs:5", "crates/perry-container-compose/src/backend/detect.rs:31", "crates/perry-container-compose/src/backend/detect.rs:54", "crates/perry-container-compose/src/backend/detect.rs:91"]}, {"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "tokio", "kind": "dev", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 52, "references": ["crates/perry-container-compose/src/backend/cli_backend.rs:11", "crates/perry-container-compose/src/backend/cli_backend.rs:37", "crates/perry-container-compose/src/backend/detect.rs:5", "crates/perry-container-compose/src/backend/detect.rs:31", "crates/perry-container-compose/src/backend/detect.rs:54", "crates/perry-container-compose/src/backend/detect.rs:91"]}, {"owner": "perry-ext-axios", "manifest": "crates/perry-ext-axios/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 1, "references": ["crates/perry-ext-axios/src/lib.rs:94"]}, {"owner": "perry-ext-fastify", "manifest": "crates/perry-ext-fastify/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 8, "references": ["crates/perry-ext-fastify/src/lib.rs:582", "crates/perry-ext-fastify/src/lib.rs:799", "crates/perry-ext-fastify/src/server.rs:23", "crates/perry-ext-fastify/src/server.rs:24", "crates/perry-ext-fastify/src/server.rs:342", "crates/perry-ext-fastify/src/server.rs:357"]}, {"owner": "perry-ext-fetch", "manifest": "crates/perry-ext-fetch/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 5, "references": ["crates/perry-ext-fetch/src/lib.rs:375", "crates/perry-ext-fetch/src/lib.rs:539", "crates/perry-ext-fetch/src/lib.rs:850", "crates/perry-ext-fetch/src/lib.rs:890", "crates/perry-ext-fetch/src/lib.rs:902"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 86, "references": ["crates/perry-ext-http/src/agent.rs:838", "crates/perry-ext-http/src/client_dispatch.rs:62", "crates/perry-ext-http/src/client_dispatch.rs:71", "crates/perry-ext-http/src/client_outgoing.rs:182", "crates/perry-ext-http/src/client_outgoing.rs:187", "crates/perry-ext-http/src/client_outgoing.rs:189"]}, {"owner": "perry-ext-ioredis", "manifest": "crates/perry-ext-ioredis/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 7, "references": ["crates/perry-ext-ioredis/src/lib.rs:92", "crates/perry-ext-ioredis/src/lib.rs:158", "crates/perry-ext-ioredis/src/lib.rs:160", "crates/perry-ext-ioredis/src/lib.rs:180", "crates/perry-ext-ioredis/src/lib.rs:408", "crates/perry-ext-ioredis/src/lib.rs:411"]}, {"owner": "perry-ext-mongodb", "manifest": "crates/perry-ext-mongodb/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 14, "references": ["crates/perry-ext-mongodb/src/lib.rs:168", "crates/perry-ext-mongodb/src/lib.rs:217", "crates/perry-ext-mongodb/src/lib.rs:324", "crates/perry-ext-mongodb/src/lib.rs:367", "crates/perry-ext-mongodb/src/lib.rs:419", "crates/perry-ext-mongodb/src/lib.rs:462"]}, {"owner": "perry-ext-mysql2", "manifest": "crates/perry-ext-mysql2/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 20, "references": ["crates/perry-ext-mysql2/src/lib.rs:28", "crates/perry-ext-mysql2/src/lib.rs:826", "crates/perry-ext-mysql2/src/lib.rs:836", "crates/perry-ext-mysql2/src/lib.rs:870", "crates/perry-ext-mysql2/src/lib.rs:879", "crates/perry-ext-mysql2/src/lib.rs:927"]}, {"owner": "perry-ext-net", "manifest": "crates/perry-ext-net/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 47, "references": ["crates/perry-ext-net/src/adopt.rs:11", "crates/perry-ext-net/src/adopt.rs:29", "crates/perry-ext-net/src/adopt.rs:79", "crates/perry-ext-net/src/buffer_pool.rs:333", "crates/perry-ext-net/src/buffer_pool.rs:334", "crates/perry-ext-net/src/buffer_pool.rs:353"]}, {"owner": "perry-ext-nodemailer", "manifest": "crates/perry-ext-nodemailer/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 2, "references": ["crates/perry-ext-nodemailer/src/lib.rs:233", "crates/perry-ext-nodemailer/src/lib.rs:283"]}, {"owner": "perry-ext-pg", "manifest": "crates/perry-ext-pg/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 8, "references": ["crates/perry-ext-pg/src/lib.rs:368", "crates/perry-ext-pg/src/lib.rs:396", "crates/perry-ext-pg/src/lib.rs:417", "crates/perry-ext-pg/src/lib.rs:452", "crates/perry-ext-pg/src/lib.rs:504", "crates/perry-ext-pg/src/lib.rs:623"]}, {"owner": "perry-ext-ws", "manifest": "crates/perry-ext-ws/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 13, "references": ["crates/perry-ext-ws/src/lib.rs:53", "crates/perry-ext-ws/src/lib.rs:286", "crates/perry-ext-ws/src/lib.rs:341", "crates/perry-ext-ws/src/lib.rs:369", "crates/perry-ext-ws/src/lib.rs:399", "crates/perry-ext-ws/src/lib.rs:406"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": true, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": ["async-runtime"], "resolved": ["tokio@1.53.1"], "reference_lines": 110, "references": ["crates/perry-stdlib/src/bcrypt.rs:36", "crates/perry-stdlib/src/bcrypt.rs:109", "crates/perry-stdlib/src/bcrypt.rs:151", "crates/perry-stdlib/src/common/async_bridge.rs:21", "crates/perry-stdlib/src/common/async_bridge.rs:136", "crates/perry-stdlib/src/common/async_bridge.rs:146"]}, {"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "tokio", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "^1", "default_features": true, "features": ["rt", "sync", "time", "net", "io-util"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 3, "references": ["crates/perry-ui-gtk4/src/media_playback.rs:568", "crates/perry-ui-gtk4/src/media_playback.rs:618", "crates/perry-ui-gtk4/src/tray.rs:52"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "tokio", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": ["full"], "direct_feature_activators": [], "resolved": ["tokio@1.53.1"], "reference_lines": 13, "references": ["crates/perry/src/commands/audit.rs:453", "crates/perry/src/commands/compile/optimized_libs/no_auto.rs:295", "crates/perry/src/commands/compile/shared_tokio.rs:325", "crates/perry/src/commands/compile/shared_tokio.rs:327", "crates/perry/src/commands/login.rs:36", "crates/perry/src/commands/login.rs:137"]}], "lock_closure_packages": 36, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "tokio-cron-scheduler", "versions": ["0.15.1"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "tokio_cron_scheduler", "kind": "normal", "target": null, "optional": true, "requirement": "^0.15", "default_features": true, "features": [], "direct_feature_activators": ["bundled-cron"], "resolved": ["tokio-cron-scheduler@0.15.1"], "reference_lines": 0, "references": []}], "lock_closure_packages": 137, "lock_packages_lost_if_all_workspace_edges_removed": ["chrono-tz@0.10.4", "croner@3.0.1", "darling@0.20.11", "darling_core@0.20.11", "darling_macro@0.20.11", "derive_builder@0.20.2", "derive_builder_core@0.20.2", "derive_builder_macro@0.20.2", "phf@0.12.1", "phf_shared@0.12.1", "strum@0.27.2", "strum_macros@0.27.2", "tokio-cron-scheduler@0.15.1"]}, -{"name": "tokio-rustls", "versions": ["0.26.4"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "tokio_rustls", "kind": "normal", "target": null, "optional": false, "requirement": "^0.26", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tokio-rustls@0.26.4"], "reference_lines": 2, "references": ["crates/perry-ext-http/src/server/http2_server.rs:34", "crates/perry-ext-http/src/server/https_server.rs:24"]}, {"owner": "perry-ext-net", "manifest": "crates/perry-ext-net/Cargo.toml", "alias": "tokio_rustls", "kind": "normal", "target": null, "optional": false, "requirement": "^0.26", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tokio-rustls@0.26.4"], "reference_lines": 3, "references": ["crates/perry-ext-net/src/tls.rs:9", "crates/perry-ext-net/src/tls.rs:12", "crates/perry-ext-net/src/transport.rs:15"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "tokio_rustls", "kind": "normal", "target": null, "optional": true, "requirement": "^0.26", "default_features": true, "features": [], "direct_feature_activators": ["external-tls-server", "tls-runtime"], "resolved": ["tokio-rustls@0.26.4"], "reference_lines": 3, "references": ["crates/perry-stdlib/src/net/mod.rs:48", "crates/perry-stdlib/src/net/mod.rs:52", "crates/perry-stdlib/src/tls.rs:25"]}], "lock_closure_packages": 86, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "tokio-tungstenite", "versions": ["0.29.0"], "edges": [{"owner": "perry-ext-fastify", "manifest": "crates/perry-ext-fastify/Cargo.toml", "alias": "tokio_tungstenite", "kind": "normal", "target": null, "optional": false, "requirement": "^0.29", "default_features": true, "features": ["rustls-tls-webpki-roots"], "direct_feature_activators": [], "resolved": ["tokio-tungstenite@0.29.0"], "reference_lines": 3, "references": ["crates/perry-ext-fastify/src/server.rs:899", "crates/perry-ext-fastify/src/server.rs:911", "crates/perry-ext-fastify/src/server.rs:913"]}, {"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "tokio_tungstenite", "kind": "normal", "target": null, "optional": false, "requirement": "^0.29", "default_features": true, "features": ["rustls-tls-webpki-roots"], "direct_feature_activators": [], "resolved": ["tokio-tungstenite@0.29.0"], "reference_lines": 3, "references": ["crates/perry-ext-http/src/server/server.rs:1369", "crates/perry-ext-http/src/server/server.rs:1395", "crates/perry-ext-http/src/server/server.rs:1397"]}, {"owner": "perry-ext-ws", "manifest": "crates/perry-ext-ws/Cargo.toml", "alias": "tokio_tungstenite", "kind": "normal", "target": null, "optional": false, "requirement": "^0.29", "default_features": true, "features": ["rustls-tls-webpki-roots"], "direct_feature_activators": [], "resolved": ["tokio-tungstenite@0.29.0"], "reference_lines": 7, "references": ["crates/perry-ext-ws/src/lib.rs:54", "crates/perry-ext-ws/src/lib.rs:368", "crates/perry-ext-ws/src/lib.rs:369", "crates/perry-ext-ws/src/lib.rs:396", "crates/perry-ext-ws/src/lib.rs:776", "crates/perry-ext-ws/src/lib.rs:913"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "tokio_tungstenite", "kind": "normal", "target": null, "optional": true, "requirement": "^0.29", "default_features": true, "features": ["rustls-tls-webpki-roots"], "direct_feature_activators": ["bundled-ws"], "resolved": ["tokio-tungstenite@0.29.0"], "reference_lines": 2, "references": ["crates/perry-stdlib/src/ws.rs:19", "crates/perry-stdlib/src/ws.rs:1109"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "tokio_tungstenite", "kind": "normal", "target": null, "optional": false, "requirement": "^0.29", "default_features": true, "features": ["rustls-tls-webpki-roots"], "direct_feature_activators": [], "resolved": ["tokio-tungstenite@0.29.0"], "reference_lines": 5, "references": ["crates/perry/src/commands/publish/mod.rs:15", "crates/perry/src/commands/publish/mod.rs:1572", "crates/perry/src/commands/publish/mod.rs:1650", "crates/perry/src/commands/run/remote.rs:24", "crates/perry/src/commands/run/remote.rs:219"]}], "lock_closure_packages": 112, "lock_packages_lost_if_all_workspace_edges_removed": ["tokio-tungstenite@0.29.0", "tungstenite@0.29.0"]}, -{"name": "toml", "versions": ["1.1.4+spec-1.1.0"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "toml", "kind": "normal", "target": null, "optional": true, "requirement": "^1.1", "default_features": true, "features": [], "direct_feature_activators": ["bun-cli-utils"], "resolved": ["toml@1.1.4+spec-1.1.0"], "reference_lines": 1, "references": ["crates/perry-runtime/src/bun_compat/cli_utils.rs:157"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "toml", "kind": "normal", "target": null, "optional": false, "requirement": "^1.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["toml@1.1.4+spec-1.1.0"], "reference_lines": 151, "references": ["crates/perry/src/commands/appstore.rs:62", "crates/perry/src/commands/appstore.rs:130", "crates/perry/src/commands/compile/app_metadata.rs:39", "crates/perry/src/commands/compile/app_metadata.rs:48", "crates/perry/src/commands/compile/app_metadata.rs:86", "crates/perry/src/commands/compile/app_metadata.rs:199"]}], "lock_closure_packages": 19, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "tracing", "versions": ["0.1.44"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "tracing", "kind": "normal", "target": null, "optional": false, "requirement": "^0.1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["tracing@0.1.44"], "reference_lines": 9, "references": ["crates/perry-container-compose/src/backend/cli_backend.rs:107", "crates/perry-container-compose/src/compose.rs:273", "crates/perry-container-compose/src/compose.rs:630", "crates/perry-container-compose/src/compose.rs:644", "crates/perry-container-compose/src/compose.rs:875", "crates/perry-container-compose/src/orchestrate.rs:32"]}], "lock_closure_packages": 13, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "tracing-subscriber", "versions": ["0.3.23"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "tracing_subscriber", "kind": "normal", "target": null, "optional": false, "requirement": "^0.3", "default_features": true, "features": ["env-filter"], "direct_feature_activators": [], "resolved": ["tracing-subscriber@0.3.23"], "reference_lines": 1, "references": ["crates/perry-container-compose/src/main.rs:5"]}], "lock_closure_packages": 35, "lock_packages_lost_if_all_workspace_edges_removed": ["matchers@0.2.0", "nu-ansi-term@0.50.3", "sharded-slab@0.1.7", "thread_local@1.1.9", "tracing-log@0.2.0", "tracing-subscriber@0.3.23"]}, -{"name": "tungstenite", "versions": ["0.24.0", "0.29.0"], "edges": [{"owner": "perry-ui-android", "manifest": "crates/perry-ui-android/Cargo.toml", "alias": "tungstenite", "kind": "normal", "target": "cfg(target_os = \"android\")", "optional": false, "requirement": "^0.24", "default_features": true, "features": ["rustls-tls-webpki-roots"], "direct_feature_activators": [], "resolved": ["tungstenite@0.24.0"], "reference_lines": 3, "references": ["crates/perry-ui-android/src/ws.rs:16", "crates/perry-ui-android/src/ws.rs:17", "crates/perry-ui-android/src/ws.rs:130"]}], "lock_closure_packages": 98, "lock_packages_lost_if_all_workspace_edges_removed": ["tungstenite@0.24.0"]}, -{"name": "unicode-normalization", "versions": ["0.1.25"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "unicode_normalization", "kind": "normal", "target": null, "optional": true, "requirement": "^0.1", "default_features": true, "features": [], "direct_feature_activators": ["string-normalize"], "resolved": ["unicode-normalization@0.1.25"], "reference_lines": 5, "references": ["crates/perry-runtime/src/intl/date_collator.rs:1512", "crates/perry-runtime/src/intl/date_collator.rs:1603", "crates/perry-runtime/src/string/compare.rs:688", "crates/perry-runtime/src/string/compare.rs:730", "crates/perry-runtime/src/string/locale.rs:154"]}], "lock_closure_packages": 3, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "unicode-segmentation", "versions": ["1.13.3"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "unicode_segmentation", "kind": "normal", "target": null, "optional": true, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": ["intl-segmenter"], "resolved": ["unicode-segmentation@1.13.3"], "reference_lines": 3, "references": ["crates/perry-runtime/src/intl/segmenter.rs:8", "crates/perry-runtime/src/intl/segments_view.rs:206", "crates/perry-runtime/src/intl/segments_view.rs:628"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "unsafe-libyaml", "versions": ["0.2.11"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "unsafe_libyaml", "kind": "normal", "target": null, "optional": true, "requirement": "^0.2.11", "default_features": true, "features": [], "direct_feature_activators": ["bun-cli-utils"], "resolved": ["unsafe-libyaml@0.2.11"], "reference_lines": 55, "references": ["crates/perry-runtime/src/bun_compat/cli_utils.rs:729", "crates/perry-runtime/src/bun_compat/cli_utils.rs:734", "crates/perry-runtime/src/bun_compat/cli_utils.rs:768", "crates/perry-runtime/src/bun_compat/cli_utils.rs:778", "crates/perry-runtime/src/bun_compat/cli_utils.rs:796", "crates/perry-runtime/src/bun_compat/cli_utils.rs:801"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "url", "versions": ["2.5.8"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "url", "kind": "normal", "target": null, "optional": true, "requirement": "^2", "default_features": true, "features": [], "direct_feature_activators": ["url-engine"], "resolved": ["url@2.5.8"], "reference_lines": 238, "references": ["crates/perry-runtime/src/array/flat_clone.rs:532", "crates/perry-runtime/src/array/flat_clone.rs:533", "crates/perry-runtime/src/array/iter_object.rs:434", "crates/perry-runtime/src/array/iter_object.rs:436", "crates/perry-runtime/src/array/iter_object.rs:437", "crates/perry-runtime/src/array/iter_object.rs:438"]}, {"owner": "perry-validation", "manifest": "crates/perry-validation/Cargo.toml", "alias": "url", "kind": "normal", "target": null, "optional": false, "requirement": "^2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["url@2.5.8"], "reference_lines": 1, "references": ["crates/perry-validation/src/lib.rs:73"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "url", "kind": "normal", "target": null, "optional": false, "requirement": "^2", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["url@2.5.8"], "reference_lines": 46, "references": ["crates/perry/src/commands/compile/collect_modules/import_meta_resolve.rs:77", "crates/perry/src/commands/compile/collect_modules/import_meta_resolve.rs:103", "crates/perry/src/commands/compile/collect_modules/import_meta_resolve.rs:115", "crates/perry/src/commands/compile/collect_modules/worker.rs:20", "crates/perry/src/commands/compile/run_pipeline.rs:2970", "crates/perry/src/commands/compile/run_pipeline.rs:2972"]}], "lock_closure_packages": 37, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "uuid", "versions": ["1.26.0"], "edges": [{"owner": "perry-ext-nodemailer", "manifest": "crates/perry-ext-nodemailer/Cargo.toml", "alias": "uuid", "kind": "normal", "target": null, "optional": false, "requirement": "^1.23", "default_features": true, "features": ["v4"], "direct_feature_activators": [], "resolved": ["uuid@1.26.0"], "reference_lines": 1, "references": ["crates/perry-ext-nodemailer/src/lib.rs:237"]}, {"owner": "perry-ext-uuid", "manifest": "crates/perry-ext-uuid/Cargo.toml", "alias": "uuid", "kind": "normal", "target": null, "optional": false, "requirement": "^1.23", "default_features": true, "features": ["v1", "v3", "v4", "v5", "v7"], "direct_feature_activators": [], "resolved": ["uuid@1.26.0"], "reference_lines": 2, "references": ["crates/perry-ext-uuid/src/lib.rs:7", "crates/perry-ext-uuid/src/lib.rs:20"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "uuid", "kind": "normal", "target": null, "optional": true, "requirement": "^1.23", "default_features": true, "features": ["v4", "v1", "v3", "v5", "v7"], "direct_feature_activators": ["bundled-uuid"], "resolved": ["uuid@1.26.0"], "reference_lines": 7, "references": ["crates/perry-stdlib/src/crypto/random.rs:129", "crates/perry-stdlib/src/crypto/random.rs:142", "crates/perry-stdlib/src/lib.rs:431", "crates/perry-stdlib/src/lib.rs:433", "crates/perry-stdlib/src/nodemailer.rs:272", "crates/perry-stdlib/src/uuid.rs:7"]}], "lock_closure_packages": 81, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "validator", "versions": ["0.21.0"], "edges": [{"owner": "perry-validation", "manifest": "crates/perry-validation/Cargo.toml", "alias": "validator", "kind": "dev", "target": null, "optional": false, "requirement": "=0.21.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["validator@0.21.0"], "reference_lines": 1, "references": ["crates/perry-validation/src/tests.rs:2"]}], "lock_closure_packages": 51, "lock_packages_lost_if_all_workspace_edges_removed": ["validator@0.21.0"]}, -{"name": "walkdir", "versions": ["2.5.0"], "edges": [{"owner": "perry-doc-tests", "manifest": "crates/perry-doc-tests/Cargo.toml", "alias": "walkdir", "kind": "normal", "target": null, "optional": false, "requirement": "^2.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["walkdir@2.5.0"], "reference_lines": 2, "references": ["crates/perry-doc-tests/src/lint.rs:20", "crates/perry-doc-tests/src/main.rs:368"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "walkdir", "kind": "normal", "target": null, "optional": false, "requirement": "^2.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["walkdir@2.5.0"], "reference_lines": 13, "references": ["crates/perry/src/commands/audit.rs:11", "crates/perry/src/commands/check.rs:12", "crates/perry/src/commands/compile/asset_modules.rs:68", "crates/perry/src/commands/compile/build_cache.rs:782", "crates/perry/src/commands/compile/embed.rs:294", "crates/perry/src/commands/compile/link/harmonyos_objects.rs:55"]}], "lock_closure_packages": 5, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "wasm-encoder", "versions": ["0.244.0", "0.258.0"], "edges": [{"owner": "perry-codegen-wasm", "manifest": "crates/perry-codegen-wasm/Cargo.toml", "alias": "wasm_encoder", "kind": "normal", "target": null, "optional": false, "requirement": "^0.258", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["wasm-encoder@0.258.0"], "reference_lines": 203, "references": ["crates/perry-codegen-wasm/src/emit/compile.rs:1235", "crates/perry-codegen-wasm/src/emit/compile.rs:1245", "crates/perry-codegen-wasm/src/emit/compile.rs:1288", "crates/perry-codegen-wasm/src/emit/compile.rs:1296", "crates/perry-codegen-wasm/src/emit/compile.rs:1454", "crates/perry-codegen-wasm/src/emit/compile.rs:1461"]}], "lock_closure_packages": 21, "lock_packages_lost_if_all_workspace_edges_removed": ["wasm-encoder@0.258.0", "wasmparser@0.258.0"]}, -{"name": "wasmi", "versions": ["1.1.0"], "edges": [{"owner": "perry-wasm-host", "manifest": "crates/perry-wasm-host/Cargo.toml", "alias": "wasmi", "kind": "normal", "target": null, "optional": false, "requirement": "^1.1", "default_features": false, "features": ["simd"], "direct_feature_activators": [], "resolved": ["wasmi@1.1.0"], "reference_lines": 8, "references": ["crates/perry-wasm-host/src/host_runtime.rs:12", "crates/perry-wasm-host/src/lib.rs:21", "crates/perry-wasm-host/src/lib.rs:104", "crates/perry-wasm-host/src/lib.rs:120", "crates/perry-wasm-host/src/lib.rs:567", "crates/perry-wasm-host/src/lib.rs:568"]}], "lock_closure_packages": 16, "lock_packages_lost_if_all_workspace_edges_removed": ["wasmi@1.1.0", "wasmi_collections@1.1.0", "wasmi_core@1.1.0", "wasmi_ir@1.1.0", "wasmparser@0.239.0"]}, -{"name": "webkit6", "versions": ["0.4.0"], "edges": [{"owner": "perry-ui-gtk4", "manifest": "crates/perry-ui-gtk4/Cargo.toml", "alias": "webkit6", "kind": "normal", "target": "cfg(target_os = \"linux\")", "optional": false, "requirement": "=0.4", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["webkit6@0.4.0"], "reference_lines": 11, "references": ["crates/perry-ui-gtk4/src/widgets/webview.rs:14", "crates/perry-ui-gtk4/src/widgets/webview.rs:25", "crates/perry-ui-gtk4/src/widgets/webview.rs:86", "crates/perry-ui-gtk4/src/widgets/webview.rs:96", "crates/perry-ui-gtk4/src/widgets/webview.rs:101", "crates/perry-ui-gtk4/src/widgets/webview.rs:137"]}], "lock_closure_packages": 83, "lock_packages_lost_if_all_workspace_edges_removed": ["javascriptcore6-sys@0.4.0", "javascriptcore6@0.4.0", "soup3-sys@0.7.0", "soup3@0.7.0", "webkit6-sys@0.4.0", "webkit6@0.4.0"]}, -{"name": "webpki-roots", "versions": ["0.26.11", "1.0.9"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "webpki_roots", "kind": "normal", "target": null, "optional": false, "requirement": "^1", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["webpki-roots@1.0.9"], "reference_lines": 1, "references": ["crates/perry-ext-http/src/tls_client.rs:543"]}], "lock_closure_packages": 35, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "webview2-com", "versions": ["0.39.1"], "edges": [{"owner": "perry-ui-windows", "manifest": "crates/perry-ui-windows/Cargo.toml", "alias": "webview2_com", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "=0.39", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["webview2-com@0.39.1"], "reference_lines": 3, "references": ["crates/perry-ui-windows/src/widgets/webview.rs:35", "crates/perry-ui-windows/src/widgets/webview.rs:37", "crates/perry-ui-windows/src/widgets/webview.rs:447"]}], "lock_closure_packages": 20, "lock_packages_lost_if_all_workspace_edges_removed": ["webview2-com-macros@0.8.1", "webview2-com-sys@0.39.1", "webview2-com@0.39.1"]}, -{"name": "which", "versions": ["8.0.6"], "edges": [{"owner": "perry-container-compose", "manifest": "crates/perry-container-compose/Cargo.toml", "alias": "which", "kind": "normal", "target": null, "optional": false, "requirement": "^8.0", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["which@8.0.6"], "reference_lines": 1, "references": ["crates/perry-container-compose/src/backend/detect.rs:149"]}], "lock_closure_packages": 2, "lock_packages_lost_if_all_workspace_edges_removed": ["which@8.0.6"]}, -{"name": "windows", "versions": ["0.35.0", "0.62.2"], "edges": [{"owner": "perry-ui-windows-winui", "manifest": "crates/perry-ui-windows-winui/Cargo.toml", "alias": "windows", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^0.62", "default_features": true, "features": ["Win32_Foundation"], "direct_feature_activators": [], "resolved": ["windows@0.62.2"], "reference_lines": 3, "references": ["crates/perry-ui-windows-winui/src/app.rs:7", "crates/perry-ui-windows-winui/src/app.rs:200", "crates/perry-ui-windows-winui/src/widgets.rs:5"]}, {"owner": "perry-ui-windows", "manifest": "crates/perry-ui-windows/Cargo.toml", "alias": "windows", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^0.62", "default_features": true, "features": ["Win32_Foundation", "Win32_UI_WindowsAndMessaging", "Win32_UI_Controls", "Win32_UI_Input_KeyboardAndMouse", "Win32_Graphics_Gdi", "Win32_System_LibraryLoader", "Win32_System_DataExchange", "Win32_System_Ole", "Win32_System_Com", "Win32_System_Com_StructuredStorage", "Win32_System_Memory", "Win32_System_SystemServices", "Win32_UI_HiDpi", "Win32_UI_Shell", "Win32_UI_Shell_Common", "Win32_UI_HiDpi", "Win32_System_Registry", "Win32_Storage_Xps", "Win32_Media_Audio", "Win32_System_Threading", "Win32_System_SystemInformation", "Win32_Graphics_GdiPlus", "Media_Playback", "Media_Core", "Foundation", "Media", "Data_Pdf", "Storage", "Storage_Streams", "Win32_Networking_WinHttp"], "direct_feature_activators": [], "resolved": ["windows@0.62.2"], "reference_lines": 547, "references": ["crates/perry-ui-windows/src/app.rs:13", "crates/perry-ui-windows/src/app.rs:15", "crates/perry-ui-windows/src/app.rs:17", "crates/perry-ui-windows/src/app.rs:19", "crates/perry-ui-windows/src/app.rs:21", "crates/perry-ui-windows/src/app.rs:23"]}, {"owner": "perry-ui-windows", "manifest": "crates/perry-ui-windows/Cargo.toml", "alias": "windows_xaml", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^0.35", "default_features": true, "features": ["Foundation", "Foundation_Collections", "Devices_Geolocation", "UI_Xaml", "UI_Xaml_Controls", "UI_Xaml_Controls_Maps", "UI_Xaml_Hosting", "Win32_Foundation", "Win32_System_WinRT_Xaml", "Win32_UI_WindowsAndMessaging"], "direct_feature_activators": [], "resolved": ["windows@0.35.0"], "reference_lines": 9, "references": ["crates/perry-ui-windows/src/widgets/map_view.rs:28", "crates/perry-ui-windows/src/widgets/map_view.rs:30", "crates/perry-ui-windows/src/widgets/map_view.rs:32", "crates/perry-ui-windows/src/widgets/map_view.rs:34", "crates/perry-ui-windows/src/widgets/map_view.rs:36", "crates/perry-ui-windows/src/widgets/map_view.rs:111"]}], "lock_closure_packages": 21, "lock_packages_lost_if_all_workspace_edges_removed": ["windows@0.35.0", "windows_aarch64_msvc@0.35.0", "windows_i686_gnu@0.35.0", "windows_i686_msvc@0.35.0", "windows_x86_64_gnu@0.35.0", "windows_x86_64_msvc@0.35.0"]}, -{"name": "windows-core", "versions": ["0.62.2"], "edges": [{"owner": "perry-ui-windows", "manifest": "crates/perry-ui-windows/Cargo.toml", "alias": "windows_core", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "^0.62", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["windows-core@0.62.2"], "reference_lines": 0, "references": []}], "lock_closure_packages": 16, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "windows-reactor", "versions": ["0.0.0"], "edges": [{"owner": "perry-ui-windows-winui", "manifest": "crates/perry-ui-windows-winui/Cargo.toml", "alias": "windows_reactor", "kind": "normal", "target": "cfg(target_os = \"windows\")", "optional": false, "requirement": "*", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["windows-reactor@0.0.0 [vendored]"], "reference_lines": 3, "references": ["crates/perry-ui-windows-winui/src/app.rs:8", "crates/perry-ui-windows-winui/src/app.rs:9", "crates/perry-ui-windows-winui/src/widgets.rs:6"]}], "lock_closure_packages": 18, "lock_packages_lost_if_all_workspace_edges_removed": ["windows-collections@0.3.2 [vendored]", "windows-core@0.62.2 [vendored]", "windows-future@0.3.2 [vendored]", "windows-implement@0.60.2 [vendored]", "windows-interface@0.59.3 [vendored]", "windows-link@0.2.1 [vendored]", "windows-numerics@0.3.1 [vendored]", "windows-reactor@0.0.0 [vendored]", "windows-reference@0.1.0 [vendored]", "windows-result@0.4.1 [vendored]", "windows-strings@0.5.1 [vendored]", "windows-threading@0.2.1 [vendored]", "windows-time@0.1.0 [vendored]"]}, -{"name": "windows-sys", "versions": ["0.48.0", "0.52.0", "0.59.0", "0.60.2", "0.61.2"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "windows_sys", "kind": "normal", "target": "cfg(windows)", "optional": false, "requirement": "^0.61", "default_features": true, "features": ["Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_Foundation", "Win32_NetworkManagement_IpHelper", "Win32_NetworkManagement_Ndis", "Win32_Networking_WinSock", "Win32_System_LibraryLoader", "Win32_System_IO", "Win32_System_Pipes", "Win32_System_Threading"], "direct_feature_activators": [], "resolved": ["windows-sys@0.61.2"], "reference_lines": 60, "references": ["crates/perry-runtime/src/child_process/ipc_transport.rs:14", "crates/perry-runtime/src/child_process/ipc_transport.rs:18", "crates/perry-runtime/src/child_process/ipc_transport.rs:19", "crates/perry-runtime/src/child_process/ipc_transport.rs:20", "crates/perry-runtime/src/child_process/ipc_transport.rs:21", "crates/perry-runtime/src/child_process/reactor/kill.rs:20"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "windows_sys", "kind": "normal", "target": "cfg(windows)", "optional": false, "requirement": "^0.61", "default_features": true, "features": ["Win32_System_Console", "Win32_Foundation"], "direct_feature_activators": [], "resolved": ["windows-sys@0.61.2"], "reference_lines": 3, "references": ["crates/perry-stdlib/src/readline/mod.rs:1329", "crates/perry-stdlib/src/readline/mod.rs:1354", "crates/perry-stdlib/src/readline/mod.rs:1400"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "windows_sys", "kind": "normal", "target": "cfg(windows)", "optional": false, "requirement": "^0.61", "default_features": true, "features": ["Win32_Foundation", "Win32_Storage_FileSystem", "Win32_System_Threading"], "direct_feature_activators": [], "resolved": ["windows-sys@0.61.2"], "reference_lines": 4, "references": ["crates/perry/src/update_checker.rs:1165", "crates/perry/src/update_checker.rs:1214", "crates/perry/src/update_checker.rs:1215", "crates/perry/src/update_checker.rs:1216"]}], "lock_closure_packages": 32, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "winresource", "versions": ["0.1.31"], "edges": [{"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "winresource", "kind": "build", "target": null, "optional": false, "requirement": "^0.1.31", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["winresource@0.1.31"], "reference_lines": 1, "references": ["crates/perry/build.rs:11"]}], "lock_closure_packages": 21, "lock_packages_lost_if_all_workspace_edges_removed": ["winresource@0.1.31"]}, -{"name": "writeable", "versions": ["0.6.4"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "writeable", "kind": "normal", "target": null, "optional": true, "requirement": "^0.6", "default_features": true, "features": [], "direct_feature_activators": ["intl-datetime"], "resolved": ["writeable@0.6.4"], "reference_lines": 1, "references": ["crates/perry-runtime/src/intl/icu_dtf.rs:18"]}], "lock_closure_packages": 9, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "x25519-dalek", "versions": ["2.0.1"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "x25519_dalek", "kind": "normal", "target": null, "optional": true, "requirement": "^2.0", "default_features": true, "features": ["static_secrets"], "direct_feature_activators": ["crypto"], "resolved": ["x25519-dalek@2.0.1"], "reference_lines": 18, "references": ["crates/perry-stdlib/src/crypto/sign.rs:552", "crates/perry-stdlib/src/crypto/sign.rs:553", "crates/perry-stdlib/src/crypto/sign.rs:598", "crates/perry-stdlib/src/crypto/sign.rs:599", "crates/perry-stdlib/src/crypto/sign.rs:630", "crates/perry-stdlib/src/crypto/sign.rs:631"]}], "lock_closure_packages": 50, "lock_packages_lost_if_all_workspace_edges_removed": ["x25519-dalek@2.0.1"]}, -{"name": "x448", "versions": ["0.14.0-pre.12"], "edges": [{"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "x448", "kind": "normal", "target": null, "optional": true, "requirement": "^0.14.0-pre.9", "default_features": true, "features": ["static_secrets"], "direct_feature_activators": ["crypto"], "resolved": ["x448@0.14.0-pre.12"], "reference_lines": 6, "references": ["crates/perry-stdlib/src/webcrypto/hmac.rs:523", "crates/perry-stdlib/src/webcrypto/hmac.rs:524", "crates/perry-stdlib/src/webcrypto/jwk.rs:939", "crates/perry-stdlib/src/webcrypto/jwk.rs:940", "crates/perry-stdlib/src/webcrypto/keys.rs:370", "crates/perry-stdlib/src/webcrypto/keys.rs:371"]}], "lock_closure_packages": 101, "lock_packages_lost_if_all_workspace_edges_removed": ["x448@0.14.0-pre.12"]}, -{"name": "x509-cert", "versions": ["0.3.0"], "edges": [{"owner": "perry-ext-http", "manifest": "crates/perry-ext-http/Cargo.toml", "alias": "x509_cert", "kind": "normal", "target": null, "optional": false, "requirement": "^0.3", "default_features": false, "features": [], "direct_feature_activators": [], "resolved": ["x509-cert@0.3.0"], "reference_lines": 12, "references": ["crates/perry-ext-http/src/tls_client.rs:441", "crates/perry-ext-http/src/tls_client.rs:455", "crates/perry-ext-http/src/tls_client.rs:481", "crates/perry-ext-http/src/tls_client.rs:483", "crates/perry-ext-http/src/tls_client.rs:486", "crates/perry-ext-http/src/tls_client.rs:489"]}, {"owner": "perry-ext-node-forge", "manifest": "crates/perry-ext-node-forge/Cargo.toml", "alias": "x509_cert", "kind": "normal", "target": null, "optional": false, "requirement": "^0.3", "default_features": true, "features": ["builder", "hazmat"], "direct_feature_activators": [], "resolved": ["x509-cert@0.3.0"], "reference_lines": 18, "references": ["crates/perry-ext-node-forge/src/crypto.rs:28", "crates/perry-ext-node-forge/src/crypto.rs:29", "crates/perry-ext-node-forge/src/crypto.rs:30", "crates/perry-ext-node-forge/src/crypto.rs:31", "crates/perry-ext-node-forge/src/crypto.rs:32", "crates/perry-ext-node-forge/src/crypto.rs:33"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "x509_cert", "kind": "normal", "target": null, "optional": false, "requirement": "^0.3", "default_features": false, "features": [], "direct_feature_activators": [], "resolved": ["x509-cert@0.3.0"], "reference_lines": 12, "references": ["crates/perry-runtime/src/tls.rs:472", "crates/perry-runtime/src/tls.rs:473", "crates/perry-runtime/src/tls.rs:475", "crates/perry-runtime/src/tls.rs:479", "crates/perry-runtime/src/tls.rs:484", "crates/perry-runtime/src/tls.rs:493"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "x509_cert", "kind": "normal", "target": null, "optional": true, "requirement": "^0.3", "default_features": false, "features": ["pem"], "direct_feature_activators": ["crypto", "external-tls-server", "tls-runtime"], "resolved": ["x509-cert@0.3.0"], "reference_lines": 62, "references": ["crates/perry-stdlib/src/crypto/x509.rs:5", "crates/perry-stdlib/src/crypto/x509.rs:32", "crates/perry-stdlib/src/crypto/x509.rs:44", "crates/perry-stdlib/src/crypto/x509.rs:45", "crates/perry-stdlib/src/crypto/x509.rs:50", "crates/perry-stdlib/src/crypto/x509.rs:54"]}], "lock_closure_packages": 86, "lock_packages_lost_if_all_workspace_edges_removed": ["tls_codec@0.4.2", "tls_codec_derive@0.4.2", "x509-cert@0.3.0"]}, -{"name": "xxhash-rust", "versions": ["0.8.18"], "edges": [{"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "xxhash_rust", "kind": "normal", "target": null, "optional": true, "requirement": "^0.8.15", "default_features": true, "features": ["xxh64"], "direct_feature_activators": ["bun-cli-utils"], "resolved": ["xxhash-rust@0.8.18"], "reference_lines": 1, "references": ["crates/perry-runtime/src/bun_compat/cli_utils.rs:565"]}], "lock_closure_packages": 1, "lock_packages_lost_if_all_workspace_edges_removed": []}, -{"name": "zip", "versions": ["8.6.0"], "edges": [{"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "zip", "kind": "normal", "target": null, "optional": false, "requirement": "^8", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["zip@8.6.0"], "reference_lines": 12, "references": ["crates/perry/src/commands/harmonyos_hap.rs:53", "crates/perry/src/commands/harmonyos_hap.rs:54", "crates/perry/src/commands/harmonyos_hap.rs:635", "crates/perry/src/commands/harmonyos_hap.rs:795", "crates/perry/src/commands/run/remote.rs:622", "crates/perry/src/update_checker.rs:961"]}], "lock_closure_packages": 115, "lock_packages_lost_if_all_workspace_edges_removed": ["bzip2@0.6.1", "constant_time_eq@0.4.2", "deflate64@0.1.12", "libbz2-rs-sys@0.2.5", "lzma-rust2@0.16.4", "ppmd-rust@1.4.0", "typed-path@0.12.3", "zip@8.6.0", "zopfli@0.8.3"]}, -{"name": "zstd", "versions": ["0.13.3"], "edges": [{"owner": "perry-ext-zlib", "manifest": "crates/perry-ext-zlib/Cargo.toml", "alias": "zstd", "kind": "normal", "target": null, "optional": false, "requirement": "^0.13", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["zstd@0.13.3"], "reference_lines": 11, "references": ["crates/perry-ext-zlib/src/stream.rs:243", "crates/perry-ext-zlib/src/stream.rs:262", "crates/perry-ext-zlib/src/stream.rs:276", "crates/perry-ext-zlib/src/stream.rs:287", "crates/perry-ext-zlib/src/stream.rs:344", "crates/perry-ext-zlib/src/stream.rs:345"]}, {"owner": "perry-runtime", "manifest": "crates/perry-runtime/Cargo.toml", "alias": "zstd", "kind": "normal", "target": null, "optional": true, "requirement": "^0.13", "default_features": true, "features": [], "direct_feature_activators": ["bun-cli-utils"], "resolved": ["zstd@0.13.3"], "reference_lines": 10, "references": ["crates/perry-runtime/src/bun_compat/cli_utils.rs:539", "crates/perry-runtime/src/embedded/compressed.rs:8", "crates/perry-runtime/src/embedded/compressed.rs:9", "crates/perry-runtime/src/embedded/compressed.rs:17", "crates/perry-runtime/src/embedded/compressed.rs:94", "crates/perry-runtime/src/embedded/compressed.rs:105"]}, {"owner": "perry-stdlib", "manifest": "crates/perry-stdlib/Cargo.toml", "alias": "zstd", "kind": "normal", "target": null, "optional": true, "requirement": "^0.13.3", "default_features": true, "features": [], "direct_feature_activators": ["compression-zstd"], "resolved": ["zstd@0.13.3"], "reference_lines": 2, "references": ["crates/perry-stdlib/src/zlib.rs:563", "crates/perry-stdlib/src/zlib.rs:568"]}, {"owner": "perry", "manifest": "crates/perry/Cargo.toml", "alias": "zstd", "kind": "normal", "target": null, "optional": false, "requirement": "^0.13", "default_features": true, "features": [], "direct_feature_activators": [], "resolved": ["zstd@0.13.3"], "reference_lines": 5, "references": ["crates/perry/src/commands/compile/compressed_libs.rs:77", "crates/perry/src/commands/compile/embed/compression.rs:31", "crates/perry/src/commands/compile/embed/compression.rs:79", "crates/perry/src/commands/compile/embed/compression.rs:82", "crates/perry/src/commands/run/entry.rs:336"]}], "lock_closure_packages": 42, "lock_packages_lost_if_all_workspace_edges_removed": []} -], -"external_lock_packages": [ -{"package": "adler2@2.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["miniz_oxide@0.8.9", "miniz_oxide@0.9.1"], "dependencies": []}, -{"package": "aead@0.5.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "getrandom", "rand_core"], "parents": ["aes-gcm@0.10.3", "chacha20poly1305@0.10.1"], "dependencies": ["crypto-common@0.1.7", "generic-array@0.14.7"]}, -{"package": "aes-gcm@0.10.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["aes", "alloc", "default", "getrandom", "rand_core"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["aead@0.5.2", "aes@0.8.4", "cipher@0.4.4", "ctr@0.9.2", "ghash@0.5.1", "subtle@2.6.1"]}, -{"package": "aes-kw@0.3.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "oid"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["aes@0.9.1", "const-oid@0.10.2"]}, -{"package": "aes@0.8.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["aes-gcm@0.10.3", "lopdf@0.39.0", "perry-stdlib@0.5.1565", "pkcs5@0.7.1"], "dependencies": ["cfg-if@1.0.4", "cipher@0.4.4", "cpufeatures@0.2.17"]}, -{"package": "aes@0.9.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["aes-kw@0.3.1", "perry-stdlib@0.5.1565", "zip@8.6.0"], "dependencies": ["cipher@0.5.2", "cpubits@0.1.1", "cpufeatures@0.3.0"]}, -{"package": "ahash@0.8.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "getrandom", "runtime-rng", "std"], "parents": ["bson@3.1.0", "hashbrown@0.14.5", "perry-runtime@0.5.1565"], "dependencies": ["cfg-if@1.0.4", "getrandom@0.3.4", "once_cell@1.21.4", "version_check@0.9.5", "zerocopy@0.8.50"]}, -{"package": "aho-corasick@1.1.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "perf-literal", "std"], "parents": ["perry-codegen@0.5.1565", "regex-automata@0.4.18", "regex@1.13.1"], "dependencies": ["memchr@2.8.1"]}, -{"package": "aliasable@0.1.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default"], "parents": ["ouroboros@0.17.2"], "dependencies": []}, -{"package": "aligned-vec@0.6.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["rav1e@0.8.1", "v_frame@0.3.9"], "dependencies": ["equator@0.4.2"]}, -{"package": "aligned@0.4.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["av-scenechange@0.14.1"], "dependencies": ["as-slice@0.2.1"]}, -{"package": "alloc-no-stdlib@2.0.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["alloc-stdlib@0.2.2", "brotli-decompressor@5.0.1", "brotli@8.0.4"], "dependencies": []}, -{"package": "alloc-stdlib@0.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["brotli-decompressor@5.0.1", "brotli@8.0.4"], "dependencies": ["alloc-no-stdlib@2.0.4"]}, -{"package": "allocator-api2@0.2.21", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["bumpalo@3.20.3", "hashbrown@0.14.5", "hashbrown@0.16.1", "hashbrown@0.17.1", "swc_allocator@4.0.1"], "dependencies": []}, -{"package": "allsorts-azul@0.16.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["flate2", "flate2_rust"], "parents": ["printpdf@0.10.1"], "dependencies": ["bitflags@2.12.1", "brotli-decompressor@5.0.1", "encoding_rs@0.8.35", "flate2@1.1.10", "glyph-names@0.2.0", "log@0.4.34", "ouroboros@0.17.2", "pathfinder_geometry@0.5.1", "rustc-hash@1.1.0", "tinyvec@1.11.0", "ucd-trie@0.1.7", "unicode-canonical-combining-class@1.0.0", "unicode-general-category@1.1.0", "unicode-joining-type@1.0.0"]}, -{"package": "android_system_properties@0.1.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["iana-time-zone@0.1.65"], "dependencies": ["libc@0.2.189"]}, -{"package": "anstream@1.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["auto", "default", "wincon"], "parents": ["clap_builder@4.6.6"], "dependencies": ["anstyle-parse@1.0.0", "anstyle-query@1.1.5", "anstyle-wincon@3.0.11", "anstyle@1.0.14", "colorchoice@1.0.5", "is_terminal_polyfill@1.70.2", "utf8parse@0.2.2"]}, -{"package": "anstyle-parse@1.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "utf8"], "parents": ["anstream@1.0.0"], "dependencies": ["utf8parse@0.2.2"]}, -{"package": "anstyle-query@1.1.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["anstream@1.0.0"], "dependencies": ["windows-sys@0.61.2"]}, -{"package": "anstyle-wincon@3.0.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["anstream@1.0.0"], "dependencies": ["anstyle@1.0.14", "once_cell_polyfill@1.70.2", "windows-sys@0.61.2"]}, -{"package": "anstyle@1.0.14", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["anstream@1.0.0", "anstyle-wincon@3.0.11", "clap_builder@4.6.6"], "dependencies": []}, -{"package": "anyhow@1.0.104", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["av-scenechange@0.14.1", "av1-grain@0.2.5", "llvm-sys@221.0.1", "perry-codegen-arkts@0.5.1565", "perry-codegen-glance@0.5.1565", "perry-codegen-js@0.5.1565", "perry-codegen-swiftui@0.5.1565", "perry-codegen-wasm@0.5.1565", "perry-codegen-wear-tiles@0.5.1565", "perry-codegen@0.5.1565", "perry-container-compose@0.5.1565", "perry-container-e2e@0.5.1565", "perry-doc-tests@0.5.1565", "perry-ext-typescript@0.5.1565", "perry-hir@0.5.1565", "perry-parser@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-transform@0.5.1565", "perry-updater@0.5.1565", "perry@0.5.1565", "swc_bundler@37.0.0", "swc_common@18.0.1", "swc_config@3.1.2", "swc_ecma_loader@18.0.0", "wasm-metadata@0.244.0", "wit-bindgen-core@0.51.0", "wit-bindgen-rust-macro@0.51.0", "wit-bindgen-rust@0.51.0", "wit-component@0.244.0", "wit-parser@0.244.0"], "dependencies": []}, -{"package": "ar_archive_writer@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["psm@0.1.32"], "dependencies": ["object@0.37.3"]}, -{"package": "arbitrary@1.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["libfuzzer-sys@0.4.12", "rav1e@0.8.1"], "dependencies": []}, -{"package": "arc-swap@1.9.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["redis@1.6.0"], "dependencies": ["rustversion@1.0.22"]}, -{"package": "arcstr@1.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "substr"], "parents": ["redis@1.6.0"], "dependencies": []}, -{"package": "arg_enum_proc_macro@0.3.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["av-scenechange@0.14.1", "rav1e@0.8.1"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "argon2@0.5.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "password-hash", "rand"], "parents": ["perry-ext-argon2@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["base64ct@1.8.3", "blake2@0.10.6", "cpufeatures@0.2.17", "password-hash@0.5.0"]}, -{"package": "arrayvec@0.7.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["av-scenechange@0.14.1", "av1-grain@0.2.5", "avif-serialize@0.8.9", "rav1e@0.8.1", "rust_decimal@1.43.0", "taffy@0.13.0"], "dependencies": []}, -{"package": "as-slice@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["aligned@0.4.3"], "dependencies": ["stable_deref_trait@1.2.1"]}, -{"package": "ascii@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["swc_ecma_codegen@21.0.0", "tiny_http@0.12.0"], "dependencies": []}, -{"package": "ast_node@5.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_common@18.0.1"], "dependencies": ["quote@1.0.45", "swc_macros_common@1.0.1", "syn@2.0.117"]}, -{"package": "async-broadcast@0.7.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zbus@5.16.0"], "dependencies": ["event-listener-strategy@0.5.4", "event-listener@5.4.1", "futures-core@0.3.34", "pin-project-lite@0.2.17"]}, -{"package": "async-channel@2.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["async-process@2.5.0", "blocking@1.6.2", "mpris-server@0.10.0"], "dependencies": ["concurrent-queue@2.5.0", "event-listener-strategy@0.5.4", "futures-core@0.3.34", "pin-project-lite@0.2.17"]}, -{"package": "async-executor@1.14.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zbus@5.16.0"], "dependencies": ["async-task@4.7.1", "concurrent-queue@2.5.0", "fastrand@2.4.1", "futures-lite@2.6.1", "pin-project-lite@0.2.17", "slab@0.4.12"]}, -{"package": "async-io@2.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["async-process@2.5.0", "async-signal@0.2.14", "zbus@5.16.0"], "dependencies": ["autocfg@1.5.1", "cfg-if@1.0.4", "concurrent-queue@2.5.0", "futures-io@0.3.34", "futures-lite@2.6.1", "parking@2.2.1", "polling@3.11.0", "rustix@1.1.4", "slab@0.4.12", "windows-sys@0.61.2"]}, -{"package": "async-lock@3.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["async-process@2.5.0", "async-signal@0.2.14", "redis@1.6.0", "zbus@5.16.0"], "dependencies": ["event-listener-strategy@0.5.4", "event-listener@5.4.1", "pin-project-lite@0.2.17"]}, -{"package": "async-process@2.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zbus@5.16.0"], "dependencies": ["async-channel@2.5.0", "async-io@2.6.0", "async-lock@3.4.2", "async-signal@0.2.14", "async-task@4.7.1", "blocking@1.6.2", "cfg-if@1.0.4", "event-listener@5.4.1", "futures-lite@2.6.1", "rustix@1.1.4"]}, -{"package": "async-recursion@1.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zbus@5.16.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "async-signal@0.2.14", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["async-process@2.5.0"], "dependencies": ["async-io@2.6.0", "async-lock@3.4.2", "atomic-waker@1.1.2", "cfg-if@1.0.4", "futures-core@0.3.34", "futures-io@0.3.34", "rustix@1.1.4", "signal-hook-registry@1.4.8", "slab@0.4.12", "windows-sys@0.61.2"]}, -{"package": "async-task@4.7.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["async-executor@1.14.0", "async-process@2.5.0", "blocking@1.6.2", "zbus@5.16.0"], "dependencies": []}, -{"package": "async-trait@0.1.92", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["hickory-net@0.26.1", "lettre@0.11.23", "perry-container-compose@0.5.1565", "zbus@5.16.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@3.0.3"]}, -{"package": "atoi@2.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0"], "dependencies": ["num-traits@0.2.19"]}, -{"package": "atomic-waker@1.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["async-signal@0.2.14", "h2@0.4.19", "hyper@1.11.1", "piper@0.2.5"], "dependencies": []}, -{"package": "atomic@0.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["uuid@1.26.0"], "dependencies": ["bytemuck@1.25.0"]}, -{"package": "atomic_refcell@0.1.14", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["gstreamer-base@0.25.2"], "dependencies": []}, -{"package": "atty@0.2.14", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-container-compose@0.5.1565"], "dependencies": ["hermit-abi@0.1.19", "libc@0.2.189", "winapi@0.3.9"]}, -{"package": "auto_impl@1.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_graph_analyzer@14.0.2"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "autocfg@1.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["async-io@2.6.0", "memoffset@0.9.1", "num-iter@0.1.45", "num-traits@0.2.19", "smartstring@1.0.1"], "dependencies": []}, -{"package": "av-scenechange@0.14.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rav1e@0.8.1"], "dependencies": ["aligned@0.4.3", "anyhow@1.0.104", "arg_enum_proc_macro@0.3.4", "arrayvec@0.7.6", "log@0.4.34", "num-rational@0.4.2", "num-traits@0.2.19", "pastey@0.1.1", "rayon@1.12.0", "thiserror@2.0.18", "v_frame@0.3.9", "y4m@0.8.0"]}, -{"package": "av1-grain@0.2.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["create", "default", "diff", "estimate", "nom", "num-rational", "parse", "v_frame"], "parents": ["rav1e@0.8.1"], "dependencies": ["anyhow@1.0.104", "arrayvec@0.7.6", "log@0.4.34", "nom@8.0.0", "num-rational@0.4.2", "v_frame@0.3.9"]}, -{"package": "avif-serialize@0.8.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ravif@0.13.0"], "dependencies": ["arrayvec@0.7.6"]}, -{"package": "aws-lc-rs@1.17.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["aws-lc-sys", "prebuilt-nasm"], "parents": ["rustls-webpki@0.103.13", "rustls@0.23.43"], "dependencies": ["aws-lc-sys@0.41.0", "zeroize@1.8.2"]}, -{"package": "aws-lc-sys@0.41.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["prebuilt-nasm"], "parents": ["aws-lc-rs@1.17.0"], "dependencies": ["cc@1.4.4", "cmake@0.1.58", "dunce@1.0.5", "fs_extra@1.3.0"]}, -{"package": "backon@1.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["redis@1.6.0"], "dependencies": ["fastrand@2.4.1"]}, -{"package": "base16ct@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["elliptic-curve@0.13.8", "p521@0.13.3", "sec1@0.7.3"], "dependencies": []}, -{"package": "base16ct@1.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["elliptic-curve@0.14.0", "sec1@0.8.1", "serdect@0.4.3"], "dependencies": []}, -{"package": "base64-simd@0.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "detect", "std"], "parents": ["swc_sourcemap@9.3.4"], "dependencies": ["outref@0.5.2", "vsimd@0.8.0"]}, -{"package": "base64@0.22.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "std"], "parents": ["bson@3.1.0", "email-encoding@0.4.1", "hyper-util@0.1.20", "jsonwebtoken@11.0.0", "mongodb@3.8.2", "pem@3.0.6", "perry-codegen-wasm@0.5.1565", "perry-ext-http@0.5.1565", "perry-ext-jsonwebtoken@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-ui-android@0.5.1565", "perry-ui-gtk4@0.5.1565", "perry-ui-ios@0.5.1565", "perry-ui-macos@0.5.1565", "perry-ui-tvos@0.5.1565", "perry-ui-visionos@0.5.1565", "perry-ui-windows-winui@0.5.1565", "perry-ui-windows@0.5.1565", "perry-updater@0.5.1565", "perry@0.5.1565", "printpdf@0.10.1", "reqwest@0.12.28", "sqlx-core@0.9.0", "sqlx-postgres@0.9.0", "swc_ecma_transforms_react@35.0.0"], "dependencies": []}, -{"package": "base64@0.23.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "simd-unsafe", "std"], "parents": ["bcrypt@0.19.3", "lettre@0.11.23", "pem@4.0.0"], "dependencies": []}, -{"package": "base64ct@1.8.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "std"], "parents": ["argon2@0.5.3", "password-hash@0.5.0", "pem-rfc7468@0.7.0", "pem-rfc7468@1.0.0", "spki@0.7.3", "spki@0.8.0"], "dependencies": []}, -{"package": "bcrypt@0.19.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "getrandom", "std", "zeroize"], "parents": ["perry-ext-bcrypt@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["base64@0.23.1", "blowfish@0.10.0", "getrandom@0.4.2", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "better_scoped_tls@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_common@18.0.1", "swc_ecma_transforms_base@32.0.0"], "dependencies": ["scoped-tls@1.0.1"]}, -{"package": "bindgen@0.72.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["runtime"], "parents": ["libsqlite3-sys@0.37.0"], "dependencies": ["bitflags@2.12.1", "cexpr@0.6.0", "clang-sys@1.8.1", "itertools@0.12.1", "proc-macro2@1.0.106", "quote@1.0.45", "regex@1.13.1", "rustc-hash@2.1.2", "shlex@1.3.0", "syn@2.0.117"]}, -{"package": "bit-set@0.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["proptest@1.11.0"], "dependencies": ["bit-vec@0.8.0"]}, -{"package": "bit-vec@0.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["bit-set@0.8.0", "proptest@1.11.0"], "dependencies": []}, -{"package": "bit_field@0.10.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["exr@1.74.0"], "dependencies": []}, -{"package": "bitflags@1.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["inotify@0.9.6"], "dependencies": []}, -{"package": "bitflags@2.12.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["serde", "serde_core", "std"], "parents": ["allsorts-azul@0.16.5", "bindgen@0.72.1", "cairo-rs@0.20.12", "cairo-rs@0.22.9", "dispatch2@0.3.1", "glib@0.20.12", "glib@0.22.7", "inkwell@0.9.0", "kqueue-sys@1.1.2", "lopdf@0.39.0", "mongodb@3.8.2", "notify@6.1.1", "objc2-app-kit@0.3.2", "objc2-cloud-kit@0.3.2", "objc2-core-data@0.3.2", "objc2-core-foundation@0.3.2", "objc2-core-graphics@0.3.2", "objc2-core-text@0.3.2", "objc2-core-video@0.3.2", "objc2-foundation@0.3.2", "objc2-io-surface@0.3.2", "objc2-quartz-core@0.3.2", "objc2-ui-kit@0.3.2", "png@0.18.1", "proptest@1.11.0", "raw-cpuid@11.6.0", "redox_syscall@0.5.18", "rusqlite@0.39.0", "rustix@1.1.4", "security-framework@3.7.0", "selectors@0.38.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "swc_ecma_ast@19.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "system-configuration@0.7.0", "tower-http@0.6.11", "wasmparser@0.239.0", "wasmparser@0.244.0", "wasmparser@0.258.0", "wit-component@0.244.0"], "dependencies": ["serde_core@1.0.229"]}, -{"package": "bitstream-io@4.10.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["rav1e@0.8.1"], "dependencies": ["no_std_io2@0.9.4"]}, -{"package": "bitvec@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "atomic", "default", "std"], "parents": ["bson@3.1.0", "swc_sourcemap@9.3.4"], "dependencies": ["funty@2.0.0", "radium@0.7.0", "tap@1.0.1", "wyz@0.5.1"]}, -{"package": "blake2@0.10.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["argon2@0.5.3"], "dependencies": ["digest@0.10.7"]}, -{"package": "block-buffer@0.10.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["digest@0.10.7"], "dependencies": ["generic-array@0.14.7"]}, -{"package": "block-buffer@0.12.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["zeroize"], "parents": ["digest@0.11.3"], "dependencies": ["hybrid-array@0.4.12", "zeroize@1.8.2"]}, -{"package": "block-padding@0.3.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["inout@0.1.4"], "dependencies": ["generic-array@0.14.7"]}, -{"package": "block-padding@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["inout@0.2.2"], "dependencies": ["hybrid-array@0.4.12"]}, -{"package": "block2@0.6.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "std"], "parents": ["objc2-app-kit@0.3.2", "objc2-core-foundation@0.3.2", "objc2-foundation@0.3.2", "objc2-ui-kit@0.3.2", "perry-ui-ios@0.5.1565", "perry-ui-macos@0.5.1565", "perry-ui-tvos@0.5.1565", "perry-ui-visionos@0.5.1565", "perry-ui-watchos@0.5.1565"], "dependencies": ["objc2@0.6.4"]}, -{"package": "blocking@1.6.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["async-process@2.5.0", "zbus@5.16.0"], "dependencies": ["async-channel@2.5.0", "async-task@4.7.1", "futures-io@0.3.34", "futures-lite@2.6.1", "piper@0.2.5"]}, -{"package": "blowfish@0.10.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["bcrypt"], "parents": ["bcrypt@0.19.3"], "dependencies": ["byteorder@1.5.0", "cipher@0.5.2"]}, -{"package": "borsh-derive@1.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "schema"], "parents": ["borsh@1.6.1"], "dependencies": ["once_cell@1.21.4", "proc-macro-crate@3.5.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "borsh@1.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["borsh-derive", "derive", "std", "unstable__schema"], "parents": ["rust_decimal@1.43.0"], "dependencies": ["borsh-derive@1.6.1", "bytes@1.12.1", "cfg_aliases@0.2.1"]}, -{"package": "brotli-decompressor@5.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc-stdlib", "default", "std"], "parents": ["allsorts-azul@0.16.5", "brotli@8.0.4"], "dependencies": ["alloc-no-stdlib@2.0.4", "alloc-stdlib@0.2.2"]}, -{"package": "brotli@8.0.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc-stdlib", "default", "std"], "parents": ["perry-ext-zlib@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["alloc-no-stdlib@2.0.4", "alloc-stdlib@0.2.2", "brotli-decompressor@5.0.1"]}, -{"package": "bson@3.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["compat-3-0-0", "default", "serde"], "parents": ["mongocrypt@0.4.0", "mongodb@3.8.2", "perry-ext-mongodb@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["ahash@0.8.12", "base64@0.22.1", "bitvec@1.0.1", "getrandom@0.3.4", "hex@0.4.3", "indexmap@2.14.1", "js-sys@0.3.99", "rand@0.9.4", "serde@1.0.229", "serde_bytes@0.11.19", "simdutf8@0.1.5", "thiserror@2.0.18", "time@0.3.55", "uuid@1.26.0"]}, -{"package": "built@0.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rav1e@0.8.1"], "dependencies": []}, -{"package": "bumpalo@3.20.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["allocator-api2", "default"], "parents": ["swc_allocator@4.0.1", "wasm-bindgen-macro-support@0.2.122", "zopfli@0.8.3"], "dependencies": ["allocator-api2@0.2.21"]}, -{"package": "bytecount@0.6.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["node-semver@2.2.0", "nom_locate@5.0.0"], "dependencies": []}, -{"package": "bytemuck@1.25.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["extern_crate_alloc"], "parents": ["atomic@0.6.1", "image@0.25.10", "qoi@0.4.1", "rgb@0.8.53"], "dependencies": []}, -{"package": "byteorder-lite@0.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["image-webp@0.2.4", "image@0.25.10"], "dependencies": []}, -{"package": "byteorder@1.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["blowfish@0.10.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "tungstenite@0.24.0"], "dependencies": []}, -{"package": "bytes-str@0.2.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["serde"], "parents": ["swc_common@18.0.1", "swc_config@3.1.2", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_transforms_typescript@35.0.0", "swc_sourcemap@9.3.4"], "dependencies": ["bytes@1.12.1", "serde@1.0.229"]}, -{"package": "bytes@1.12.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["borsh@1.6.1", "bytes-str@0.2.7", "combine@4.6.7", "h2@0.4.19", "http-body-util@0.1.5", "http-body@1.0.1", "http@1.4.1", "hyper-util@0.1.20", "hyper@1.11.1", "perry-ext-fastify@0.5.1565", "perry-ext-fetch@0.5.1565", "perry-ext-http@0.5.1565", "perry-ext-net@0.5.1565", "perry-stdlib@0.5.1565", "quinn-proto@0.11.15", "quinn@0.11.9", "redis@1.6.0", "reqwest@0.12.28", "rust_decimal@1.43.0", "sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "tokio-util@0.7.18", "tokio@1.53.1", "tower-http@0.6.11", "tungstenite@0.24.0", "tungstenite@0.29.0"], "dependencies": []}, -{"package": "bzip2@0.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["zip@8.6.0"], "dependencies": ["libbz2-rs-sys@0.2.5"]}, -{"package": "cairo-rs@0.20.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "glib", "use_glib"], "parents": ["gdk4@0.9.6", "gsk4@0.9.6", "gtk4@0.9.7"], "dependencies": ["bitflags@2.12.1", "cairo-sys-rs@0.20.10", "glib@0.20.12", "libc@0.2.189"]}, -{"package": "cairo-rs@0.22.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "glib", "use_glib"], "parents": ["perry-ui-gtk4@0.5.1565"], "dependencies": ["bitflags@2.12.1", "cairo-sys-rs@0.22.0", "glib@0.22.7", "libc@0.2.189"]}, -{"package": "cairo-sys-rs@0.20.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["glib-sys", "use_glib"], "parents": ["cairo-rs@0.20.12", "gdk4-sys@0.9.6", "gsk4-sys@0.9.6", "gtk4-sys@0.9.6"], "dependencies": ["glib-sys@0.20.10", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "cairo-sys-rs@0.22.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["glib-sys", "use_glib"], "parents": ["cairo-rs@0.22.9"], "dependencies": ["glib-sys@0.22.6", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "calendrical_calculations@0.2.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_calendar@2.3.0", "icu_time@2.3.0", "temporal_rs@0.2.6"], "dependencies": ["core_maths@0.1.1", "displaydoc@0.2.6"]}, -{"package": "castaway@0.2.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["compact_str@0.7.1"], "dependencies": ["rustversion@1.0.22"]}, -{"package": "cbc@0.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["block-padding", "default"], "parents": ["lopdf@0.39.0", "p12@0.6.3", "pkcs5@0.7.1"], "dependencies": ["cipher@0.4.4"]}, -{"package": "cbc@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["block-padding", "default"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["cipher@0.5.2"]}, -{"package": "cc@1.4.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["parallel"], "parents": ["aws-lc-sys@0.41.0", "cmake@0.1.58", "iana-time-zone-haiku@0.1.2", "libfuzzer-sys@0.4.12", "libmimalloc-sys@0.1.49", "libsqlite3-sys@0.37.0", "llvm-sys@221.0.1", "perry-audio-miniaudio@0.5.1565", "perry-runtime@0.5.1565", "psm@0.1.32", "ring@0.17.14", "sqlite-wasm-rs@0.5.5", "stacker@0.1.25", "zstd-sys@2.0.16+zstd.1.5.7"], "dependencies": ["find-msvc-tools@0.1.11", "jobserver@0.1.34", "libc@0.2.189", "shlex@2.0.1"]}, -{"package": "cexpr@0.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["bindgen@0.72.1"], "dependencies": ["nom@7.1.3"]}, -{"package": "cfg-expr@0.20.8", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "target-lexicon", "targets"], "parents": ["system-deps@7.0.8"], "dependencies": ["smallvec@1.15.1", "target-lexicon@0.13.5"]}, -{"package": "cfg-if@1.0.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["aes@0.8.4", "ahash@0.8.12", "async-io@2.6.0", "async-process@2.5.0", "async-signal@0.2.14", "chacha20@0.10.0", "chacha20@0.9.1", "compact_str@0.7.1", "crc32fast@1.5.0", "curve25519-dalek@4.1.3", "dashmap@5.5.3", "dashmap@6.2.1", "encoding_rs@0.8.35", "etcetera@0.11.0", "fast_image_resize@6.1.0", "filetime@0.2.29", "getrandom@0.2.17", "getrandom@0.3.4", "getrandom@0.4.2", "governor@0.10.4", "gstreamer-base@0.25.2", "gstreamer-sys@0.25.2", "gstreamer@0.25.3", "half@2.7.1", "hickory-net@0.26.1", "hickory-resolver@0.26.1", "hostname@0.4.2", "jni@0.22.4", "js-sys@0.3.99", "keccak@0.2.0", "libloading@0.8.9", "maybe-rayon@0.1.1", "md-5@0.10.6", "md-5@0.11.0", "miette@7.6.0", "parking_lot_core@0.9.12", "polling@3.11.0", "polyval@0.6.2", "rav1e@0.8.1", "redis@1.6.0", "ring@0.17.14", "sha1@0.10.6", "sha1@0.11.0", "sha2@0.10.9", "sha2@0.11.0", "sqlx-core@0.9.0", "sqlx-macros-core@0.9.0", "stacker@0.1.25", "thread_local@1.1.9", "wasm-bindgen@0.2.122"], "dependencies": []}, -{"package": "cfg_aliases@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["borsh@1.6.1", "quinn-udp@0.5.14", "quinn@0.11.9"], "dependencies": []}, -{"package": "chacha20@0.10.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["rng"], "parents": ["rand@0.10.2"], "dependencies": ["cfg-if@1.0.4", "cpufeatures@0.3.0", "rand_core@0.10.1"]}, -{"package": "chacha20@0.9.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["zeroize"], "parents": ["chacha20poly1305@0.10.1"], "dependencies": ["cfg-if@1.0.4", "cipher@0.4.4", "cpufeatures@0.2.17"]}, -{"package": "chacha20poly1305@0.10.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "getrandom", "rand_core"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["aead@0.5.2", "chacha20@0.9.1", "cipher@0.4.4", "poly1305@0.8.0", "zeroize@1.8.2"]}, -{"package": "chrono-tz@0.10.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["tokio-cron-scheduler@0.15.1"], "dependencies": ["chrono@0.4.45", "phf@0.12.1"]}, -{"package": "chrono@0.4.45", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "clock", "default", "iana-time-zone", "js-sys", "now", "oldtime", "serde", "std", "wasm-bindgen", "wasmbind", "winapi", "windows-link"], "parents": ["chrono-tz@0.10.4", "cron@0.17.0", "croner@3.0.1", "perry-ext-cron@0.5.1565", "perry-ext-dayjs@0.5.1565", "perry-ext-moment@0.5.1565", "perry-ext-mysql2@0.5.1565", "perry-stdlib@0.5.1565", "perry@0.5.1565", "sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "tokio-cron-scheduler@0.15.1"], "dependencies": ["iana-time-zone@0.1.65", "js-sys@0.3.99", "num-traits@0.2.19", "serde@1.0.229", "wasm-bindgen@0.2.122", "windows-link@0.2.1"]}, -{"package": "chunked_transfer@1.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tiny_http@0.12.0"], "dependencies": []}, -{"package": "cipher@0.4.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "block-padding", "zeroize"], "parents": ["aes-gcm@0.10.3", "aes@0.8.4", "cbc@0.1.2", "chacha20@0.9.1", "chacha20poly1305@0.10.1", "ctr@0.9.2", "des@0.8.1", "ecb@0.1.2", "p12@0.6.3", "rc2@0.8.1", "salsa20@0.10.2"], "dependencies": ["crypto-common@0.1.7", "inout@0.1.4", "zeroize@1.8.2"]}, -{"package": "cipher@0.5.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["block-padding"], "parents": ["aes@0.9.1", "blowfish@0.10.0", "cbc@0.2.1", "ecb@0.2.1"], "dependencies": ["crypto-common@0.2.2", "inout@0.2.2"]}, -{"package": "clang-sys@1.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["clang_10_0", "clang_11_0", "clang_3_5", "clang_3_6", "clang_3_7", "clang_3_8", "clang_3_9", "clang_4_0", "clang_5_0", "clang_6_0", "clang_7_0", "clang_8_0", "clang_9_0", "libloading", "runtime"], "parents": ["bindgen@0.72.1"], "dependencies": ["glob@0.3.3", "libc@0.2.189", "libloading@0.8.9"]}, -{"package": "clap@4.6.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["color", "default", "derive", "error-context", "help", "std", "suggestions", "usage"], "parents": ["perry-container-compose@0.5.1565", "perry-doc-tests@0.5.1565", "perry-stdlib@0.5.1565", "perry@0.5.1565"], "dependencies": ["clap_builder@4.6.6", "clap_derive@4.6.4"]}, -{"package": "clap_builder@4.6.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["color", "error-context", "help", "std", "suggestions", "usage"], "parents": ["clap@4.6.6"], "dependencies": ["anstream@1.0.0", "anstyle@1.0.14", "clap_lex@1.1.0", "strsim@0.11.1"]}, -{"package": "clap_derive@4.6.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["clap@4.6.6"], "dependencies": ["heck@0.5.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@3.0.3"]}, -{"package": "clap_lex@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["clap_builder@4.6.6"], "dependencies": []}, -{"package": "cmake@0.1.58", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["aws-lc-sys@0.41.0"], "dependencies": ["cc@1.4.4"]}, -{"package": "cmov@0.5.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ctutils@0.4.2"], "dependencies": []}, -{"package": "color_quant@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gif@0.14.2", "image@0.25.10"], "dependencies": []}, -{"package": "colorchoice@1.0.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["anstream@1.0.0"], "dependencies": []}, -{"package": "combine@4.6.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "bytes", "default", "futures-core-03", "pin-project-lite", "std", "tokio", "tokio-dep", "tokio-util"], "parents": ["jni@0.22.4", "redis@1.6.0", "timezone_provider@0.2.6", "tzif@0.4.1"], "dependencies": ["bytes@1.12.1", "futures-core@0.3.34", "memchr@2.8.1", "pin-project-lite@0.2.17", "tokio-util@0.7.18", "tokio@1.53.1"]}, -{"package": "compact_str@0.7.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_codegen@21.0.0"], "dependencies": ["castaway@0.2.4", "cfg-if@1.0.4", "itoa@1.0.18", "ryu@1.0.23", "static_assertions@1.1.0"]}, -{"package": "concurrent-queue@2.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["async-channel@2.5.0", "async-executor@1.14.0", "async-io@2.6.0", "event-listener@5.4.1", "polling@3.11.0"], "dependencies": ["crossbeam-utils@0.8.21"]}, -{"package": "console@0.15.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["ansi-parsing", "default", "unicode-width"], "parents": ["dialoguer@0.11.0"], "dependencies": ["encode_unicode@1.0.0", "libc@0.2.189", "once_cell@1.21.4", "unicode-width@0.2.2", "windows-sys@0.59.0"]}, -{"package": "console@0.16.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "ansi-parsing", "default", "std", "unicode-width"], "parents": ["dialoguer@0.12.0", "indicatif@0.18.6", "perry-container-compose@0.5.1565", "perry@0.5.1565"], "dependencies": ["encode_unicode@1.0.0", "libc@0.2.189", "unicode-width@0.2.2", "windows-sys@0.61.2"]}, -{"package": "const-oid@0.10.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["db"], "parents": ["aes-kw@0.3.1", "der@0.8.1", "digest@0.11.3", "ml-kem@0.3.2", "perry-ext-node-forge@0.5.1565", "rsa@0.10.0-rc.18", "x509-cert@0.3.0"], "dependencies": []}, -{"package": "const-oid@0.9.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["der@0.7.10", "digest@0.10.7", "rsa@0.9.10"], "dependencies": []}, -{"package": "const-random-macro@0.1.16", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["const-random@0.1.18"], "dependencies": ["getrandom@0.2.17", "once_cell@1.21.4", "tiny-keccak@2.0.2"]}, -{"package": "const-random@0.1.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["macro_magic_core@0.5.1"], "dependencies": ["const-random-macro@0.1.16"]}, -{"package": "constant_time_eq@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["zip@8.6.0"], "dependencies": []}, -{"package": "convert_case@0.10.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["derive_more-impl@2.1.1"], "dependencies": ["unicode-segmentation@1.13.3"]}, -{"package": "core-foundation-sys@0.8.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "link"], "parents": ["core-foundation@0.10.1", "core-foundation@0.9.4", "iana-time-zone@0.1.65", "security-framework-sys@2.17.0", "security-framework@3.7.0", "system-configuration-sys@0.6.0"], "dependencies": []}, -{"package": "core-foundation@0.10.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "link"], "parents": ["security-framework@3.7.0"], "dependencies": ["core-foundation-sys@0.8.7", "libc@0.2.189"]}, -{"package": "core-foundation@0.9.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "link"], "parents": ["system-configuration@0.7.0"], "dependencies": ["core-foundation-sys@0.8.7", "libc@0.2.189"]}, -{"package": "core_maths@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["calendrical_calculations@0.2.4", "temporal_rs@0.2.6"], "dependencies": ["libm@0.2.16"]}, -{"package": "cpubits@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["aes@0.9.1", "crypto-bigint@0.7.5", "polyval@0.7.3"], "dependencies": []}, -{"package": "cpufeatures@0.2.17", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["aes@0.8.4", "argon2@0.5.3", "chacha20@0.9.1", "curve25519-dalek@4.1.3", "keccak@0.1.6", "poly1305@0.8.0", "polyval@0.6.2", "sha1@0.10.6", "sha2@0.10.9"], "dependencies": ["libc@0.2.189"]}, -{"package": "cpufeatures@0.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["aes@0.9.1", "chacha20@0.10.0", "keccak@0.2.0", "polyval@0.7.3", "sha1@0.11.0", "sha2@0.11.0"], "dependencies": ["libc@0.2.189"]}, -{"package": "crc-catalog@1.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["crc@2.1.0"], "dependencies": []}, -{"package": "crc-catalog@2.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["crc@3.4.0"], "dependencies": []}, -{"package": "crc32fast@1.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["flate2@1.1.10", "png@0.18.1", "zip@8.6.0", "zopfli@0.8.3"], "dependencies": ["cfg-if@1.0.4"]}, -{"package": "crc@2.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_bundler@37.0.0"], "dependencies": ["crc-catalog@1.1.1"]}, -{"package": "crc@3.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0"], "dependencies": ["crc-catalog@2.5.0"]}, -{"package": "critical-section@1.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["once_cell@1.21.4"], "dependencies": []}, -{"package": "cron@0.17.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ext-cron@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["chrono@0.4.45", "once_cell@1.21.4", "phf@0.11.3", "winnow@0.7.15"]}, -{"package": "croner@3.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tokio-cron-scheduler@0.15.1"], "dependencies": ["chrono@0.4.45", "derive_builder@0.20.2", "strum@0.27.2"]}, -{"package": "crossbeam-channel@0.5.15", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["moka@0.12.15", "notify@6.1.1"], "dependencies": ["crossbeam-utils@0.8.21"]}, -{"package": "crossbeam-deque@0.8.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["rayon-core@1.13.0"], "dependencies": ["crossbeam-epoch@0.9.20", "crossbeam-utils@0.8.21"]}, -{"package": "crossbeam-epoch@0.9.20", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["crossbeam-deque@0.8.6", "moka@0.12.15"], "dependencies": ["crossbeam-utils@0.8.21"]}, -{"package": "crossbeam-queue@0.3.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["sqlx-core@0.9.0"], "dependencies": ["crossbeam-utils@0.8.21"]}, -{"package": "crossbeam-utils@0.8.21", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["concurrent-queue@2.5.0", "crossbeam-channel@0.5.15", "crossbeam-deque@0.8.6", "crossbeam-epoch@0.9.20", "crossbeam-queue@0.3.12", "dashmap@6.2.1", "moka@0.12.15", "quanta@0.12.6", "rayon-core@1.13.0"], "dependencies": []}, -{"package": "crunchy@0.2.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "limit_128"], "parents": ["half@2.7.1", "tiny-keccak@2.0.2"], "dependencies": []}, -{"package": "crypto-bigint@0.5.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["generic-array", "rand_core", "zeroize"], "parents": ["elliptic-curve@0.13.8"], "dependencies": ["generic-array@0.14.7", "rand_core@0.6.4", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "crypto-bigint@0.7.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "getrandom", "hybrid-array", "rand_core", "subtle", "zeroize"], "parents": ["crypto-primes@0.7.2", "elliptic-curve@0.14.0", "rsa@0.10.0-rc.18"], "dependencies": ["cpubits@0.1.1", "ctutils@0.4.2", "getrandom@0.4.2", "hybrid-array@0.4.12", "num-traits@0.2.19", "rand_core@0.10.1", "serdect@0.4.3", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "crypto-common@0.1.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["getrandom", "rand_core", "std"], "parents": ["aead@0.5.2", "cipher@0.4.4", "digest@0.10.7", "universal-hash@0.5.1"], "dependencies": ["generic-array@0.14.7", "rand_core@0.6.4", "typenum@1.20.1"]}, -{"package": "crypto-common@0.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["getrandom", "rand_core"], "parents": ["cipher@0.5.2", "digest@0.11.3", "elliptic-curve@0.14.0", "kem@0.3.0", "universal-hash@0.6.1"], "dependencies": ["getrandom@0.4.2", "hybrid-array@0.4.12", "rand_core@0.10.1"]}, -{"package": "crypto-primes@0.7.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rsa@0.10.0-rc.18"], "dependencies": ["crypto-bigint@0.7.5", "rand_core@0.10.1"]}, -{"package": "cssparser-macros@0.7.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["cssparser@0.37.0"], "dependencies": ["quote@1.0.45", "syn@2.0.117"]}, -{"package": "cssparser@0.37.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "fast_match_byte", "fast_match_color"], "parents": ["scraper@0.27.0", "selectors@0.38.0"], "dependencies": ["cssparser-macros@0.7.0", "dtoa-short@0.3.5", "itoa@1.0.18", "phf@0.13.1", "smallvec@1.15.1"]}, -{"package": "ctr@0.9.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["aes-gcm@0.10.3", "perry-stdlib@0.5.1565"], "dependencies": ["cipher@0.4.4"]}, -{"package": "ctutils@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["subtle"], "parents": ["crypto-bigint@0.7.5", "digest@0.11.3", "hybrid-array@0.4.12", "module-lattice@0.2.3", "sec1@0.8.1", "universal-hash@0.6.1"], "dependencies": ["cmov@0.5.4", "subtle@2.6.1"]}, -{"package": "cty@0.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["libmimalloc-sys@0.1.49"], "dependencies": []}, -{"package": "curve25519-dalek-derive@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["curve25519-dalek@4.1.3"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "curve25519-dalek@4.1.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "digest", "precomputed-tables", "zeroize"], "parents": ["ed25519-dalek@2.2.0", "x25519-dalek@2.0.1"], "dependencies": ["cfg-if@1.0.4", "cpufeatures@0.2.17", "curve25519-dalek-derive@0.1.1", "digest@0.10.7", "fiat-crypto@0.2.9", "rustc_version@0.4.1", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "darling@0.20.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "suggestions"], "parents": ["derive_builder_core@0.20.2"], "dependencies": ["darling_core@0.20.11", "darling_macro@0.20.11"]}, -{"package": "darling@0.23.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "suggestions"], "parents": ["serde_with_macros@3.21.0"], "dependencies": ["darling_core@0.23.0", "darling_macro@0.23.0"]}, -{"package": "darling_core@0.20.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["strsim", "suggestions"], "parents": ["darling@0.20.11", "darling_macro@0.20.11"], "dependencies": ["fnv@1.0.7", "ident_case@1.0.1", "proc-macro2@1.0.106", "quote@1.0.45", "strsim@0.11.1", "syn@2.0.117"]}, -{"package": "darling_core@0.23.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["strsim", "suggestions"], "parents": ["darling@0.23.0", "darling_macro@0.23.0"], "dependencies": ["ident_case@1.0.1", "proc-macro2@1.0.106", "quote@1.0.45", "strsim@0.11.1", "syn@2.0.117"]}, -{"package": "darling_macro@0.20.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["darling@0.20.11"], "dependencies": ["darling_core@0.20.11", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "darling_macro@0.23.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["darling@0.23.0"], "dependencies": ["darling_core@0.23.0", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "dashmap@5.5.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["swc_ecma_transforms_optimization@34.0.0"], "dependencies": ["cfg-if@1.0.4", "hashbrown@0.14.5", "lock_api@0.4.14", "once_cell@1.21.4", "parking_lot_core@0.9.12"]}, -{"package": "dashmap@6.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["governor@0.10.4", "perry-container-compose@0.5.1565", "perry-ffi@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["cfg-if@1.0.4", "crossbeam-utils@0.8.21", "hashbrown@0.14.5", "lock_api@0.4.14", "once_cell@1.21.4", "parking_lot_core@0.9.12"]}, -{"package": "data-encoding@2.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["hickory-net@0.26.1", "hickory-proto@0.26.1", "swc_sourcemap@9.3.4", "tungstenite@0.24.0", "tungstenite@0.29.0"], "dependencies": []}, -{"package": "debugid@0.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["serde"], "parents": ["swc_sourcemap@9.3.4"], "dependencies": ["serde@1.0.229", "uuid@1.26.0"]}, -{"package": "deflate64@0.1.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["zip@8.6.0"], "dependencies": []}, -{"package": "der@0.7.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "oid", "pem", "std", "zeroize"], "parents": ["ecdsa@0.16.9", "pkcs1@0.7.5", "pkcs5@0.7.1", "pkcs8@0.10.2", "sec1@0.7.3", "spki@0.7.3"], "dependencies": ["const-oid@0.9.6", "pem-rfc7468@0.7.0", "zeroize@1.8.2"]}, -{"package": "der@0.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "derive", "flagset", "oid", "pem", "std", "zeroize"], "parents": ["perry-ext-node-forge@0.5.1565", "pkcs1@0.8.0-rc.4", "pkcs8@0.11.0", "sec1@0.8.1", "spki@0.8.0", "x509-cert@0.3.0"], "dependencies": ["const-oid@0.10.2", "der_derive@0.8.0", "flagset@0.4.7", "pem-rfc7468@1.0.0", "zeroize@1.8.2"]}, -{"package": "der_derive@0.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["der@0.8.1"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "deranged@0.5.8", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "serde"], "parents": ["time@0.3.55"], "dependencies": ["serde_core@1.0.229"]}, -{"package": "derive-syn-parse@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["macro_magic_core@0.5.1"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "derive-where@1.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["mongodb@3.8.2"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "derive_builder@0.20.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["croner@3.0.1"], "dependencies": ["derive_builder_macro@0.20.2"]}, -{"package": "derive_builder_core@0.20.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["lib_has_std"], "parents": ["derive_builder_macro@0.20.2"], "dependencies": ["darling@0.20.11", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "derive_builder_macro@0.20.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["lib_has_std"], "parents": ["derive_builder@0.20.2"], "dependencies": ["derive_builder_core@0.20.2", "syn@2.0.117"]}, -{"package": "derive_more-impl@2.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["add", "add_assign", "default", "display", "from"], "parents": ["derive_more@2.1.1"], "dependencies": ["convert_case@0.10.0", "proc-macro2@1.0.106", "quote@1.0.45", "rustc_version@0.4.1", "syn@2.0.117", "unicode-xid@0.2.6"]}, -{"package": "derive_more@2.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["add", "add_assign", "default", "display", "from", "std"], "parents": ["mongodb@3.8.2", "selectors@0.38.0"], "dependencies": ["derive_more-impl@2.1.1"]}, -{"package": "des@0.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["p12@0.6.3"], "dependencies": ["cipher@0.4.4"]}, -{"package": "dialoguer@0.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "editor", "password", "tempfile", "zeroize"], "parents": ["perry-container-compose@0.5.1565"], "dependencies": ["console@0.15.11", "shell-words@1.1.1", "tempfile@3.27.0", "thiserror@1.0.69", "zeroize@1.8.2"]}, -{"package": "dialoguer@0.12.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "editor", "password", "tempfile", "zeroize"], "parents": ["perry@0.5.1565"], "dependencies": ["console@0.16.4", "shell-words@1.1.1", "tempfile@3.27.0", "zeroize@1.8.2"]}, -{"package": "digest@0.10.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "block-buffer", "const-oid", "core-api", "default", "mac", "oid", "std", "subtle"], "parents": ["blake2@0.10.6", "curve25519-dalek@4.1.3", "ecdsa@0.16.9", "elliptic-curve@0.13.8", "hmac@0.12.1", "md-5@0.10.6", "pbkdf2@0.12.2", "rsa@0.9.10", "sha1@0.10.6", "sha2@0.10.9", "sha3@0.10.9", "signature@2.2.0"], "dependencies": ["block-buffer@0.10.4", "const-oid@0.9.6", "crypto-common@0.1.7", "subtle@2.6.1"]}, -{"package": "digest@0.11.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "block-api", "default", "mac", "oid", "zeroize"], "parents": ["hash2curve@0.14.0", "hmac@0.13.0", "md-5@0.11.0", "pbkdf2@0.13.0", "rsa@0.10.0-rc.18", "sha1@0.11.0", "sha2@0.11.0", "sha3@0.11.0", "sha3@0.12.0", "shake@0.1.0", "signature@3.0.0", "sqlx-mysql@0.9.0"], "dependencies": ["block-buffer@0.12.0", "const-oid@0.10.2", "crypto-common@0.2.2", "ctutils@0.4.2", "zeroize@1.8.2"]}, -{"package": "dirs-sys@0.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["dirs@6.0.0"], "dependencies": ["libc@0.2.189", "option-ext@0.2.0", "redox_users@0.5.2", "windows-sys@0.61.2"]}, -{"package": "dirs@6.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-runtime@0.5.1565", "perry-ui-gtk4@0.5.1565", "perry-ui@0.5.1565", "perry@0.5.1565"], "dependencies": ["dirs-sys@0.5.0"]}, -{"package": "dispatch2@0.3.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "objc2"], "parents": ["objc2-core-foundation@0.3.2", "objc2-core-graphics@0.3.2"], "dependencies": ["bitflags@2.12.1", "objc2@0.6.4"]}, -{"package": "displaydoc@0.2.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["calendrical_calculations@0.2.4", "fixed_decimal@0.7.2", "icu_calendar@2.3.0", "icu_collections@2.2.0", "icu_datetime@2.3.0", "icu_decimal@2.3.0", "icu_locale_core@2.3.0", "icu_pattern@0.5.0", "icu_provider@2.3.1", "icu_time@2.3.0", "tinystr@0.8.4", "zerotrie@0.2.5"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "document-features@0.2.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["fast_image_resize@6.1.0"], "dependencies": ["litrs@1.0.0"]}, -{"package": "dotenvy@0.15.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-container-compose@0.5.1565", "perry@0.5.1565", "sqlx-macros-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0"], "dependencies": []}, -{"package": "dssim-core@3.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "threads"], "parents": ["perry-doc-tests@0.5.1565"], "dependencies": ["imgref@1.12.3", "itertools@0.15.0", "rayon@1.12.0", "rgb@0.8.53"]}, -{"package": "dtoa-short@0.3.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["cssparser@0.37.0"], "dependencies": ["dtoa@1.0.11"]}, -{"package": "dtoa@1.0.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["dtoa-short@0.3.5"], "dependencies": []}, -{"package": "dunce@1.0.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["aws-lc-sys@0.41.0"], "dependencies": []}, -{"package": "ecb@0.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["block-padding", "default"], "parents": ["lopdf@0.39.0"], "dependencies": ["cipher@0.4.4"]}, -{"package": "ecb@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["block-padding", "default"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["cipher@0.5.2"]}, -{"package": "ecdsa@0.16.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "arithmetic", "der", "digest", "hazmat", "pem", "pkcs8", "rfc6979", "signing", "spki", "std", "verifying"], "parents": ["p256@0.13.2", "p384@0.13.1", "p521@0.13.3"], "dependencies": ["der@0.7.10", "digest@0.10.7", "elliptic-curve@0.13.8", "rfc6979@0.4.0", "signature@2.2.0", "spki@0.7.3"]}, -{"package": "ed25519-dalek@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "fast", "pkcs8", "rand_core", "std", "zeroize"], "parents": ["jsonwebtoken@11.0.0", "perry-stdlib@0.5.1565", "perry-updater@0.5.1565", "perry@0.5.1565"], "dependencies": ["curve25519-dalek@4.1.3", "ed25519@2.2.3", "rand_core@0.6.4", "serde@1.0.229", "sha2@0.10.9", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "ed25519@2.2.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "pkcs8", "std"], "parents": ["ed25519-dalek@2.2.0"], "dependencies": ["pkcs8@0.10.2", "signature@2.2.0"]}, -{"package": "ed448-goldilocks@0.14.0-pre.15", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "getrandom", "signing"], "parents": ["perry-stdlib@0.5.1565", "x448@0.14.0-pre.12"], "dependencies": ["ed448@0.5.0", "elliptic-curve@0.14.0", "hash2curve@0.14.0", "rand_core@0.10.1", "serdect@0.4.3", "shake@0.1.0", "signature@3.0.0", "subtle@2.6.1"]}, -{"package": "ed448@0.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["ed448-goldilocks@0.14.0-pre.15"], "dependencies": ["pkcs8@0.11.0", "signature@3.0.0"]}, -{"package": "ego-tree@0.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["scraper@0.27.0"], "dependencies": []}, -{"package": "either@1.16.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "serde", "std", "use_std"], "parents": ["icu_pattern@0.5.0", "itertools@0.12.1", "itertools@0.14.0", "itertools@0.15.0", "prefix-trie@0.8.4", "rayon@1.12.0", "sqlx-core@0.9.0", "sqlx-macros-core@0.9.0", "sqlx-mysql@0.9.0", "swc_common@18.0.1", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "swc_visit@2.0.1", "writeable@0.6.4"], "dependencies": ["serde@1.0.229"]}, -{"package": "elliptic-curve@0.13.8", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "arithmetic", "digest", "ecdh", "ff", "group", "hazmat", "pem", "pkcs8", "sec1", "std"], "parents": ["ecdsa@0.16.9", "p256@0.13.2", "p384@0.13.1", "p521@0.13.3", "primeorder@0.13.6"], "dependencies": ["base16ct@0.2.0", "crypto-bigint@0.5.5", "digest@0.10.7", "ff@0.13.1", "generic-array@0.14.7", "group@0.13.0", "hkdf@0.12.4", "pem-rfc7468@0.7.0", "pkcs8@0.10.2", "rand_core@0.6.4", "sec1@0.7.3", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "elliptic-curve@0.14.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "arithmetic", "default", "ff", "getrandom", "group", "pkcs8", "sec1"], "parents": ["ed448-goldilocks@0.14.0-pre.15", "hash2curve@0.14.0"], "dependencies": ["base16ct@1.0.0", "crypto-bigint@0.7.5", "crypto-common@0.2.2", "ff@0.14.0", "group@0.14.0", "hybrid-array@0.4.12", "pkcs8@0.11.0", "rand_core@0.10.1", "sec1@0.8.1", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "email-encoding@0.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["lettre@0.11.23"], "dependencies": ["base64@0.22.1", "memchr@2.8.1"]}, -{"package": "email_address@0.2.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["lettre@0.11.23"], "dependencies": []}, -{"package": "encode_unicode@1.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["console@0.15.11", "console@0.16.4"], "dependencies": []}, -{"package": "encoding_rs@0.8.35", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default"], "parents": ["allsorts-azul@0.16.5", "lopdf@0.39.0", "perry-runtime@0.5.1565"], "dependencies": ["cfg-if@1.0.4"]}, -{"package": "endi@1.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["zvariant@5.12.0"], "dependencies": []}, -{"package": "enumflags2@0.7.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["serde"], "parents": ["zbus@5.16.0", "zvariant@5.12.0"], "dependencies": ["enumflags2_derive@0.7.12", "serde@1.0.229"]}, -{"package": "enumflags2_derive@0.7.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["enumflags2@0.7.12"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "env_logger@0.10.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["auto-color", "color", "default", "humantime", "regex"], "parents": ["perry@0.5.1565"], "dependencies": ["humantime@2.3.0", "is-terminal@0.4.17", "log@0.4.34", "regex@1.13.1", "termcolor@1.4.1"]}, -{"package": "equator-macro@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["equator@0.4.2"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "equator@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["aligned-vec@0.6.4"], "dependencies": ["equator-macro@0.4.2"]}, -{"package": "equivalent@1.0.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["hashbrown@0.16.1", "hashbrown@0.17.1", "indexmap@2.14.1", "moka@0.12.15"], "dependencies": []}, -{"package": "errno@0.3.14", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["rustix@1.1.4", "signal-hook-registry@1.4.8"], "dependencies": ["libc@0.2.189", "windows-sys@0.61.2"]}, -{"package": "etcetera@0.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["sqlx-postgres@0.9.0"], "dependencies": ["cfg-if@1.0.4", "windows-sys@0.61.2"]}, -{"package": "event-listener-strategy@0.5.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["async-broadcast@0.7.2", "async-channel@2.5.0", "async-lock@3.4.2"], "dependencies": ["event-listener@5.4.1", "pin-project-lite@0.2.17"]}, -{"package": "event-listener@5.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "parking", "std"], "parents": ["async-broadcast@0.7.2", "async-lock@3.4.2", "async-process@2.5.0", "event-listener-strategy@0.5.4", "sqlx-core@0.9.0", "zbus@5.16.0"], "dependencies": ["concurrent-queue@2.5.0", "parking@2.2.1", "pin-project-lite@0.2.17"]}, -{"package": "exr@1.74.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["rayon"], "parents": ["image@0.25.10"], "dependencies": ["bit_field@0.10.3", "half@2.7.1", "lebe@0.5.3", "miniz_oxide@0.8.9", "rayon-core@1.13.0", "smallvec@1.15.1", "zune-inflate@0.2.54"]}, -{"package": "fallible-iterator@0.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default"], "parents": ["rusqlite@0.39.0"], "dependencies": []}, -{"package": "fallible-streaming-iterator@0.1.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rusqlite@0.39.0"], "dependencies": []}, -{"package": "fast_image_resize@6.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["perry-ext-sharp@0.5.1565"], "dependencies": ["cfg-if@1.0.4", "document-features@0.2.12", "num-traits@0.2.19", "thiserror@2.0.18"]}, -{"package": "fastrand@2.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["async-executor@1.14.0", "backon@1.6.0", "futures-lite@2.6.1", "lettre@0.11.23", "phf_generator@0.13.1", "piper@0.2.5", "tempfile@3.27.0"], "dependencies": []}, -{"package": "fax@0.2.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tiff@0.11.3"], "dependencies": []}, -{"package": "fdeflate@0.3.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["png@0.18.1"], "dependencies": ["simd-adler32@0.3.9"]}, -{"package": "ff@0.13.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["elliptic-curve@0.13.8", "group@0.13.0"], "dependencies": ["rand_core@0.6.4", "subtle@2.6.1"]}, -{"package": "ff@0.14.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["elliptic-curve@0.14.0", "group@0.14.0"], "dependencies": ["rand_core@0.10.1", "subtle@2.6.1"]}, -{"package": "fiat-crypto@0.2.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["curve25519-dalek@4.1.3"], "dependencies": []}, -{"package": "field-offset@0.3.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gtk4@0.9.7"], "dependencies": ["memoffset@0.9.1", "rustc_version@0.4.1"]}, -{"package": "filetime@0.2.29", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["notify@6.1.1", "tar@0.4.46"], "dependencies": ["cfg-if@1.0.4", "libc@0.2.189"]}, -{"package": "find-msvc-tools@0.1.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["cc@1.4.4"], "dependencies": []}, -{"package": "fixed_decimal@0.7.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_datetime@2.3.0", "icu_decimal@2.3.0", "icu_plurals@2.3.0"], "dependencies": ["displaydoc@0.2.6", "smallvec@1.15.1", "writeable@0.6.4"]}, -{"package": "fixedbitset@0.5.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["petgraph@0.7.1"], "dependencies": []}, -{"package": "flagset@0.4.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["der@0.8.1"], "dependencies": []}, -{"package": "flate2@1.1.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["any_impl", "any_zlib", "default", "miniz_oxide", "runtime_detection", "rust_backend", "zlib-rs"], "parents": ["allsorts-azul@0.16.5", "lopdf@0.39.0", "perry-ext-zlib@0.5.1565", "perry-stdlib@0.5.1565", "perry@0.5.1565", "png@0.18.1", "printpdf@0.10.1", "tiff@0.11.3", "zip@8.6.0"], "dependencies": ["crc32fast@1.5.0", "miniz_oxide@0.9.1", "zlib-rs@0.6.4"]}, -{"package": "flume@0.12.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["async", "futures-core", "futures-sink"], "parents": ["sqlx-sqlite@0.9.0"], "dependencies": ["futures-core@0.3.34", "futures-sink@0.3.34", "spin@0.9.8"]}, -{"package": "fnv@1.0.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["darling_core@0.20.11", "h2@0.4.19", "rusty-fork@0.3.1"], "dependencies": []}, -{"package": "foldhash@0.1.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["hashbrown@0.15.5"], "dependencies": []}, -{"package": "foldhash@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["hashbrown@0.16.1", "hashbrown@0.17.1"], "dependencies": []}, -{"package": "form_urlencoded@1.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["serde_urlencoded@0.7.1", "sqlx-sqlite@0.9.0", "url@2.5.8"], "dependencies": ["percent-encoding@2.3.2"]}, -{"package": "from_variant@3.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_common@18.0.1"], "dependencies": ["swc_macros_common@1.0.1", "syn@2.0.117"]}, -{"package": "fs_extra@1.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["aws-lc-sys@0.41.0"], "dependencies": []}, -{"package": "fsevent-sys@4.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["notify@6.1.1"], "dependencies": ["libc@0.2.189"]}, -{"package": "fslock@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["perry@0.5.1565"], "dependencies": ["libc@0.2.189", "winapi@0.3.9"]}, -{"package": "funty@2.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["bitvec@1.0.1"], "dependencies": []}, -{"package": "futures-channel@0.3.32", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "futures-sink", "sink", "std"], "parents": ["gio@0.20.12", "glib@0.20.12", "glib@0.22.7", "gstreamer@0.25.3", "gtk4@0.9.7", "hickory-net@0.26.1", "hyper-util@0.1.20", "hyper@1.11.1", "mpris-server@0.10.0", "redis@1.6.0", "reqwest@0.12.28", "soup3@0.7.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0"], "dependencies": ["futures-core@0.3.34", "futures-sink@0.3.34"]}, -{"package": "futures-core@0.3.34", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["async-broadcast@0.7.2", "async-channel@2.5.0", "async-signal@0.2.14", "combine@4.6.7", "flume@0.12.0", "futures-channel@0.3.32", "futures-executor@0.3.32", "futures-intrusive@0.5.0", "futures-lite@2.6.1", "futures-util@0.3.34", "gio@0.20.12", "glib@0.20.12", "glib@0.22.7", "gstreamer-app@0.25.2", "gstreamer@0.25.3", "h2@0.4.19", "http-body-util@0.1.5", "hyper@1.11.1", "mongodb@3.8.2", "ordered-stream@0.2.0", "reqwest@0.12.28", "sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "sync_wrapper@1.0.2", "tokio-stream@0.1.18", "tokio-util@0.7.18", "tower@0.5.3", "zbus@5.16.0"], "dependencies": []}, -{"package": "futures-executor@0.3.32", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["glib@0.20.12", "glib@0.22.7", "sqlx-sqlite@0.9.0"], "dependencies": ["futures-core@0.3.34", "futures-task@0.3.34", "futures-util@0.3.34"]}, -{"package": "futures-intrusive@0.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "parking_lot", "std"], "parents": ["sqlx-core@0.9.0", "sqlx-sqlite@0.9.0"], "dependencies": ["futures-core@0.3.34", "lock_api@0.4.14", "parking_lot@0.12.5"]}, -{"package": "futures-io@0.3.34", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["async-io@2.6.0", "async-signal@0.2.14", "blocking@1.6.2", "futures-lite@2.6.1", "futures-util@0.3.34", "gio@0.20.12", "hickory-net@0.26.1", "lettre@0.11.23", "mongodb@3.8.2", "piper@0.2.5", "sqlx-core@0.9.0", "tokio-util@0.7.18"], "dependencies": []}, -{"package": "futures-lite@2.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "fastrand", "futures-io", "parking", "race", "std"], "parents": ["async-executor@1.14.0", "async-io@2.6.0", "async-process@2.5.0", "blocking@1.6.2", "zbus@5.16.0"], "dependencies": ["fastrand@2.4.1", "futures-core@0.3.34", "futures-io@0.3.34", "parking@2.2.1", "pin-project-lite@0.2.17"]}, -{"package": "futures-macro@0.3.34", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["futures-util@0.3.34"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@3.0.3"]}, -{"package": "futures-sink@0.3.34", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["flume@0.12.0", "futures-channel@0.3.32", "futures-util@0.3.34", "governor@0.10.4", "gstreamer-app@0.25.2", "h2@0.4.19", "tokio-util@0.7.18"], "dependencies": []}, -{"package": "futures-task@0.3.34", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "std"], "parents": ["futures-executor@0.3.32", "futures-util@0.3.34", "glib@0.20.12", "glib@0.22.7"], "dependencies": []}, -{"package": "futures-timer@3.0.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["governor@0.10.4"], "dependencies": []}, -{"package": "futures-util@0.3.34", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "async-await", "async-await-macro", "default", "futures-io", "futures-macro", "futures-sink", "io", "memchr", "sink", "slab", "std"], "parents": ["futures-executor@0.3.32", "gio@0.20.12", "glib@0.20.12", "glib@0.22.7", "governor@0.10.4", "gstreamer@0.25.3", "hickory-net@0.26.1", "hickory-resolver@0.26.1", "hyper-util@0.1.20", "js-sys@0.3.99", "ksni@0.3.6", "lettre@0.11.23", "mongodb@3.8.2", "perry-ext-mongodb@0.5.1565", "perry-ext-ws@0.5.1565", "perry-stdlib@0.5.1565", "perry@0.5.1565", "redis@1.6.0", "reqwest@0.12.28", "sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "tokio-tungstenite@0.29.0", "tokio-util@0.7.18", "tower-http@0.6.11", "tower@0.5.3"], "dependencies": ["futures-core@0.3.34", "futures-io@0.3.34", "futures-macro@0.3.34", "futures-sink@0.3.34", "futures-task@0.3.34", "memchr@2.8.1", "pin-project-lite@0.2.17", "slab@0.4.12"]}, -{"package": "gdk-pixbuf-sys@0.20.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gdk-pixbuf@0.20.10", "gdk4-sys@0.9.6", "gtk4-sys@0.9.6", "libshumate-sys@0.6.0"], "dependencies": ["gio-sys@0.20.10", "glib-sys@0.20.10", "gobject-sys@0.20.10", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "gdk-pixbuf@0.20.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gdk4@0.9.6", "gtk4@0.9.7", "libshumate@0.6.0"], "dependencies": ["gdk-pixbuf-sys@0.20.10", "gio@0.20.12", "glib@0.20.12", "libc@0.2.189"]}, -{"package": "gdk4-sys@0.9.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v4_2", "v4_4", "v4_6"], "parents": ["gdk4@0.9.6", "gsk4-sys@0.9.6", "gtk4-sys@0.9.6", "libshumate-sys@0.6.0", "webkit6-sys@0.4.0"], "dependencies": ["cairo-sys-rs@0.20.10", "gdk-pixbuf-sys@0.20.10", "gio-sys@0.20.10", "glib-sys@0.20.10", "gobject-sys@0.20.10", "libc@0.2.189", "pango-sys@0.20.10", "pkg-config@0.3.33", "system-deps@7.0.8"]}, -{"package": "gdk4@0.9.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v4_2", "v4_4", "v4_6"], "parents": ["gsk4@0.9.6", "gtk4@0.9.7", "libshumate@0.6.0", "webkit6@0.4.0"], "dependencies": ["cairo-rs@0.20.12", "gdk-pixbuf@0.20.10", "gdk4-sys@0.9.6", "gio@0.20.12", "glib@0.20.12", "libc@0.2.189", "pango@0.20.12"]}, -{"package": "generic-array@0.14.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["more_lengths", "zeroize"], "parents": ["aead@0.5.2", "block-buffer@0.10.4", "block-padding@0.3.3", "crypto-bigint@0.5.5", "crypto-common@0.1.7", "elliptic-curve@0.13.8", "inout@0.1.4", "sec1@0.7.3", "sqlx-mysql@0.9.0"], "dependencies": ["typenum@1.20.1", "version_check@0.9.5", "zeroize@1.8.2"]}, -{"package": "getopts@0.2.24", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "unicode"], "parents": ["scraper@0.27.0"], "dependencies": ["unicode-width@0.2.2"]}, -{"package": "getrandom@0.2.17", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["js", "js-sys", "std", "wasm-bindgen"], "parents": ["const-random-macro@0.1.16", "jsonwebtoken@11.0.0", "p12@0.6.3", "rand_core@0.6.4", "redox_users@0.5.2", "ring@0.17.14"], "dependencies": ["cfg-if@1.0.4", "js-sys@0.3.99", "libc@0.2.189", "wasi@0.11.1+wasi-snapshot-preview1", "wasm-bindgen@0.2.122"]}, -{"package": "getrandom@0.3.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std", "wasm_js"], "parents": ["ahash@0.8.12", "bson@3.1.0", "governor@0.10.4", "jobserver@0.1.34", "lopdf@0.39.0", "printpdf@0.10.1", "quinn-proto@0.11.15", "rand_core@0.9.5"], "dependencies": ["cfg-if@1.0.4", "js-sys@0.3.99", "libc@0.2.189", "r-efi@5.3.0", "wasip2@1.0.3+wasi-0.2.9", "wasm-bindgen@0.2.122"]}, -{"package": "getrandom@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std", "sys_rng", "wasm_js"], "parents": ["bcrypt@0.19.3", "crypto-bigint@0.7.5", "crypto-common@0.2.2", "rand@0.10.2", "tempfile@3.27.0", "uuid@1.26.0", "zip@8.6.0"], "dependencies": ["cfg-if@1.0.4", "js-sys@0.3.99", "libc@0.2.189", "r-efi@6.0.0", "rand_core@0.10.1", "wasip2@1.0.3+wasi-0.2.9", "wasip3@0.4.0+wasi-0.3.0-rc-2026-01-06", "wasm-bindgen@0.2.122"]}, -{"package": "ghash@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["aes-gcm@0.10.3"], "dependencies": ["opaque-debug@0.3.1", "polyval@0.6.2"]}, -{"package": "ghash@0.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["polyval@0.7.3"]}, -{"package": "gif@0.14.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["color_quant", "default", "raii_no_panic", "std"], "parents": ["image@0.25.10"], "dependencies": ["color_quant@1.1.0", "weezl@0.1.12"]}, -{"package": "gimli@0.34.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["read", "read-core"], "parents": ["perry-runtime@0.5.1565"], "dependencies": []}, -{"package": "gio-sys@0.20.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v2_58", "v2_60", "v2_62", "v2_64", "v2_66", "v2_68", "v2_70"], "parents": ["gdk-pixbuf-sys@0.20.10", "gdk4-sys@0.9.6", "gio@0.20.12", "glib@0.20.12", "gtk4-sys@0.9.6", "libshumate-sys@0.6.0", "soup3-sys@0.7.0", "webkit6-sys@0.4.0"], "dependencies": ["glib-sys@0.20.10", "gobject-sys@0.20.10", "libc@0.2.189", "system-deps@7.0.8", "windows-sys@0.59.0"]}, -{"package": "gio-sys@0.22.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["glib@0.22.7"], "dependencies": ["glib-sys@0.22.6", "gobject-sys@0.22.6", "libc@0.2.189", "system-deps@7.0.8", "windows-sys@0.61.2"]}, -{"package": "gio@0.20.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v2_58", "v2_60", "v2_62", "v2_64", "v2_66", "v2_68", "v2_70"], "parents": ["gdk-pixbuf@0.20.10", "gdk4@0.9.6", "gtk4@0.9.7", "libshumate@0.6.0", "pango@0.20.12", "soup3@0.7.0", "webkit6@0.4.0"], "dependencies": ["futures-channel@0.3.32", "futures-core@0.3.34", "futures-io@0.3.34", "futures-util@0.3.34", "gio-sys@0.20.10", "glib@0.20.12", "libc@0.2.189", "pin-project-lite@0.2.17", "smallvec@1.15.1"]}, -{"package": "glib-macros@0.20.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["glib@0.20.12"], "dependencies": ["heck@0.5.0", "proc-macro-crate@3.5.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "glib-macros@0.22.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["glib@0.22.7"], "dependencies": ["heck@0.5.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "glib-sys@0.20.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v2_58", "v2_60", "v2_62", "v2_64", "v2_66", "v2_68", "v2_70"], "parents": ["cairo-sys-rs@0.20.10", "gdk-pixbuf-sys@0.20.10", "gdk4-sys@0.9.6", "gio-sys@0.20.10", "glib@0.20.12", "gobject-sys@0.20.10", "graphene-sys@0.20.10", "gsk4-sys@0.9.6", "gtk4-sys@0.9.6", "javascriptcore6-sys@0.4.0", "libshumate-sys@0.6.0", "pango-sys@0.20.10", "soup3-sys@0.7.0", "webkit6-sys@0.4.0"], "dependencies": ["libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "glib-sys@0.22.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["cairo-sys-rs@0.22.0", "gio-sys@0.22.0", "glib@0.22.7", "gobject-sys@0.22.6", "gstreamer-app-sys@0.25.0", "gstreamer-base-sys@0.25.0", "gstreamer-sys@0.25.2"], "dependencies": ["libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "glib@0.20.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "gio", "gio-sys", "v2_58", "v2_60", "v2_62", "v2_64", "v2_66", "v2_68", "v2_70"], "parents": ["cairo-rs@0.20.12", "gdk-pixbuf@0.20.10", "gdk4@0.9.6", "gio@0.20.12", "graphene-rs@0.20.10", "gsk4@0.9.6", "gtk4@0.9.7", "javascriptcore6@0.4.0", "libshumate@0.6.0", "pango@0.20.12", "soup3@0.7.0", "webkit6@0.4.0"], "dependencies": ["bitflags@2.12.1", "futures-channel@0.3.32", "futures-core@0.3.34", "futures-executor@0.3.32", "futures-task@0.3.34", "futures-util@0.3.34", "gio-sys@0.20.10", "glib-macros@0.20.12", "glib-sys@0.20.10", "gobject-sys@0.20.10", "libc@0.2.189", "memchr@2.8.1", "smallvec@1.15.1"]}, -{"package": "glib@0.22.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "futures", "futures-channel", "futures-core", "futures-executor", "futures-task", "futures-util", "gio", "gio-sys"], "parents": ["cairo-rs@0.22.9", "gstreamer-app@0.25.2", "gstreamer-base@0.25.2", "gstreamer@0.25.3"], "dependencies": ["bitflags@2.12.1", "futures-channel@0.3.32", "futures-core@0.3.34", "futures-executor@0.3.32", "futures-task@0.3.34", "futures-util@0.3.34", "gio-sys@0.22.0", "glib-macros@0.22.6", "glib-sys@0.22.6", "gobject-sys@0.22.6", "libc@0.2.189", "memchr@2.8.1", "smallvec@1.15.1"]}, -{"package": "glob@0.3.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["clang-sys@1.8.1"], "dependencies": []}, -{"package": "glyph-names@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["allsorts-azul@0.16.5"], "dependencies": []}, -{"package": "gobject-sys@0.20.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v2_58", "v2_62", "v2_66", "v2_68", "v2_70"], "parents": ["gdk-pixbuf-sys@0.20.10", "gdk4-sys@0.9.6", "gio-sys@0.20.10", "glib@0.20.12", "gsk4-sys@0.9.6", "gtk4-sys@0.9.6", "javascriptcore6-sys@0.4.0", "libshumate-sys@0.6.0", "pango-sys@0.20.10", "soup3-sys@0.7.0", "webkit6-sys@0.4.0"], "dependencies": ["glib-sys@0.20.10", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "gobject-sys@0.22.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gio-sys@0.22.0", "glib@0.22.7", "gstreamer-base-sys@0.25.0", "gstreamer-sys@0.25.2"], "dependencies": ["glib-sys@0.22.6", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "governor@0.10.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["dashmap", "default", "jitter", "quanta", "std"], "parents": ["perry-ext-ratelimit@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["cfg-if@1.0.4", "dashmap@6.2.1", "futures-sink@0.3.34", "futures-timer@3.0.4", "futures-util@0.3.34", "getrandom@0.3.4", "hashbrown@0.16.1", "nonzero_ext@0.3.0", "parking_lot@0.12.5", "portable-atomic@1.13.1", "quanta@0.12.6", "rand@0.9.4", "smallvec@1.15.1", "spinning_top@0.3.0", "web-time@1.1.0"]}, -{"package": "graphene-rs@0.20.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gsk4@0.9.6", "gtk4@0.9.7"], "dependencies": ["glib@0.20.12", "graphene-sys@0.20.10", "libc@0.2.189"]}, -{"package": "graphene-sys@0.20.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["graphene-rs@0.20.10", "gsk4-sys@0.9.6", "gtk4-sys@0.9.6"], "dependencies": ["glib-sys@0.20.10", "libc@0.2.189", "pkg-config@0.3.33", "system-deps@7.0.8"]}, -{"package": "group@0.13.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["elliptic-curve@0.13.8"], "dependencies": ["ff@0.13.1", "rand_core@0.6.4", "subtle@2.6.1"]}, -{"package": "group@0.14.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["elliptic-curve@0.14.0"], "dependencies": ["ff@0.14.0", "rand_core@0.10.1", "subtle@2.6.1"]}, -{"package": "gsk4-sys@0.9.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v4_2", "v4_4", "v4_6"], "parents": ["gsk4@0.9.6", "gtk4-sys@0.9.6"], "dependencies": ["cairo-sys-rs@0.20.10", "gdk4-sys@0.9.6", "glib-sys@0.20.10", "gobject-sys@0.20.10", "graphene-sys@0.20.10", "libc@0.2.189", "pango-sys@0.20.10", "system-deps@7.0.8"]}, -{"package": "gsk4@0.9.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v4_2", "v4_4", "v4_6"], "parents": ["gtk4@0.9.7"], "dependencies": ["cairo-rs@0.20.12", "gdk4@0.9.6", "glib@0.20.12", "graphene-rs@0.20.10", "gsk4-sys@0.9.6", "libc@0.2.189", "pango@0.20.12"]}, -{"package": "gstreamer-app-sys@0.25.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gstreamer-app@0.25.2"], "dependencies": ["glib-sys@0.22.6", "gstreamer-base-sys@0.25.0", "gstreamer-sys@0.25.2", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "gstreamer-app@0.25.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-ui-gtk4@0.5.1565"], "dependencies": ["futures-core@0.3.34", "futures-sink@0.3.34", "glib@0.22.7", "gstreamer-app-sys@0.25.0", "gstreamer-base@0.25.2", "gstreamer@0.25.3", "libc@0.2.189"]}, -{"package": "gstreamer-base-sys@0.25.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gstreamer-app-sys@0.25.0", "gstreamer-base@0.25.2"], "dependencies": ["glib-sys@0.22.6", "gobject-sys@0.22.6", "gstreamer-sys@0.25.2", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "gstreamer-base@0.25.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["gstreamer-app@0.25.2"], "dependencies": ["atomic_refcell@0.1.14", "cfg-if@1.0.4", "glib@0.22.7", "gstreamer-base-sys@0.25.0", "gstreamer@0.25.3", "libc@0.2.189"]}, -{"package": "gstreamer-sys@0.25.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gstreamer-app-sys@0.25.0", "gstreamer-base-sys@0.25.0", "gstreamer@0.25.3"], "dependencies": ["cfg-if@1.0.4", "glib-sys@0.22.6", "gobject-sys@0.22.6", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "gstreamer@0.25.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["gstreamer-app@0.25.2", "gstreamer-base@0.25.2", "perry-ui-gtk4@0.5.1565"], "dependencies": ["cfg-if@1.0.4", "futures-channel@0.3.32", "futures-core@0.3.34", "futures-util@0.3.34", "glib@0.22.7", "gstreamer-sys@0.25.2", "itertools@0.15.0", "kstring@2.0.2", "libc@0.2.189", "muldiv@1.0.1", "num-integer@0.1.46", "num-rational@0.4.2", "option-operations@0.6.1", "pastey@0.2.3", "pin-project-lite@0.2.17", "smallvec@1.15.1", "thiserror@2.0.18"]}, -{"package": "gtk4-macros@0.9.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["gtk4@0.9.7"], "dependencies": ["proc-macro-crate@3.5.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "gtk4-sys@0.9.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v4_2", "v4_4", "v4_6"], "parents": ["gtk4@0.9.7", "libshumate-sys@0.6.0", "webkit6-sys@0.4.0"], "dependencies": ["cairo-sys-rs@0.20.10", "gdk-pixbuf-sys@0.20.10", "gdk4-sys@0.9.6", "gio-sys@0.20.10", "glib-sys@0.20.10", "gobject-sys@0.20.10", "graphene-sys@0.20.10", "gsk4-sys@0.9.6", "libc@0.2.189", "pango-sys@0.20.10", "system-deps@7.0.8"]}, -{"package": "gtk4@0.9.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["v4_2", "v4_4", "v4_6"], "parents": ["libshumate@0.6.0", "perry-ui-gtk4@0.5.1565", "webkit6@0.4.0"], "dependencies": ["cairo-rs@0.20.12", "field-offset@0.3.6", "futures-channel@0.3.32", "gdk-pixbuf@0.20.10", "gdk4@0.9.6", "gio@0.20.12", "glib@0.20.12", "graphene-rs@0.20.10", "gsk4@0.9.6", "gtk4-macros@0.9.5", "gtk4-sys@0.9.6", "libc@0.2.189", "pango@0.20.12"]}, -{"package": "h2@0.4.19", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["hyper@1.11.1", "perry-ext-http@0.5.1565", "reqwest@0.12.28"], "dependencies": ["atomic-waker@1.1.2", "bytes@1.12.1", "fnv@1.0.7", "futures-core@0.3.34", "futures-sink@0.3.34", "http@1.4.1", "indexmap@2.14.1", "slab@0.4.12", "tokio-util@0.7.18", "tokio@1.53.1", "tracing@0.1.44"]}, -{"package": "half@2.7.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["exr@1.74.0", "tiff@0.11.3"], "dependencies": ["cfg-if@1.0.4", "crunchy@0.2.4", "zerocopy@0.8.50"]}, -{"package": "hash2curve@0.14.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ed448-goldilocks@0.14.0-pre.15"], "dependencies": ["digest@0.11.3", "elliptic-curve@0.14.0"]}, -{"package": "hashbrown@0.14.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["ahash", "allocator-api2", "default", "inline-more", "raw"], "parents": ["dashmap@5.5.3", "dashmap@6.2.1", "hstr@3.0.6", "swc_allocator@4.0.1"], "dependencies": ["ahash@0.8.12", "allocator-api2@0.2.21"]}, -{"package": "hashbrown@0.15.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default-hasher"], "parents": ["wasmparser@0.244.0"], "dependencies": ["foldhash@0.1.5"]}, -{"package": "hashbrown@0.16.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["allocator-api2", "default", "default-hasher", "equivalent", "inline-more", "raw-entry"], "parents": ["governor@0.10.4", "hashlink@0.11.1", "rsqlite-vfs@0.1.1", "sqlx-core@0.9.0"], "dependencies": ["allocator-api2@0.2.21", "equivalent@1.0.2", "foldhash@0.2.0"]}, -{"package": "hashbrown@0.17.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["allocator-api2", "default", "default-hasher", "equivalent", "inline-more", "raw-entry"], "parents": ["indexmap@2.14.1", "lru@0.18.3"], "dependencies": ["allocator-api2@0.2.21", "equivalent@1.0.2", "foldhash@0.2.0"]}, -{"package": "hashlink@0.11.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rusqlite@0.39.0", "sqlx-core@0.9.0"], "dependencies": ["hashbrown@0.16.1"]}, -{"package": "heck@0.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["ouroboros_macro@0.17.2"], "dependencies": []}, -{"package": "heck@0.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["clap_derive@4.6.4", "glib-macros@0.20.12", "glib-macros@0.22.6", "is-macro@0.3.7", "sqlx-macros-core@0.9.0", "strum_macros@0.27.2", "system-deps@7.0.8", "wit-bindgen-core@0.51.0", "wit-bindgen-rust@0.51.0"], "dependencies": []}, -{"package": "hermit-abi@0.1.19", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["atty@0.2.14"], "dependencies": ["libc@0.2.189"]}, -{"package": "hermit-abi@0.5.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["is-terminal@0.4.17", "num_cpus@1.17.0", "polling@3.11.0"], "dependencies": []}, -{"package": "hex@0.4.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "std"], "parents": ["bson@3.1.0", "mongodb@3.8.2", "perry-container-compose@0.5.1565", "perry-stdlib@0.5.1565", "perry-updater@0.5.1565", "perry@0.5.1565", "sqlx-macros-core@0.9.0", "sqlx-postgres@0.9.0", "zbus@5.16.0"], "dependencies": []}, -{"package": "hickory-net@0.26.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "tokio"], "parents": ["hickory-resolver@0.26.1", "mongodb@3.8.2"], "dependencies": ["async-trait@0.1.92", "cfg-if@1.0.4", "data-encoding@2.11.0", "futures-channel@0.3.32", "futures-io@0.3.34", "futures-util@0.3.34", "hickory-proto@0.26.1", "idna@1.1.0", "ipnet@2.12.0", "jni@0.22.4", "rand@0.10.2", "thiserror@2.0.18", "tinyvec@1.11.0", "tokio@1.53.1", "tracing@0.1.44", "url@2.5.8"]}, -{"package": "hickory-proto@0.26.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["access-control", "default", "std"], "parents": ["hickory-net@0.26.1", "hickory-resolver@0.26.1", "mongodb@3.8.2", "perry-runtime@0.5.1565"], "dependencies": ["data-encoding@2.11.0", "idna@1.1.0", "ipnet@2.12.0", "jni@0.22.4", "once_cell@1.21.4", "prefix-trie@0.8.4", "rand@0.10.2", "ring@0.17.14", "thiserror@2.0.18", "tinyvec@1.11.0", "tracing@0.1.44", "url@2.5.8"]}, -{"package": "hickory-resolver@0.26.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "system-config", "tokio"], "parents": ["mongodb@3.8.2"], "dependencies": ["cfg-if@1.0.4", "futures-util@0.3.34", "hickory-net@0.26.1", "hickory-proto@0.26.1", "ipconfig@0.3.4", "ipnet@2.12.0", "jni@0.22.4", "moka@0.12.15", "ndk-context@0.1.1", "once_cell@1.21.4", "parking_lot@0.12.5", "rand@0.10.2", "resolv-conf@0.7.6", "smallvec@1.15.1", "system-configuration@0.7.0", "thiserror@2.0.18", "tokio@1.53.1", "tracing@0.1.44"]}, -{"package": "hkdf@0.12.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["elliptic-curve@0.13.8"], "dependencies": ["hmac@0.12.1"]}, -{"package": "hkdf@0.13.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-stdlib@0.5.1565", "sqlx-postgres@0.9.0"], "dependencies": ["hmac@0.13.0"]}, -{"package": "hmac@0.12.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["reset"], "parents": ["hkdf@0.12.4", "jsonwebtoken@11.0.0", "p12@0.6.3", "pbkdf2@0.12.2", "rfc6979@0.4.0"], "dependencies": ["digest@0.10.7"]}, -{"package": "hmac@0.13.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["zeroize"], "parents": ["hkdf@0.13.0", "mongodb@3.8.2", "pbkdf2@0.13.0", "perry-stdlib@0.5.1565", "sqlx-postgres@0.9.0", "zip@8.6.0"], "dependencies": ["digest@0.11.3"]}, -{"package": "hostname@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["lettre@0.11.23", "perry-runtime@0.5.1565"], "dependencies": ["cfg-if@1.0.4", "libc@0.2.189", "windows-link@0.2.1"]}, -{"package": "hstr@3.0.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["serde"], "parents": ["swc_atoms@9.0.3"], "dependencies": ["hashbrown@0.14.5", "new_debug_unreachable@1.0.6", "once_cell@1.21.4", "rustc-hash@2.1.2", "serde@1.0.229", "triomphe@0.1.15"]}, -{"package": "html5ever@0.39.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["scraper@0.27.0"], "dependencies": ["log@0.4.34", "markup5ever@0.39.0"]}, -{"package": "http-body-util@0.1.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-ext-fastify@0.5.1565", "perry-ext-http@0.5.1565", "perry-stdlib@0.5.1565", "reqwest@0.12.28"], "dependencies": ["bytes@1.12.1", "futures-core@0.3.34", "http-body@1.0.1", "http@1.4.1", "pin-project-lite@0.2.17"]}, -{"package": "http-body@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["http-body-util@0.1.5", "hyper-util@0.1.20", "hyper@1.11.1", "reqwest@0.12.28", "tower-http@0.6.11"], "dependencies": ["bytes@1.12.1", "http@1.4.1"]}, -{"package": "http@1.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["h2@0.4.19", "http-body-util@0.1.5", "http-body@1.0.1", "hyper-rustls@0.27.9", "hyper-util@0.1.20", "hyper@1.11.1", "reqwest@0.12.28", "tower-http@0.6.11", "tungstenite@0.24.0", "tungstenite@0.29.0"], "dependencies": ["bytes@1.12.1", "itoa@1.0.18"]}, -{"package": "httparse@1.10.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["hyper@1.11.1", "tungstenite@0.24.0", "tungstenite@0.29.0"], "dependencies": []}, -{"package": "httpdate@1.0.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["hyper@1.11.1", "lettre@0.11.23", "perry-ext-http@0.5.1565", "tiny_http@0.12.0"], "dependencies": []}, -{"package": "humantime@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["env_logger@0.10.2"], "dependencies": []}, -{"package": "hybrid-array@0.4.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "ctutils", "extra-sizes", "subtle", "zeroize"], "parents": ["block-buffer@0.12.0", "block-padding@0.4.2", "crypto-bigint@0.7.5", "crypto-common@0.2.2", "elliptic-curve@0.14.0", "inout@0.2.2", "ml-kem@0.3.2", "module-lattice@0.2.3", "sec1@0.8.1"], "dependencies": ["ctutils@0.4.2", "subtle@2.6.1", "typenum@1.20.1", "zeroize@1.8.2"]}, -{"package": "hyper-rustls@0.27.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["http1", "http2", "ring", "tls12", "webpki-roots", "webpki-tokio"], "parents": ["reqwest@0.12.28"], "dependencies": ["http@1.4.1", "hyper-util@0.1.20", "hyper@1.11.1", "rustls@0.23.43", "tokio-rustls@0.26.4", "tokio@1.53.1", "tower-service@0.3.3", "webpki-roots@1.0.9"]}, -{"package": "hyper-util@0.1.20", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["client", "client-legacy", "client-proxy", "default", "http1", "http2", "server", "server-auto", "tokio"], "parents": ["hyper-rustls@0.27.9", "perry-ext-fastify@0.5.1565", "perry-ext-http@0.5.1565", "perry-stdlib@0.5.1565", "reqwest@0.12.28"], "dependencies": ["base64@0.22.1", "bytes@1.12.1", "futures-channel@0.3.32", "futures-util@0.3.34", "http-body@1.0.1", "http@1.4.1", "hyper@1.11.1", "ipnet@2.12.0", "libc@0.2.189", "percent-encoding@2.3.2", "pin-project-lite@0.2.17", "socket2@0.6.5", "tokio@1.53.1", "tower-service@0.3.3", "tracing@0.1.44"]}, -{"package": "hyper@1.11.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["client", "default", "http1", "http2", "server"], "parents": ["hyper-rustls@0.27.9", "hyper-util@0.1.20", "perry-ext-fastify@0.5.1565", "perry-ext-http@0.5.1565", "perry-stdlib@0.5.1565", "reqwest@0.12.28"], "dependencies": ["atomic-waker@1.1.2", "bytes@1.12.1", "futures-channel@0.3.32", "futures-core@0.3.34", "h2@0.4.19", "http-body@1.0.1", "http@1.4.1", "httparse@1.10.1", "httpdate@1.0.3", "itoa@1.0.18", "pin-project-lite@0.2.17", "smallvec@1.15.1", "tokio@1.53.1", "want@0.3.1"]}, -{"package": "iana-time-zone-haiku@0.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["iana-time-zone@0.1.65"], "dependencies": ["cc@1.4.4"]}, -{"package": "iana-time-zone@0.1.65", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["fallback"], "parents": ["chrono@0.4.45"], "dependencies": ["android_system_properties@0.1.5", "core-foundation-sys@0.8.7", "iana-time-zone-haiku@0.1.2", "js-sys@0.3.99", "log@0.4.34", "wasm-bindgen@0.2.122", "windows-core@0.62.2"]}, -{"package": "icu_calendar@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["compiled_data"], "parents": ["icu_datetime@2.3.0", "icu_time@2.3.0", "perry-runtime@0.5.1565", "temporal_rs@0.2.6"], "dependencies": ["calendrical_calculations@0.2.4", "displaydoc@0.2.6", "icu_calendar_data@2.3.0", "icu_locale_core@2.3.0", "icu_locale_fallback@2.3.0", "icu_provider@2.3.1", "tinystr@0.8.4", "zerovec@0.11.8"]}, -{"package": "icu_calendar_data@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_calendar@2.3.0"], "dependencies": []}, -{"package": "icu_collections@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_locale@2.2.0", "icu_normalizer@2.2.0", "icu_properties@2.2.0"], "dependencies": ["displaydoc@0.2.6", "potential_utf@0.1.5", "utf8_iter@1.0.4", "yoke@0.8.3", "zerofrom@0.1.8", "zerovec@0.11.8"]}, -{"package": "icu_datetime@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["compiled_data"], "parents": ["perry-runtime@0.5.1565"], "dependencies": ["displaydoc@0.2.6", "fixed_decimal@0.7.2", "icu_calendar@2.3.0", "icu_datetime_data@2.3.0", "icu_decimal@2.3.0", "icu_locale_core@2.3.0", "icu_locale_fallback@2.3.0", "icu_pattern@0.5.0", "icu_plurals@2.3.0", "icu_provider@2.3.1", "icu_time@2.3.0", "potential_utf@0.1.5", "tinystr@0.8.4", "writeable@0.6.4", "zerovec@0.11.8"]}, -{"package": "icu_datetime_data@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_datetime@2.3.0"], "dependencies": []}, -{"package": "icu_decimal@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["compiled_data"], "parents": ["icu_datetime@2.3.0", "perry-runtime@0.5.1565"], "dependencies": ["displaydoc@0.2.6", "fixed_decimal@0.7.2", "icu_decimal_data@2.3.0", "icu_locale_core@2.3.0", "icu_locale_fallback@2.3.0", "icu_plurals@2.3.0", "icu_provider@2.3.1", "writeable@0.6.4", "zerovec@0.11.8"]}, -{"package": "icu_decimal_data@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_decimal@2.3.0"], "dependencies": []}, -{"package": "icu_locale@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["compiled_data", "default"], "parents": ["perry-runtime@0.5.1565"], "dependencies": ["icu_collections@2.2.0", "icu_locale_core@2.3.0", "icu_locale_data@2.2.0", "icu_provider@2.3.1", "potential_utf@0.1.5", "tinystr@0.8.4", "zerovec@0.11.8"]}, -{"package": "icu_locale_core@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "zerovec"], "parents": ["icu_calendar@2.3.0", "icu_datetime@2.3.0", "icu_decimal@2.3.0", "icu_locale@2.2.0", "icu_locale_fallback@2.3.0", "icu_properties@2.2.0", "icu_provider@2.3.1", "icu_time@2.3.0", "perry-runtime@0.5.1565", "temporal_rs@0.2.6"], "dependencies": ["displaydoc@0.2.6", "litemap@0.8.2", "serde@1.0.229", "tinystr@0.8.4", "writeable@0.6.4", "zerovec@0.11.8"]}, -{"package": "icu_locale_data@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_locale@2.2.0"], "dependencies": []}, -{"package": "icu_locale_fallback@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["compiled_data"], "parents": ["icu_calendar@2.3.0", "icu_datetime@2.3.0", "icu_decimal@2.3.0", "icu_plurals@2.3.0"], "dependencies": ["icu_locale_core@2.3.0", "icu_locale_fallback_data@2.3.0", "icu_provider@2.3.1", "potential_utf@0.1.5", "tinystr@0.8.4", "zerovec@0.11.8"]}, -{"package": "icu_locale_fallback_data@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_locale_fallback@2.3.0"], "dependencies": []}, -{"package": "icu_normalizer@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["compiled_data"], "parents": ["idna_adapter@1.2.2"], "dependencies": ["icu_collections@2.2.0", "icu_normalizer_data@2.2.0", "icu_properties@2.2.0", "icu_provider@2.3.1", "smallvec@1.15.1", "zerovec@0.11.8"]}, -{"package": "icu_normalizer_data@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_normalizer@2.2.0"], "dependencies": []}, -{"package": "icu_pattern@0.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "zerovec"], "parents": ["icu_datetime@2.3.0"], "dependencies": ["displaydoc@0.2.6", "either@1.16.0", "serde@1.0.229", "writeable@0.6.4", "zerovec@0.11.8"]}, -{"package": "icu_plurals@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["compiled_data"], "parents": ["icu_datetime@2.3.0", "icu_decimal@2.3.0"], "dependencies": ["fixed_decimal@0.7.2", "icu_locale_fallback@2.3.0", "icu_plurals_data@2.3.0", "icu_provider@2.3.1", "zerovec@0.11.8"]}, -{"package": "icu_plurals_data@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_plurals@2.3.0"], "dependencies": []}, -{"package": "icu_properties@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["compiled_data"], "parents": ["icu_normalizer@2.2.0", "idna_adapter@1.2.2"], "dependencies": ["icu_collections@2.2.0", "icu_locale_core@2.3.0", "icu_properties_data@2.2.0", "icu_provider@2.3.1", "zerotrie@0.2.5", "zerovec@0.11.8"]}, -{"package": "icu_properties_data@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_properties@2.2.0"], "dependencies": []}, -{"package": "icu_provider@2.3.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "baked"], "parents": ["icu_calendar@2.3.0", "icu_datetime@2.3.0", "icu_decimal@2.3.0", "icu_locale@2.2.0", "icu_locale_fallback@2.3.0", "icu_normalizer@2.2.0", "icu_plurals@2.3.0", "icu_properties@2.2.0", "icu_time@2.3.0", "perry-runtime@0.5.1565"], "dependencies": ["displaydoc@0.2.6", "icu_locale_core@2.3.0", "serde@1.0.229", "stable_deref_trait@1.2.1", "writeable@0.6.4", "yoke@0.8.3", "zerofrom@0.1.8", "zerotrie@0.2.5", "zerovec@0.11.8"]}, -{"package": "icu_time@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "compiled_data"], "parents": ["icu_datetime@2.3.0", "perry-runtime@0.5.1565"], "dependencies": ["calendrical_calculations@0.2.4", "displaydoc@0.2.6", "icu_calendar@2.3.0", "icu_locale_core@2.3.0", "icu_provider@2.3.1", "icu_time_data@2.3.0", "serde@1.0.229", "zerotrie@0.2.5", "zerovec@0.11.8"]}, -{"package": "icu_time_data@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_time@2.3.0"], "dependencies": []}, -{"package": "id-arena@2.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["wit-parser@0.244.0"], "dependencies": []}, -{"package": "ident_case@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["darling_core@0.20.11", "darling_core@0.23.0"], "dependencies": []}, -{"package": "idna@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "compiled_data", "default", "std"], "parents": ["hickory-net@0.26.1", "hickory-proto@0.26.1", "lettre@0.11.23", "perry-runtime@0.5.1565", "perry-validation@0.5.1565", "url@2.5.8", "validator@0.21.0"], "dependencies": ["idna_adapter@1.2.2", "smallvec@1.15.1", "utf8_iter@1.0.4"]}, -{"package": "idna_adapter@1.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["compiled_data"], "parents": ["idna@1.1.0"], "dependencies": ["icu_normalizer@2.2.0", "icu_properties@2.2.0"]}, -{"package": "if_chain@1.0.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_sourcemap@9.3.4"], "dependencies": []}, -{"package": "image-webp@0.2.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["image@0.25.10"], "dependencies": ["byteorder-lite@0.1.0", "quick-error@2.0.1"]}, -{"package": "image@0.25.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["avif", "bmp", "dds", "default", "default-formats", "exr", "ff", "gif", "hdr", "ico", "jpeg", "png", "pnm", "qoi", "rayon", "tga", "tiff", "webp"], "parents": ["perry-doc-tests@0.5.1565", "perry-ext-sharp@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["bytemuck@1.25.0", "byteorder-lite@0.1.0", "color_quant@1.1.0", "exr@1.74.0", "gif@0.14.2", "image-webp@0.2.4", "moxcms@0.8.1", "num-traits@0.2.19", "png@0.18.1", "qoi@0.4.1", "ravif@0.13.0", "rayon@1.12.0", "rgb@0.8.53", "tiff@0.11.3", "zune-core@0.5.1", "zune-jpeg@0.5.15"]}, -{"package": "imgref@1.12.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "deprecated"], "parents": ["dssim-core@3.5.1", "loop9@0.1.5", "ravif@0.13.0"], "dependencies": []}, -{"package": "indexmap@2.14.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "serde", "std"], "parents": ["bson@3.1.0", "h2@0.4.19", "lopdf@0.39.0", "perry-container-compose@0.5.1565", "petgraph@0.7.1", "serde_json@1.0.151", "serde_yaml@0.9.34+deprecated", "sqlx-core@0.9.0", "swc_bundler@37.0.0", "swc_config@3.1.2", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_utils@25.0.0", "toml@1.1.4+spec-1.1.0", "toml_edit@0.25.12+spec-1.1.0", "wasm-metadata@0.244.0", "wasmparser@0.244.0", "wasmparser@0.258.0", "wit-bindgen-rust@0.51.0", "wit-component@0.244.0", "wit-parser@0.244.0", "zip@8.6.0"], "dependencies": ["equivalent@1.0.2", "hashbrown@0.17.1", "serde@1.0.229", "serde_core@1.0.229"]}, -{"package": "indicatif@0.18.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "unicode-width", "wasmbind"], "parents": ["perry@0.5.1565"], "dependencies": ["console@0.16.4", "portable-atomic@1.13.1", "unicode-width@0.2.2", "unit-prefix@0.5.2", "web-time@1.1.0"]}, -{"package": "inkwell@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["llvm-sys-221", "llvm22-1", "llvm22-1-no-llvm-linking", "target-aarch64", "target-x86"], "parents": ["perry-codegen@0.5.1565"], "dependencies": ["bitflags@2.12.1", "inkwell_internals@0.14.0", "libc@0.2.189", "llvm-sys@221.0.1", "thiserror@2.0.18"]}, -{"package": "inkwell_internals@0.14.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["inkwell@0.9.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "inotify-sys@0.1.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["inotify@0.9.6"], "dependencies": ["libc@0.2.189"]}, -{"package": "inotify@0.9.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["notify@6.1.1"], "dependencies": ["bitflags@1.3.2", "inotify-sys@0.1.5", "libc@0.2.189"]}, -{"package": "inout@0.1.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["block-padding"], "parents": ["cipher@0.4.4"], "dependencies": ["block-padding@0.3.3", "generic-array@0.14.7"]}, -{"package": "inout@0.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["block-padding"], "parents": ["cipher@0.5.2"], "dependencies": ["block-padding@0.4.2", "hybrid-array@0.4.12"]}, -{"package": "interpolate_name@0.2.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rav1e@0.8.1"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "ipconfig@0.3.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["computer", "default"], "parents": ["hickory-resolver@0.26.1"], "dependencies": ["socket2@0.6.5", "widestring@1.2.1", "windows-registry@0.6.1", "windows-result@0.4.1", "windows-sys@0.61.2"]}, -{"package": "ipnet@2.12.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "serde", "std"], "parents": ["hickory-net@0.26.1", "hickory-proto@0.26.1", "hickory-resolver@0.26.1", "hyper-util@0.1.20", "prefix-trie@0.8.4"], "dependencies": ["serde@1.0.229"]}, -{"package": "is-macro@0.3.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_bundler@37.0.0", "swc_ecma_ast@19.0.0"], "dependencies": ["heck@0.5.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "is-terminal@0.4.17", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["env_logger@0.10.2"], "dependencies": ["hermit-abi@0.5.2", "libc@0.2.189", "windows-sys@0.61.2"]}, -{"package": "is_terminal_polyfill@1.70.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["anstream@1.0.0"], "dependencies": []}, -{"package": "itertools@0.12.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["bindgen@0.72.1"], "dependencies": ["either@1.16.0"]}, -{"package": "itertools@0.14.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "use_alloc", "use_std"], "parents": ["rav1e@0.8.1"], "dependencies": ["either@1.16.0"]}, -{"package": "itertools@0.15.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "use_alloc", "use_std"], "parents": ["dssim-core@3.5.1", "gstreamer@0.25.3"], "dependencies": ["either@1.16.0"]}, -{"package": "itoa@1.0.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["compact_str@0.7.1", "cssparser@0.37.0", "http@1.4.1", "hyper@1.11.1", "lopdf@0.39.0", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-ui-android@0.5.1565", "redis@1.6.0", "serde_json@1.0.151", "serde_urlencoded@0.7.1", "serde_yaml@0.9.34+deprecated", "sqlx-postgres@0.9.0"], "dependencies": []}, -{"package": "ixdtf@0.6.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "duration"], "parents": ["temporal_rs@0.2.6"], "dependencies": []}, -{"package": "javascriptcore6-sys@0.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["javascriptcore6@0.4.0", "webkit6-sys@0.4.0"], "dependencies": ["glib-sys@0.20.10", "gobject-sys@0.20.10", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "javascriptcore6@0.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["webkit6@0.4.0"], "dependencies": ["glib@0.20.12", "javascriptcore6-sys@0.4.0", "libc@0.2.189"]}, -{"package": "jiff-tzdb@0.1.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["timezone_provider@0.2.6"], "dependencies": []}, -{"package": "jni-macros@0.22.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["jni@0.22.4"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "rustc_version@0.4.1", "simd_cesu8@1.1.1", "syn@2.0.117"]}, -{"package": "jni-sys-macros@0.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["jni-sys@0.4.1"], "dependencies": ["quote@1.0.45", "syn@2.0.117"]}, -{"package": "jni-sys@0.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["jni@0.22.4"], "dependencies": ["jni-sys-macros@0.4.1"]}, -{"package": "jni@0.22.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["hickory-net@0.26.1", "hickory-proto@0.26.1", "hickory-resolver@0.26.1", "perry-ui-android@0.5.1565"], "dependencies": ["cfg-if@1.0.4", "combine@4.6.7", "jni-macros@0.22.4", "jni-sys@0.4.1", "log@0.4.34", "simd_cesu8@1.1.1", "thiserror@2.0.18", "walkdir@2.5.0", "windows-link@0.2.1"]}, -{"package": "jobserver@0.1.34", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["cc@1.4.4"], "dependencies": ["getrandom@0.3.4", "libc@0.2.189"]}, -{"package": "js-sys@0.3.99", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std", "unsafe-eval"], "parents": ["bson@3.1.0", "chrono@0.4.45", "getrandom@0.2.17", "getrandom@0.3.4", "getrandom@0.4.2", "iana-time-zone@0.1.65", "jsonwebtoken@11.0.0", "reqwest@0.12.28", "sqlite-wasm-rs@0.5.5", "time@0.3.55", "uuid@1.26.0", "wasm-bindgen-futures@0.4.72", "web-sys@0.3.99", "web-time@1.1.0"], "dependencies": ["cfg-if@1.0.4", "futures-util@0.3.34", "once_cell@1.21.4", "wasm-bindgen@0.2.122"]}, -{"package": "jsonwebtoken@11.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["rust_crypto", "use_pem"], "parents": ["perry-ext-jsonwebtoken@0.5.1565", "perry-stdlib@0.5.1565", "perry@0.5.1565"], "dependencies": ["base64@0.22.1", "ed25519-dalek@2.2.0", "getrandom@0.2.17", "hmac@0.12.1", "js-sys@0.3.99", "p256@0.13.2", "p384@0.13.1", "pem@3.0.6", "rand@0.8.7", "rsa@0.9.10", "serde@1.0.229", "serde_json@1.0.151", "sha2@0.10.9", "signature@2.2.0", "simple_asn1@0.6.4", "zeroize@1.8.2"]}, -{"package": "kamadak-exif@0.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ext-sharp@0.5.1565"], "dependencies": ["mutate_once@0.1.2"]}, -{"package": "keccak@0.1.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["sha3@0.10.9"], "dependencies": ["cpufeatures@0.2.17"]}, -{"package": "keccak@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["sha3@0.11.0", "sha3@0.12.0", "shake@0.1.0"], "dependencies": ["cfg-if@1.0.4", "cpufeatures@0.3.0"]}, -{"package": "kem@0.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ml-kem@0.3.2"], "dependencies": ["crypto-common@0.2.2", "rand_core@0.10.1"]}, -{"package": "kqueue-sys@1.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["kqueue@1.2.0"], "dependencies": ["bitflags@2.12.1", "libc@0.2.189"]}, -{"package": "kqueue@1.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["notify@6.1.1"], "dependencies": ["kqueue-sys@1.1.2", "libc@0.2.189"]}, -{"package": "ksni@0.3.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "tokio"], "parents": ["perry-ui-gtk4@0.5.1565"], "dependencies": ["futures-util@0.3.34", "pastey@0.2.3", "serde@1.0.229", "tokio@1.53.1", "zbus@5.16.0"]}, -{"package": "kstring@2.0.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std", "unsafe"], "parents": ["gstreamer@0.25.3"], "dependencies": ["static_assertions@1.1.0"]}, -{"package": "lazy_static@1.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["spin", "spin_no_std"], "parents": ["llvm-sys@221.0.1", "num-bigint-dig@0.8.6", "p12@0.6.3", "perry-ext-fastify@0.5.1565", "perry-ext-fetch@0.5.1565", "perry-ext-http@0.5.1565", "perry-ext-ioredis@0.5.1565", "perry-ext-streams@0.5.1565", "perry-ext-ws@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "sharded-slab@0.1.7"], "dependencies": ["spin@0.9.8"]}, -{"package": "leb128fmt@0.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wasm-encoder@0.244.0", "wasm-encoder@0.258.0"], "dependencies": []}, -{"package": "lebe@0.5.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["exr@1.74.0"], "dependencies": []}, -{"package": "lettre@0.11.23", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["builder", "hostname", "pool", "ring", "rustls", "rustls-tls", "smtp-transport", "tokio1", "tokio1-rustls", "tokio1-rustls-tls", "webpki-roots"], "parents": ["perry-ext-nodemailer@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["async-trait@0.1.92", "base64@0.23.1", "email-encoding@0.4.1", "email_address@0.2.9", "fastrand@2.4.1", "futures-io@0.3.34", "futures-util@0.3.34", "hostname@0.4.2", "httpdate@1.0.3", "idna@1.1.0", "mime@0.3.17", "nom@8.0.0", "percent-encoding@2.3.2", "quoted_printable@0.5.2", "rustls@0.23.43", "socket2@0.6.5", "tokio-rustls@0.26.4", "tokio@1.53.1", "url@2.5.8", "webpki-roots@1.0.9"]}, -{"package": "libbz2-rs-sys@0.2.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["rust-allocator"], "parents": ["bzip2@0.6.1"], "dependencies": []}, -{"package": "libc@0.2.189", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["android_system_properties@0.1.5", "atty@0.2.14", "cairo-rs@0.20.12", "cairo-rs@0.22.9", "cairo-sys-rs@0.20.10", "cairo-sys-rs@0.22.0", "cc@1.4.4", "clang-sys@1.8.1", "console@0.15.11", "console@0.16.4", "core-foundation@0.10.1", "core-foundation@0.9.4", "cpufeatures@0.2.17", "cpufeatures@0.3.0", "dirs-sys@0.5.0", "errno@0.3.14", "filetime@0.2.29", "fsevent-sys@4.1.0", "fslock@0.2.1", "gdk-pixbuf-sys@0.20.10", "gdk-pixbuf@0.20.10", "gdk4-sys@0.9.6", "gdk4@0.9.6", "getrandom@0.2.17", "getrandom@0.3.4", "getrandom@0.4.2", "gio-sys@0.20.10", "gio-sys@0.22.0", "gio@0.20.12", "glib-sys@0.20.10", "glib-sys@0.22.6", "glib@0.20.12", "glib@0.22.7", "gobject-sys@0.20.10", "gobject-sys@0.22.6", "graphene-rs@0.20.10", "graphene-sys@0.20.10", "gsk4-sys@0.9.6", "gsk4@0.9.6", "gstreamer-app-sys@0.25.0", "gstreamer-app@0.25.2", "gstreamer-base-sys@0.25.0", "gstreamer-base@0.25.2", "gstreamer-sys@0.25.2", "gstreamer@0.25.3", "gtk4-sys@0.9.6", "gtk4@0.9.7", "hermit-abi@0.1.19", "hostname@0.4.2", "hyper-util@0.1.20", "inkwell@0.9.0", "inotify-sys@0.1.5", "inotify@0.9.6", "is-terminal@0.4.17", "javascriptcore6-sys@0.4.0", "javascriptcore6@0.4.0", "jobserver@0.1.34", "kqueue-sys@1.1.2", "kqueue@1.2.0", "libredox@0.1.17", "libshumate-sys@0.6.0", "libshumate@0.6.0", "llvm-sys@221.0.1", "mio@0.8.11", "mio@1.2.1", "notify@6.1.1", "num_cpus@1.17.0", "objc2-app-kit@0.3.2", "objc2-core-foundation@0.3.2", "objc2-foundation@0.3.2", "pango-sys@0.20.10", "pango@0.20.12", "parking_lot_core@0.9.12", "perry-audio-miniaudio@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-ui-android@0.5.1565", "perry-ui-gtk4@0.5.1565", "perry-ui-ios@0.5.1565", "perry-ui-macos@0.5.1565", "perry-ui-tvos@0.5.1565", "perry-ui-visionos@0.5.1565", "perry-ui-watchos@0.5.1565", "perry-ui-windows-winui@0.5.1565", "perry-ui-windows@0.5.1565", "perry@0.5.1565", "quanta@0.12.6", "quinn-udp@0.5.14", "rand@0.8.7", "rav1e@0.8.1", "ring@0.17.14", "rustix@1.1.4", "security-framework-sys@2.17.0", "security-framework@3.7.0", "signal-hook-registry@1.4.8", "socket2@0.6.5", "soup3-sys@0.7.0", "soup3@0.7.0", "stacker@0.1.25", "system-configuration-sys@0.6.0", "tar@0.4.46", "tokio@1.53.1", "wait-timeout@0.2.1", "webkit6-sys@0.4.0", "webkit6@0.4.0", "which@8.0.6", "xattr@1.6.1", "zbus@5.16.0"], "dependencies": []}, -{"package": "libfuzzer-sys@0.4.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "link_libfuzzer"], "parents": ["rav1e@0.8.1"], "dependencies": ["arbitrary@1.4.2", "cc@1.4.4"]}, -{"package": "libloading@0.8.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["clang-sys@1.8.1"], "dependencies": ["cfg-if@1.0.4", "windows-link@0.2.1"]}, -{"package": "libm@0.2.16", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["arch", "default"], "parents": ["core_maths@0.1.1", "num-bigint-dig@0.8.6", "num-traits@0.2.19", "wasmi_core@1.1.0"], "dependencies": []}, -{"package": "libmimalloc-sys@0.1.49", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["cty", "extended"], "parents": ["mimalloc@0.1.52", "perry-runtime@0.5.1565"], "dependencies": ["cc@1.4.4", "cty@0.2.2"]}, -{"package": "libredox@0.1.17", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["base", "call", "libc", "std"], "parents": ["redox_users@0.5.2"], "dependencies": ["libc@0.2.189"]}, -{"package": "libshumate-sys@0.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["libshumate@0.6.0"], "dependencies": ["gdk-pixbuf-sys@0.20.10", "gdk4-sys@0.9.6", "gio-sys@0.20.10", "glib-sys@0.20.10", "gobject-sys@0.20.10", "gtk4-sys@0.9.6", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "libshumate@0.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ui-gtk4@0.5.1565"], "dependencies": ["gdk-pixbuf@0.20.10", "gdk4@0.9.6", "gio@0.20.12", "glib@0.20.12", "gtk4@0.9.7", "libc@0.2.189", "libshumate-sys@0.6.0"]}, -{"package": "libsqlite3-sys@0.37.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["bindgen", "buildtime_bindgen", "bundled", "bundled_bindings", "cc", "default", "min_sqlite_version_3_34_1", "pkg-config", "preupdate_hook", "session", "vcpkg"], "parents": ["rusqlite@0.39.0", "sqlx-sqlite@0.9.0"], "dependencies": ["bindgen@0.72.1", "cc@1.4.4", "pkg-config@0.3.33", "vcpkg@0.2.15"]}, -{"package": "linux-raw-sys@0.12.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["auxvec", "elf", "errno", "general", "if_ether", "ioctl", "net", "netlink", "no_std", "prctl", "xdp"], "parents": ["rustix@1.1.4"], "dependencies": []}, -{"package": "litemap@0.8.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["icu_locale_core@2.3.0"], "dependencies": []}, -{"package": "litrs@1.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["document-features@0.2.12"], "dependencies": []}, -{"package": "llvm-sys@221.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["no-llvm-linking"], "parents": ["inkwell@0.9.0", "perry-codegen@0.5.1565"], "dependencies": ["anyhow@1.0.104", "cc@1.4.4", "lazy_static@1.5.0", "libc@0.2.189", "regex-lite@0.1.9", "semver@1.0.28"]}, -{"package": "lock_api@0.4.14", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["atomic_usize", "default"], "parents": ["dashmap@5.5.3", "dashmap@6.2.1", "futures-intrusive@0.5.0", "parking_lot@0.12.5", "spin@0.9.8", "spinning_top@0.3.0"], "dependencies": ["scopeguard@1.2.0"]}, -{"package": "log@0.4.34", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "std"], "parents": ["allsorts-azul@0.16.5", "av-scenechange@0.14.1", "av1-grain@0.2.5", "env_logger@0.10.2", "html5ever@0.39.0", "iana-time-zone@0.1.65", "jni@0.22.4", "lopdf@0.39.0", "markup5ever@0.39.0", "mio@0.8.11", "notify@6.1.1", "pathfinder_geometry@0.5.1", "perry-codegen@0.5.1565", "perry@0.5.1565", "rav1e@0.8.1", "reqwest@0.12.28", "rustls@0.23.43", "selectors@0.38.0", "sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "tiny_http@0.12.0", "tokio-tungstenite@0.29.0", "tracing-log@0.2.0", "tracing@0.1.44", "tungstenite@0.24.0", "tungstenite@0.29.0", "wit-component@0.244.0", "wit-parser@0.244.0", "zopfli@0.8.3"], "dependencies": []}, -{"package": "loop9@0.1.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ravif@0.13.0"], "dependencies": ["imgref@1.12.3"]}, -{"package": "lopdf@0.39.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["time"], "parents": ["printpdf@0.10.1"], "dependencies": ["aes@0.8.4", "bitflags@2.12.1", "cbc@0.1.2", "ecb@0.1.2", "encoding_rs@0.8.35", "flate2@1.1.10", "getrandom@0.3.4", "indexmap@2.14.1", "itoa@1.0.18", "log@0.4.34", "md-5@0.10.6", "nom@8.0.0", "nom_locate@5.0.0", "rand@0.9.4", "rangemap@1.7.1", "sha2@0.10.9", "stringprep@0.1.5", "thiserror@2.0.18", "time@0.3.55", "ttf-parser@0.25.1", "weezl@0.1.12"]}, -{"package": "lru-slab@0.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["quinn-proto@0.11.15"], "dependencies": []}, -{"package": "lru@0.18.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "hashbrown"], "parents": ["perry-ext-lru-cache@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["hashbrown@0.17.1"]}, -{"package": "lzma-rust2@0.16.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["encoder", "optimization", "sha2", "std", "xz"], "parents": ["zip@8.6.0"], "dependencies": ["sha2@0.11.0"]}, -{"package": "mach2@0.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-runtime@0.5.1565"], "dependencies": []}, -{"package": "macro_magic@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "proc_support"], "parents": ["mongodb-internal-macros@3.8.2", "mongodb@3.8.2"], "dependencies": ["macro_magic_core@0.5.1", "macro_magic_macros@0.5.1", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "macro_magic_core@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["macro_magic@0.5.1", "macro_magic_macros@0.5.1"], "dependencies": ["const-random@0.1.18", "derive-syn-parse@0.2.0", "macro_magic_core_macros@0.5.1", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "macro_magic_core_macros@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["macro_magic_core@0.5.1"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "macro_magic_macros@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["macro_magic@0.5.1"], "dependencies": ["macro_magic_core@0.5.1", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "markup5ever@0.39.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["html5ever@0.39.0"], "dependencies": ["log@0.4.34", "tendril@0.5.0", "web_atoms@0.2.4"]}, -{"package": "matchers@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tracing-subscriber@0.3.23"], "dependencies": ["regex-automata@0.4.18"]}, -{"package": "maybe-rayon@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["rayon", "threads"], "parents": ["rav1e@0.8.1"], "dependencies": ["cfg-if@1.0.4", "rayon@1.12.0"]}, -{"package": "md-5@0.10.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["lopdf@0.39.0", "uuid@1.26.0"], "dependencies": ["cfg-if@1.0.4", "digest@0.10.7"]}, -{"package": "md-5@0.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "oid"], "parents": ["mongodb@3.8.2", "perry-container-compose@0.5.1565", "perry-stdlib@0.5.1565", "sqlx-postgres@0.9.0"], "dependencies": ["cfg-if@1.0.4", "digest@0.11.3"]}, -{"package": "memchr@2.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std", "use_std"], "parents": ["aho-corasick@1.1.4", "combine@4.6.7", "email-encoding@0.4.1", "futures-util@0.3.34", "glib@0.20.12", "glib@0.22.7", "no_std_io2@0.9.4", "nom@7.1.3", "nom@8.0.0", "nom_locate@5.0.0", "object@0.37.3", "regex-automata@0.4.18", "regex@1.13.1", "serde_json@1.0.151", "sqlx-core@0.9.0", "sqlx-postgres@0.9.0", "swc_ecma_codegen@21.0.0", "winnow@0.7.15", "winnow@1.0.3", "zip@8.6.0"], "dependencies": []}, -{"package": "memoffset@0.9.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["field-offset@0.3.6", "uds_windows@1.2.1"], "dependencies": ["autocfg@1.5.1"]}, -{"package": "miette-derive@7.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["miette@7.6.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "miette@7.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "derive"], "parents": ["node-semver@2.2.0"], "dependencies": ["cfg-if@1.0.4", "miette-derive@7.6.0", "unicode-width@0.1.14"]}, -{"package": "mimalloc@0.1.52", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-runtime@0.5.1565"], "dependencies": ["libmimalloc-sys@0.1.49"]}, -{"package": "mime@0.3.17", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["lettre@0.11.23", "mime_guess@2.0.5"], "dependencies": []}, -{"package": "mime_guess@2.0.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["reqwest@0.12.28"], "dependencies": ["mime@0.3.17", "unicase@2.9.0"]}, -{"package": "minimal-lexical@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["nom@7.1.3"], "dependencies": []}, -{"package": "miniz_oxide@0.8.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "simd", "simd-adler32", "with-alloc"], "parents": ["exr@1.74.0", "png@0.18.1"], "dependencies": ["adler2@2.0.1", "simd-adler32@0.3.9"]}, -{"package": "miniz_oxide@0.9.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "simd", "simd-adler32", "with-alloc"], "parents": ["flate2@1.1.10"], "dependencies": ["adler2@2.0.1", "simd-adler32@0.3.9"]}, -{"package": "mio@0.8.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "log", "os-ext", "os-poll"], "parents": ["notify@6.1.1"], "dependencies": ["libc@0.2.189", "log@0.4.34", "wasi@0.11.1+wasi-snapshot-preview1", "windows-sys@0.48.0"]}, -{"package": "mio@1.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["net", "os-ext", "os-poll"], "parents": ["tokio@1.53.1"], "dependencies": ["libc@0.2.189", "wasi@0.11.1+wasi-snapshot-preview1", "windows-sys@0.61.2"]}, -{"package": "ml-kem@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "pkcs8"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["const-oid@0.10.2", "hybrid-array@0.4.12", "kem@0.3.0", "module-lattice@0.2.3", "pkcs8@0.11.0", "rand_core@0.10.1", "sha3@0.11.0"]}, -{"package": "module-lattice@0.2.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "ctutils"], "parents": ["ml-kem@0.3.2"], "dependencies": ["ctutils@0.4.2", "hybrid-array@0.4.12", "num-traits@0.2.19"]}, -{"package": "moka@0.12.15", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "sync"], "parents": ["hickory-resolver@0.26.1"], "dependencies": ["crossbeam-channel@0.5.15", "crossbeam-epoch@0.9.20", "crossbeam-utils@0.8.21", "equivalent@1.0.2", "parking_lot@0.12.5", "portable-atomic@1.13.1", "smallvec@1.15.1", "tagptr@0.2.0", "uuid@1.26.0"]}, -{"package": "mongocrypt-sys@0.1.6+1.18.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["mongocrypt@0.4.0"], "dependencies": []}, -{"package": "mongocrypt@0.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["bson-3"], "parents": ["mongodb@3.8.2"], "dependencies": ["bson@3.1.0", "mongocrypt-sys@0.1.6+1.18.2", "once_cell@1.21.4", "serde@1.0.229"]}, -{"package": "mongodb-internal-macros@3.8.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["mongodb@3.8.2"], "dependencies": ["macro_magic@0.5.1", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "mongodb@3.8.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["bson-3", "compat-3-3-0", "dns-resolver", "rustls-tls"], "parents": ["perry-ext-mongodb@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["base64@0.22.1", "bitflags@2.12.1", "bson@3.1.0", "derive-where@1.6.1", "derive_more@2.1.1", "futures-core@0.3.34", "futures-io@0.3.34", "futures-util@0.3.34", "hex@0.4.3", "hickory-net@0.26.1", "hickory-proto@0.26.1", "hickory-resolver@0.26.1", "hmac@0.13.0", "macro_magic@0.5.1", "md-5@0.11.0", "mongocrypt@0.4.0", "mongodb-internal-macros@3.8.2", "pbkdf2@0.13.0", "percent-encoding@2.3.2", "rand@0.9.4", "rustc_version_runtime@0.3.0", "rustls@0.23.43", "serde@1.0.229", "serde_bytes@0.11.19", "serde_with@3.21.0", "sha1@0.11.0", "sha2@0.11.0", "socket2@0.6.5", "stringprep@0.1.5", "strsim@0.11.1", "take_mut@0.2.2", "thiserror@2.0.18", "tokio-rustls@0.26.4", "tokio-util@0.7.18", "tokio@1.53.1", "typed-builder@0.22.0", "uuid@1.26.0", "webpki-roots@1.0.9"]}, -{"package": "moxcms@0.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["avx", "avx_luts", "avx_shaper_fixed_point_paths", "avx_shaper_paths", "default", "lut", "neon", "neon_luts", "neon_shaper_fixed_point_paths", "neon_shaper_paths", "sse", "sse_luts", "sse_shaper_fixed_point_paths", "sse_shaper_paths"], "parents": ["image@0.25.10"], "dependencies": ["num-traits@0.2.19", "pxfm@0.1.29"]}, -{"package": "mpris-server@0.10.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["tokio"], "parents": ["perry-ui-gtk4@0.5.1565"], "dependencies": ["async-channel@2.5.0", "futures-channel@0.3.32", "serde@1.0.229", "trait-variant@0.1.2", "zbus@5.16.0"]}, -{"package": "muldiv@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gstreamer@0.25.3"], "dependencies": []}, -{"package": "mutate_once@0.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["kamadak-exif@0.6.1"], "dependencies": []}, -{"package": "nanoid@0.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-ext-nanoid@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["rand@0.9.4"]}, -{"package": "ndk-context@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["hickory-resolver@0.26.1"], "dependencies": []}, -{"package": "new_debug_unreachable@1.0.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["hstr@3.0.6", "rav1e@0.8.1", "selectors@0.38.0", "string_cache@0.9.0", "swc_ecma_visit@19.0.0", "swc_visit@2.0.1", "tendril@0.5.0"], "dependencies": []}, -{"package": "no_std_io2@0.9.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["bitstream-io@4.10.0"], "dependencies": ["memchr@2.8.1"]}, -{"package": "node-semver@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-runtime@0.5.1565"], "dependencies": ["bytecount@0.6.9", "miette@7.6.0", "nom@7.1.3", "serde@1.0.229", "thiserror@1.0.69"]}, -{"package": "nom@7.1.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["cexpr@0.6.0", "node-semver@2.2.0"], "dependencies": ["memchr@2.8.1", "minimal-lexical@0.2.1"]}, -{"package": "nom@8.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["av1-grain@0.2.5", "lettre@0.11.23", "lopdf@0.39.0", "nom_locate@5.0.0"], "dependencies": ["memchr@2.8.1"]}, -{"package": "nom_locate@5.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["lopdf@0.39.0"], "dependencies": ["bytecount@0.6.9", "memchr@2.8.1", "nom@8.0.0"]}, -{"package": "nonzero_ext@0.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["governor@0.10.4"], "dependencies": []}, -{"package": "noop_proc_macro@0.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rav1e@0.8.1"], "dependencies": []}, -{"package": "notify@6.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["crossbeam-channel", "default", "fsevent-sys", "macos_fsevent"], "parents": ["perry-ext-parcel-watcher@0.5.1565", "perry-runtime@0.5.1565", "perry@0.5.1565"], "dependencies": ["bitflags@2.12.1", "crossbeam-channel@0.5.15", "filetime@0.2.29", "fsevent-sys@4.1.0", "inotify@0.9.6", "kqueue@1.2.0", "libc@0.2.189", "log@0.4.34", "mio@0.8.11", "walkdir@2.5.0", "windows-sys@0.48.0"]}, -{"package": "nu-ansi-term@0.50.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["tracing-subscriber@0.3.23"], "dependencies": ["windows-sys@0.61.2"]}, -{"package": "num-bigint-dig@0.8.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["i128", "prime", "rand", "u64_digit", "zeroize"], "parents": ["rsa@0.9.10"], "dependencies": ["lazy_static@1.5.0", "libm@0.2.16", "num-integer@0.1.46", "num-iter@0.1.45", "num-traits@0.2.19", "rand@0.8.7", "smallvec@1.15.1", "zeroize@1.8.2"]}, -{"package": "num-bigint@0.4.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "serde", "std"], "parents": ["num-rational@0.4.2", "simple_asn1@0.6.4", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_codegen@21.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "swc_ecma_visit@19.0.0"], "dependencies": ["num-integer@0.1.46", "num-traits@0.2.19", "serde@1.0.229"]}, -{"package": "num-bigint@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["redis@1.6.0"], "dependencies": ["num-integer@0.1.46", "num-traits@0.2.19"]}, -{"package": "num-conv@0.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["time-macros@0.2.32", "time@0.3.55"], "dependencies": []}, -{"package": "num-derive@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rav1e@0.8.1", "tokio-cron-scheduler@0.15.1"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "num-integer@0.1.46", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["i128", "std"], "parents": ["gstreamer@0.25.3", "num-bigint-dig@0.8.6", "num-bigint@0.4.6", "num-bigint@0.5.1", "num-iter@0.1.45", "num-rational@0.4.2", "rsa@0.9.10"], "dependencies": ["num-traits@0.2.19"]}, -{"package": "num-iter@0.1.45", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["num-bigint-dig@0.8.6"], "dependencies": ["autocfg@1.5.1", "num-integer@0.1.46", "num-traits@0.2.19"]}, -{"package": "num-rational@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "num-bigint", "std"], "parents": ["av-scenechange@0.14.1", "av1-grain@0.2.5", "gstreamer@0.25.3"], "dependencies": ["num-bigint@0.4.6", "num-integer@0.1.46", "num-traits@0.2.19"]}, -{"package": "num-traits@0.2.19", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "i128", "libm", "std"], "parents": ["atoi@2.0.0", "av-scenechange@0.14.1", "chrono@0.4.45", "crypto-bigint@0.7.5", "fast_image_resize@6.1.0", "image@0.25.10", "module-lattice@0.2.3", "moxcms@0.8.1", "num-bigint-dig@0.8.6", "num-bigint@0.4.6", "num-bigint@0.5.1", "num-integer@0.1.46", "num-iter@0.1.45", "num-rational@0.4.2", "prefix-trie@0.8.4", "proptest@1.11.0", "rav1e@0.8.1", "rsa@0.9.10", "rust_decimal@1.43.0", "simple_asn1@0.6.4", "temporal_rs@0.2.6", "tokio-cron-scheduler@0.15.1", "v_frame@0.3.9"], "dependencies": ["autocfg@1.5.1", "libm@0.2.16"]}, -{"package": "num_cpus@1.17.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_utils@25.0.0"], "dependencies": ["hermit-abi@0.5.2", "libc@0.2.189"]}, -{"package": "objc2-app-kit@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["AppKitDefines", "AppKitErrors", "NSATSTypesetter", "NSAccessibility", "NSAccessibilityColor", "NSAccessibilityConstants", "NSAccessibilityCustomAction", "NSAccessibilityCustomRotor", "NSAccessibilityElement", "NSAccessibilityProtocols", "NSActionCell", "NSAdaptiveImageGlyph", "NSAffineTransform", "NSAlert", "NSAlignmentFeedbackFilter", "NSAnimation", "NSAnimationContext", "NSAppearance", "NSAppleScriptExtensions", "NSApplication", "NSApplicationScripting", "NSArrayController", "NSAttributedString", "NSBackgroundExtensionView", "NSBezierPath", "NSBitmapImageRep", "NSBox", "NSBrowser", "NSBrowserCell", "NSButton", "NSButtonCell", "NSButtonTouchBarItem", "NSCIImageRep", "NSCachedImageRep", "NSCandidateListTouchBarItem", "NSCell", "NSClickGestureRecognizer", "NSClipView", "NSCollectionView", "NSCollectionViewCompositionalLayout", "NSCollectionViewFlowLayout", "NSCollectionViewGridLayout", "NSCollectionViewLayout", "NSCollectionViewTransitionLayout", "NSColor", "NSColorList", "NSColorPanel", "NSColorPicker", "NSColorPickerTouchBarItem", "NSColorPicking", "NSColorSampler", "NSColorSpace", "NSColorWell", "NSComboBox", "NSComboBoxCell", "NSComboButton", "NSControl", "NSController", "NSCursor", "NSCustomImageRep", "NSCustomTouchBarItem", "NSDataAsset", "NSDatePicker", "NSDatePickerCell", "NSDictionaryController", "NSDiffableDataSource", "NSDirection", "NSDockTile", "NSDocument", "NSDocumentController", "NSDocumentScripting", "NSDragging", "NSDraggingItem", "NSDraggingSession", "NSDrawer", "NSEPSImageRep", "NSErrors", "NSEvent", "NSFilePromiseProvider", "NSFilePromiseReceiver", "NSFileWrapperExtensions", "NSFont", "NSFontAssetRequest", "NSFontCollection", "NSFontDescriptor", "NSFontManager", "NSFontPanel", "NSForm", "NSFormCell", "NSGestureRecognizer", "NSGlassEffectView", "NSGlyphGenerator", "NSGlyphInfo", "NSGradient", "NSGraphics", "NSGraphicsContext", "NSGridView", "NSGroupTouchBarItem", "NSHapticFeedback", "NSHelpManager", "NSImage", "NSImageCell", "NSImageRep", "NSImageView", "NSInputManager", "NSInputServer", "NSInterfaceStyle", "NSItemBadge", "NSItemProvider", "NSKeyValueBinding", "NSLayoutAnchor", "NSLayoutConstraint", "NSLayoutGuide", "NSLayoutManager", "NSLevelIndicator", "NSLevelIndicatorCell", "NSMagnificationGestureRecognizer", "NSMatrix", "NSMediaLibraryBrowserController", "NSMenu", "NSMenuItem", "NSMenuItemBadge", "NSMenuItemCell", "NSMenuToolbarItem", "NSMovie", "NSNib", "NSNibConnector", "NSNibControlConnector", "NSNibDeclarations", "NSNibLoading", "NSNibOutletConnector", "NSObjectController", "NSOpenGL", "NSOpenGLLayer", "NSOpenGLView", "NSOpenPanel", "NSOutlineView", "NSPDFImageRep", "NSPDFInfo", "NSPDFPanel", "NSPICTImageRep", "NSPageController", "NSPageLayout", "NSPanGestureRecognizer", "NSPanel", "NSParagraphStyle", "NSPasteboard", "NSPasteboardItem", "NSPathCell", "NSPathComponentCell", "NSPathControl", "NSPathControlItem", "NSPersistentDocument", "NSPickerTouchBarItem", "NSPopUpButton", "NSPopUpButtonCell", "NSPopover", "NSPopoverTouchBarItem", "NSPredicateEditor", "NSPredicateEditorRowTemplate", "NSPressGestureRecognizer", "NSPressureConfiguration", "NSPreviewRepresentingActivityItem", "NSPrintInfo", "NSPrintOperation", "NSPrintPanel", "NSPrinter", "NSProgressIndicator", "NSResponder", "NSRotationGestureRecognizer", "NSRuleEditor", "NSRulerMarker", "NSRulerView", "NSRunningApplication", "NSSavePanel", "NSScreen", "NSScrollView", "NSScroller", "NSScrubber", "NSScrubberItemView", "NSScrubberLayout", "NSSearchField", "NSSearchFieldCell", "NSSearchToolbarItem", "NSSecureTextField", "NSSegmentedCell", "NSSegmentedControl", "NSShadow", "NSSharingCollaborationModeRestriction", "NSSharingService", "NSSharingServicePickerToolbarItem", "NSSharingServicePickerTouchBarItem", "NSSlider", "NSSliderAccessory", "NSSliderCell", "NSSliderTouchBarItem", "NSSound", "NSSpeechRecognizer", "NSSpeechSynthesizer", "NSSpellChecker", "NSSpellProtocol", "NSSplitView", "NSSplitViewController", "NSSplitViewItem", "NSSplitViewItemAccessoryViewController", "NSStackView", "NSStatusBar", "NSStatusBarButton", "NSStatusItem", "NSStepper", "NSStepperCell", "NSStepperTouchBarItem", "NSStoryboard", "NSStoryboardSegue", "NSStringDrawing", "NSSwitch", "NSTabView", "NSTabViewController", "NSTabViewItem", "NSTableCellView", "NSTableColumn", "NSTableHeaderCell", "NSTableHeaderView", "NSTableRowView", "NSTableView", "NSTableViewDiffableDataSource", "NSTableViewRowAction", "NSText", "NSTextAlternatives", "NSTextAttachment", "NSTextAttachmentCell", "NSTextCheckingClient", "NSTextCheckingController", "NSTextContainer", "NSTextContent", "NSTextContentManager", "NSTextElement", "NSTextField", "NSTextFieldCell", "NSTextFinder", "NSTextInputClient", "NSTextInputContext", "NSTextInsertionIndicator", "NSTextLayoutFragment", "NSTextLayoutManager", "NSTextLineFragment", "NSTextList", "NSTextListElement", "NSTextRange", "NSTextSelection", "NSTextSelectionNavigation", "NSTextStorage", "NSTextStorageScripting", "NSTextTable", "NSTextView", "NSTextViewportLayoutController", "NSTintConfiguration", "NSTintProminence", "NSTitlebarAccessoryViewController", "NSTokenField", "NSTokenFieldCell", "NSToolbar", "NSToolbarItem", "NSToolbarItemGroup", "NSTouch", "NSTouchBar", "NSTouchBarItem", "NSTrackingArea", "NSTrackingSeparatorToolbarItem", "NSTreeController", "NSTreeNode", "NSTypesetter", "NSUserActivity", "NSUserDefaultsController", "NSUserInterfaceCompression", "NSUserInterfaceItemIdentification", "NSUserInterfaceItemSearching", "NSUserInterfaceLayout", "NSUserInterfaceValidation", "NSView", "NSViewController", "NSViewLayoutRegion", "NSVisualEffectView", "NSWindow", "NSWindowController", "NSWindowRestoration", "NSWindowScripting", "NSWindowTab", "NSWindowTabGroup", "NSWorkspace", "NSWritingToolsCoordinator", "NSWritingToolsCoordinatorAnimationParameters", "NSWritingToolsCoordinatorContext", "alloc", "bitflags", "block2", "default", "libc", "objc2-cloud-kit", "objc2-core-data", "objc2-core-foundation", "objc2-core-graphics", "objc2-core-image", "objc2-core-text", "objc2-core-video", "objc2-quartz-core", "std"], "parents": ["perry-ui-macos@0.5.1565"], "dependencies": ["bitflags@2.12.1", "block2@0.6.2", "libc@0.2.189", "objc2-cloud-kit@0.3.2", "objc2-core-data@0.3.2", "objc2-core-foundation@0.3.2", "objc2-core-graphics@0.3.2", "objc2-core-image@0.3.2", "objc2-core-text@0.3.2", "objc2-core-video@0.3.2", "objc2-foundation@0.3.2", "objc2-quartz-core@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-cloud-kit@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["CKContainer", "CKRecord", "CKShare", "CKShareMetadata", "bitflags"], "parents": ["objc2-app-kit@0.3.2", "objc2-ui-kit@0.3.2"], "dependencies": ["bitflags@2.12.1", "objc2-foundation@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-core-data@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["NSAttributeDescription", "NSEntityDescription", "NSFetchRequest", "NSManagedObjectContext", "NSManagedObjectModel", "NSPersistentStoreRequest", "NSPropertyDescription", "bitflags"], "parents": ["objc2-app-kit@0.3.2", "objc2-ui-kit@0.3.2"], "dependencies": ["bitflags@2.12.1", "objc2-foundation@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-core-foundation@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["CFArray", "CFAttributedString", "CFAvailability", "CFBag", "CFBinaryHeap", "CFBitVector", "CFBundle", "CFByteOrder", "CFCGTypes", "CFCalendar", "CFCharacterSet", "CFData", "CFDate", "CFDateFormatter", "CFDictionary", "CFError", "CFFileDescriptor", "CFFileSecurity", "CFLocale", "CFMachPort", "CFMessagePort", "CFNotificationCenter", "CFNumber", "CFNumberFormatter", "CFPlugIn", "CFPlugInCOM", "CFPreferences", "CFPropertyList", "CFRunLoop", "CFSet", "CFSocket", "CFStream", "CFString", "CFStringEncodingExt", "CFStringTokenizer", "CFTimeZone", "CFTree", "CFURL", "CFURLAccess", "CFURLEnumerator", "CFUUID", "CFUserNotification", "CFUtilities", "CFXMLNode", "CFXMLParser", "alloc", "bitflags", "block2", "default", "dispatch2", "libc", "objc2", "std"], "parents": ["objc2-app-kit@0.3.2", "objc2-core-graphics@0.3.2", "objc2-core-text@0.3.2", "objc2-core-video@0.3.2", "objc2-foundation@0.3.2", "objc2-io-surface@0.3.2", "objc2-quartz-core@0.3.2", "objc2-ui-kit@0.3.2", "perry-ui-ios@0.5.1565", "perry-ui-macos@0.5.1565", "perry-ui-tvos@0.5.1565", "perry-ui-visionos@0.5.1565"], "dependencies": ["bitflags@2.12.1", "block2@0.6.2", "dispatch2@0.3.1", "libc@0.2.189", "objc2@0.6.4"]}, -{"package": "objc2-core-graphics@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["CGColor", "CGColorSpace", "CGContext", "CGDirectDisplay", "CGEventTypes", "CGFont", "CGImage", "CGPath", "bitflags", "objc2"], "parents": ["objc2-app-kit@0.3.2", "objc2-core-text@0.3.2", "objc2-core-video@0.3.2", "objc2-ui-kit@0.3.2"], "dependencies": ["bitflags@2.12.1", "dispatch2@0.3.1", "objc2-core-foundation@0.3.2", "objc2-io-surface@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-core-image@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["CIColor", "CIContext", "CIFilter", "CIImage"], "parents": ["objc2-app-kit@0.3.2", "objc2-ui-kit@0.3.2"], "dependencies": ["objc2-foundation@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-core-location@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["CLRegion"], "parents": ["objc2-ui-kit@0.3.2"], "dependencies": ["objc2-foundation@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-core-text@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["CTFont", "CTFontCollection", "CTFontDescriptor", "CTGlyphInfo", "bitflags", "objc2"], "parents": ["objc2-app-kit@0.3.2", "objc2-ui-kit@0.3.2"], "dependencies": ["bitflags@2.12.1", "objc2-core-foundation@0.3.2", "objc2-core-graphics@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-core-video@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["CVBase", "bitflags", "objc2"], "parents": ["objc2-app-kit@0.3.2"], "dependencies": ["bitflags@2.12.1", "objc2-core-foundation@0.3.2", "objc2-core-graphics@0.3.2", "objc2-io-surface@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-encode@4.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "std"], "parents": ["objc2@0.6.4"], "dependencies": []}, -{"package": "objc2-foundation@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["FoundationErrors", "FoundationLegacySwiftCompatibility", "NSAffineTransform", "NSAppleEventDescriptor", "NSAppleEventManager", "NSAppleScript", "NSArchiver", "NSArray", "NSAttributedString", "NSAutoreleasePool", "NSBackgroundActivityScheduler", "NSBundle", "NSByteCountFormatter", "NSByteOrder", "NSCache", "NSCalendar", "NSCalendarDate", "NSCharacterSet", "NSClassDescription", "NSCoder", "NSComparisonPredicate", "NSCompoundPredicate", "NSConnection", "NSData", "NSDate", "NSDateComponentsFormatter", "NSDateFormatter", "NSDateInterval", "NSDateIntervalFormatter", "NSDebug", "NSDecimal", "NSDecimalNumber", "NSDictionary", "NSDistantObject", "NSDistributedLock", "NSDistributedNotificationCenter", "NSEnergyFormatter", "NSEnumerator", "NSError", "NSException", "NSExpression", "NSExtensionContext", "NSExtensionItem", "NSExtensionRequestHandling", "NSFileCoordinator", "NSFileHandle", "NSFileManager", "NSFilePresenter", "NSFileVersion", "NSFileWrapper", "NSFormatter", "NSGarbageCollector", "NSGeometry", "NSHFSFileTypes", "NSHTTPCookie", "NSHTTPCookieStorage", "NSHashTable", "NSHost", "NSISO8601DateFormatter", "NSIndexPath", "NSIndexSet", "NSInflectionRule", "NSInvocation", "NSItemProvider", "NSJSONSerialization", "NSKeyValueCoding", "NSKeyValueObserving", "NSKeyValueSharedObservers", "NSKeyedArchiver", "NSLengthFormatter", "NSLinguisticTagger", "NSListFormatter", "NSLocale", "NSLocalizedNumberFormatRule", "NSLock", "NSMapTable", "NSMassFormatter", "NSMeasurement", "NSMeasurementFormatter", "NSMetadata", "NSMetadataAttributes", "NSMethodSignature", "NSMorphology", "NSNetServices", "NSNotification", "NSNotificationQueue", "NSNull", "NSNumberFormatter", "NSObjCRuntime", "NSObject", "NSObjectScripting", "NSOperation", "NSOrderedCollectionChange", "NSOrderedCollectionDifference", "NSOrderedSet", "NSOrthography", "NSPathUtilities", "NSPersonNameComponents", "NSPersonNameComponentsFormatter", "NSPointerArray", "NSPointerFunctions", "NSPort", "NSPortCoder", "NSPortMessage", "NSPortNameServer", "NSPredicate", "NSProcessInfo", "NSProgress", "NSPropertyList", "NSProtocolChecker", "NSProxy", "NSRange", "NSRegularExpression", "NSRelativeDateTimeFormatter", "NSRunLoop", "NSScanner", "NSScriptClassDescription", "NSScriptCoercionHandler", "NSScriptCommand", "NSScriptCommandDescription", "NSScriptExecutionContext", "NSScriptKeyValueCoding", "NSScriptObjectSpecifiers", "NSScriptStandardSuiteCommands", "NSScriptSuiteRegistry", "NSScriptWhoseTests", "NSSet", "NSSortDescriptor", "NSSpellServer", "NSStream", "NSString", "NSTask", "NSTermOfAddress", "NSTextCheckingResult", "NSThread", "NSTimeZone", "NSTimer", "NSURL", "NSURLAuthenticationChallenge", "NSURLCache", "NSURLConnection", "NSURLCredential", "NSURLCredentialStorage", "NSURLDownload", "NSURLError", "NSURLHandle", "NSURLProtectionSpace", "NSURLProtocol", "NSURLRequest", "NSURLResponse", "NSURLSession", "NSUUID", "NSUbiquitousKeyValueStore", "NSUndoManager", "NSUnit", "NSUserActivity", "NSUserDefaults", "NSUserNotification", "NSUserScriptTask", "NSValue", "NSValueTransformer", "NSXMLDTD", "NSXMLDTDNode", "NSXMLDocument", "NSXMLElement", "NSXMLNode", "NSXMLNodeOptions", "NSXMLParser", "NSXPCConnection", "NSZone", "alloc", "bitflags", "block2", "default", "libc", "objc2-core-foundation", "std"], "parents": ["objc2-app-kit@0.3.2", "objc2-cloud-kit@0.3.2", "objc2-core-data@0.3.2", "objc2-core-image@0.3.2", "objc2-core-location@0.3.2", "objc2-quartz-core@0.3.2", "objc2-ui-kit@0.3.2", "objc2-user-notifications@0.3.2", "perry-ui-ios@0.5.1565", "perry-ui-macos@0.5.1565", "perry-ui-tvos@0.5.1565", "perry-ui-visionos@0.5.1565", "perry-ui-watchos@0.5.1565"], "dependencies": ["bitflags@2.12.1", "block2@0.6.2", "libc@0.2.189", "objc2-core-foundation@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-io-surface@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["IOSurfaceRef", "bitflags", "objc2"], "parents": ["objc2-core-graphics@0.3.2", "objc2-core-video@0.3.2"], "dependencies": ["bitflags@2.12.1", "objc2-core-foundation@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-quartz-core@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["CADisplayLink", "CAFrameRateRange", "CALayer", "CAMediaTiming", "CAMediaTimingFunction", "CAOpenGLLayer", "CATransform3D", "bitflags", "objc2-core-foundation"], "parents": ["objc2-app-kit@0.3.2", "objc2-ui-kit@0.3.2"], "dependencies": ["bitflags@2.12.1", "objc2-core-foundation@0.3.2", "objc2-foundation@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-ui-kit@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["DocumentManager", "NSAdaptiveImageGlyph", "NSAttributedString", "NSDataAsset", "NSDiffableDataSourceSectionSnapshot", "NSFileProviderExtension", "NSIndexPath_UIKitAdditions", "NSItemProvider_UIKitAdditions", "NSLayoutAnchor", "NSLayoutConstraint", "NSLayoutManager", "NSParagraphStyle", "NSShadow", "NSStringDrawing", "NSText", "NSTextAttachment", "NSTextContainer", "NSTextContentManager", "NSTextElement", "NSTextLayoutFragment", "NSTextLayoutManager", "NSTextLineFragment", "NSTextList", "NSTextListElement", "NSTextRange", "NSTextSelection", "NSTextSelectionNavigation", "NSTextStorage", "NSTextViewportLayoutController", "NSToolbar_UIKitAdditions", "NSTouchBar_UIKitAdditions", "NSUserActivity_NSItemProvider", "PrintKitUI", "ShareSheet", "UIAccelerometer", "UIAccessibility", "UIAccessibilityAdditions", "UIAccessibilityConstants", "UIAccessibilityContainer", "UIAccessibilityContentSizeCategoryImageAdjusting", "UIAccessibilityCustomAction", "UIAccessibilityCustomRotor", "UIAccessibilityElement", "UIAccessibilityIdentification", "UIAccessibilityLocationDescriptor", "UIAccessibilityZoom", "UIAction", "UIActionSheet", "UIActivity", "UIActivityCollaborationModeRestriction", "UIActivityIndicatorView", "UIActivityItemProvider", "UIActivityItemsConfiguration", "UIActivityItemsConfigurationReading", "UIActivityItemsConfigurationReading_ShareSheet", "UIActivityViewController", "UIAlert", "UIAlertController", "UIAlertView", "UIAppearance", "UIApplication", "UIApplicationShortcutItem", "UIAttachmentBehavior", "UIBackgroundConfiguration", "UIBackgroundExtensionView", "UIBandSelectionInteraction", "UIBarAppearance", "UIBarButtonItem", "UIBarButtonItemAppearance", "UIBarButtonItemBadge", "UIBarButtonItemGroup", "UIBarCommon", "UIBarItem", "UIBehavioralStyle", "UIBezierPath", "UIBlurEffect", "UIButton", "UIButtonConfiguration", "UICalendarSelection", "UICalendarSelectionMultiDate", "UICalendarSelectionSingleDate", "UICalendarSelectionWeekOfYear", "UICalendarView", "UICalendarViewDecoration", "UICanvasFeedbackGenerator", "UICellAccessory", "UICellConfigurationState", "UICloudSharingController", "UICollectionLayoutList", "UICollectionView", "UICollectionViewCell", "UICollectionViewCompositionalLayout", "UICollectionViewController", "UICollectionViewFlowLayout", "UICollectionViewItemRegistration", "UICollectionViewLayout", "UICollectionViewListCell", "UICollectionViewTransitionLayout", "UICollectionViewUpdateItem", "UICollisionBehavior", "UIColor", "UIColorPickerViewController", "UIColorWell", "UICommand", "UIConfigurationColorTransformer", "UIConfigurationState", "UIContentConfiguration", "UIContentSizeCategory", "UIContentSizeCategoryAdjusting", "UIContentUnavailableButtonProperties", "UIContentUnavailableConfiguration", "UIContentUnavailableConfigurationState", "UIContentUnavailableImageProperties", "UIContentUnavailableTextProperties", "UIContentUnavailableView", "UIContextMenuConfiguration", "UIContextMenuInteraction", "UIContextMenuSystem", "UIContextualAction", "UIControl", "UIConversationContext", "UIConversationEntry", "UICornerConfiguration", "UICornerRadius", "UIDataDetectors", "UIDataSourceTranslating", "UIDatePicker", "UIDeferredMenuElement", "UIDevice", "UIDiffableDataSource", "UIDocument", "UIDocumentBrowserAction", "UIDocumentBrowserViewController", "UIDocumentInteractionController", "UIDocumentMenuViewController", "UIDocumentPickerExtensionViewController", "UIDocumentPickerViewController", "UIDocumentProperties", "UIDocumentViewController", "UIDocumentViewControllerLaunchOptions", "UIDragInteraction", "UIDragItem", "UIDragPreview", "UIDragPreviewParameters", "UIDragSession", "UIDropInteraction", "UIDynamicAnimator", "UIDynamicBehavior", "UIDynamicItemBehavior", "UIEditMenuInteraction", "UIEvent", "UIEventAttribution", "UIEventAttributionView", "UIFeedbackGenerator", "UIFieldBehavior", "UIFindInteraction", "UIFindSession", "UIFocus", "UIFocusAnimationCoordinator", "UIFocusDebugger", "UIFocusDefines", "UIFocusEffect", "UIFocusGuide", "UIFocusMovementHint", "UIFocusSystem", "UIFocusSystem_UIKitAdditions", "UIFocusUpdateContext_UIKitAdditions", "UIFont", "UIFontDescriptor", "UIFontMetrics", "UIFontPickerViewController", "UIFontPickerViewControllerConfiguration", "UIFoundation", "UIGeometry", "UIGestureRecognizer", "UIGestureRecognizerSubclass", "UIGlassEffect", "UIGraphics", "UIGraphicsImageRenderer", "UIGraphicsPDFRenderer", "UIGraphicsRenderer", "UIGraphicsRendererSubclass", "UIGravityBehavior", "UIGuidedAccess", "UIGuidedAccessRestrictions", "UIHoverEffect", "UIHoverEffectLayer", "UIHoverGestureRecognizer", "UIHoverStyle", "UIImage", "UIImageAsset", "UIImageConfiguration", "UIImagePickerController", "UIImageReader", "UIImageSymbolConfiguration", "UIImageView", "UIImpactFeedbackGenerator", "UIIndirectScribbleInteraction", "UIInputSuggestion", "UIInputView", "UIInputViewController", "UIInteraction", "UIInterface", "UIKey", "UIKeyCommand", "UIKeyConstants", "UIKeyboardLayoutGuide", "UIKitCore", "UIKitDefines", "UILabel", "UILargeContentViewer", "UILayoutGuide", "UILetterformAwareAdjusting", "UILexicon", "UIListContentConfiguration", "UIListContentImageProperties", "UIListContentTextProperties", "UIListSeparatorConfiguration", "UILocalNotification", "UILocalizedIndexedCollation", "UILongPressGestureRecognizer", "UIMailConversationContext", "UIMailConversationEntry", "UIMainMenuSystem", "UIManagedDocument", "UIMenu", "UIMenuBuilder", "UIMenuController", "UIMenuDisplayPreferences", "UIMenuElement", "UIMenuLeaf", "UIMenuSystem", "UIMessageConversationContext", "UIMessageConversationEntry", "UIMotionEffect", "UINavigationBar", "UINavigationBarAppearance", "UINavigationController", "UINavigationItem", "UINib", "UINibDeclarations", "UINibLoading", "UINotificationFeedbackGenerator", "UIOpenURLContext", "UIOrientation", "UIPageControl", "UIPageControlProgress", "UIPageViewController", "UIPanGestureRecognizer", "UIPasteConfiguration", "UIPasteConfigurationSupporting", "UIPasteControl", "UIPasteboard", "UIPencilInteraction", "UIPickerView", "UIPinchGestureRecognizer", "UIPointerAccessory", "UIPointerInteraction", "UIPointerLockState", "UIPointerRegion", "UIPointerStyle", "UIPopoverBackgroundView", "UIPopoverController", "UIPopoverPresentationController", "UIPopoverPresentationControllerSourceItem", "UIPopoverSupport", "UIPresentationController", "UIPress", "UIPressesEvent", "UIPreviewInteraction", "UIPreviewParameters", "UIPrintError", "UIPrintFormatter", "UIPrintInfo", "UIPrintInteractionController", "UIPrintPageRenderer", "UIPrintPaper", "UIPrintServiceExtension", "UIPrinter", "UIPrinterPickerController", "UIProgressView", "UIPushBehavior", "UIReferenceLibraryViewController", "UIRefreshControl", "UIRegion", "UIResponder", "UIResponder_UIActivityItemsConfiguration", "UIRotationGestureRecognizer", "UIScene", "UISceneActivationConditions", "UISceneConfiguration", "UISceneDefinitions", "UISceneDestructionCondition", "UISceneEnhancedStateRestoration", "UISceneOptions", "UISceneSession", "UISceneSessionActivationRequest", "UISceneSizeRestrictions", "UISceneSystemProtectionManager", "UISceneWindowingBehaviors", "UISceneWindowingControlStyle", "UIScene_AVAudioSession", "UIScreen", "UIScreenEdgePanGestureRecognizer", "UIScreenMode", "UIScreenshotService", "UIScribbleInteraction", "UIScrollEdgeElementContainerInteraction", "UIScrollView", "UISearchBar", "UISearchContainerViewController", "UISearchController", "UISearchDisplayController", "UISearchSuggestion", "UISearchTab", "UISearchTextField", "UISegmentedControl", "UISelectionFeedbackGenerator", "UIShadowProperties", "UIShape", "UISheetPresentationController", "UISlider", "UISliderTrackConfiguration", "UISmartReplySuggestion", "UISnapBehavior", "UISplitViewController", "UISplitViewControllerLayoutEnvironment", "UISpringLoadedInteraction", "UISpringLoadedInteractionSupporting", "UIStackView", "UIStandardTextCursorView", "UIStateRestoration", "UIStatusBarManager", "UIStepper", "UIStoryboard", "UIStoryboardPopoverSegue", "UIStoryboardSegue", "UIStringDrawing", "UISwipeActionsConfiguration", "UISwipeGestureRecognizer", "UISwitch", "UISymbolContentTransition", "UISymbolEffectCompletion", "UITab", "UITabAccessory", "UITabBar", "UITabBarAppearance", "UITabBarController", "UITabBarControllerSidebar", "UITabBarItem", "UITabGroup", "UITabSidebarItem", "UITableView", "UITableViewCell", "UITableViewController", "UITableViewHeaderFooterView", "UITapGestureRecognizer", "UITargetedDragPreview", "UITargetedPreview", "UITextChecker", "UITextCursorDropPositionAnimator", "UITextCursorView", "UITextDragPreviewRenderer", "UITextDragURLPreviews", "UITextDragging", "UITextDropProposal", "UITextDropping", "UITextField", "UITextFormattingCoordinator", "UITextFormattingViewController", "UITextFormattingViewControllerChangeValue", "UITextFormattingViewControllerComponent", "UITextFormattingViewControllerConfiguration", "UITextFormattingViewControllerFormattingDescriptor", "UITextFormattingViewControllerFormattingStyle", "UITextInput", "UITextInputContext", "UITextInputTraits", "UITextInteraction", "UITextItem", "UITextItemInteraction", "UITextLoupeSession", "UITextPasteConfigurationSupporting", "UITextPasteDelegate", "UITextSearching", "UITextSelectionDisplayInteraction", "UITextSelectionHandleView", "UITextSelectionHighlightView", "UITextView", "UITimingCurveProvider", "UITimingParameters", "UIToolTipInteraction", "UIToolbar", "UIToolbarAppearance", "UITouch", "UITrackingLayoutGuide", "UITrait", "UITraitCollection", "UITraitListEnvironment", "UIUpdateActionPhase", "UIUpdateInfo", "UIUpdateLink", "UIUserActivity", "UIUserNotificationSettings", "UIVibrancyEffect", "UIVideoEditorController", "UIView", "UIViewAnimating", "UIViewConfigurationState", "UIViewController", "UIViewControllerTransition", "UIViewControllerTransitionCoordinator", "UIViewControllerTransitioning", "UIViewLayoutRegion", "UIViewPropertyAnimator", "UIVisualEffect", "UIVisualEffectView", "UIWebView", "UIWindow", "UIWindowScene", "UIWindowSceneActivationAction", "UIWindowSceneActivationConfiguration", "UIWindowSceneActivationInteraction", "UIWindowSceneActivationRequestOptions", "UIWindowSceneDragInteraction", "UIWindowSceneGeometry", "UIWindowSceneGeometryPreferences", "UIWindowSceneGeometryPreferencesIOS", "UIWindowSceneGeometryPreferencesMac", "UIWindowSceneGeometryPreferencesVision", "UIWindowScenePlacement", "UIWindowSceneProminentPlacement", "UIWindowScenePushPlacement", "UIWindowSceneReplacePlacement", "UIWindowSceneStandardPlacement", "UIWritingToolsCoordinator", "UIWritingToolsCoordinatorAnimationParameters", "UIWritingToolsCoordinatorContext", "UIZoomTransitionOptions", "UNNotificationResponse_UIKitAdditions", "alloc", "bitflags", "block2", "default", "objc2-cloud-kit", "objc2-core-data", "objc2-core-foundation", "objc2-core-graphics", "objc2-core-image", "objc2-core-location", "objc2-core-text", "objc2-quartz-core", "objc2-user-notifications", "std"], "parents": ["perry-ui-ios@0.5.1565", "perry-ui-tvos@0.5.1565", "perry-ui-visionos@0.5.1565"], "dependencies": ["bitflags@2.12.1", "block2@0.6.2", "objc2-cloud-kit@0.3.2", "objc2-core-data@0.3.2", "objc2-core-foundation@0.3.2", "objc2-core-graphics@0.3.2", "objc2-core-image@0.3.2", "objc2-core-location@0.3.2", "objc2-core-text@0.3.2", "objc2-foundation@0.3.2", "objc2-quartz-core@0.3.2", "objc2-user-notifications@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2-user-notifications@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["UNNotificationResponse"], "parents": ["objc2-ui-kit@0.3.2"], "dependencies": ["objc2-foundation@0.3.2", "objc2@0.6.4"]}, -{"package": "objc2@0.6.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "std"], "parents": ["block2@0.6.2", "dispatch2@0.3.1", "objc2-app-kit@0.3.2", "objc2-cloud-kit@0.3.2", "objc2-core-data@0.3.2", "objc2-core-foundation@0.3.2", "objc2-core-graphics@0.3.2", "objc2-core-image@0.3.2", "objc2-core-location@0.3.2", "objc2-core-text@0.3.2", "objc2-core-video@0.3.2", "objc2-foundation@0.3.2", "objc2-io-surface@0.3.2", "objc2-quartz-core@0.3.2", "objc2-ui-kit@0.3.2", "objc2-user-notifications@0.3.2", "perry-ui-ios@0.5.1565", "perry-ui-macos@0.5.1565", "perry-ui-tvos@0.5.1565", "perry-ui-visionos@0.5.1565", "perry-ui-watchos@0.5.1565"], "dependencies": ["objc2-encode@4.1.0"]}, -{"package": "object@0.37.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["archive", "coff", "elf", "macho", "pe", "read", "read_core", "std", "unaligned", "xcoff"], "parents": ["ar_archive_writer@0.5.1", "perry@0.5.1565"], "dependencies": ["memchr@2.8.1"]}, -{"package": "once_cell@1.21.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "critical-section", "default", "portable-atomic", "race", "std"], "parents": ["ahash@0.8.12", "borsh-derive@1.6.1", "console@0.15.11", "const-random-macro@0.1.16", "cron@0.17.0", "dashmap@5.5.3", "dashmap@6.2.1", "hickory-proto@0.26.1", "hickory-resolver@0.26.1", "hstr@3.0.6", "js-sys@0.3.99", "mongocrypt@0.4.0", "par-core@2.0.0", "perry-container-compose@0.5.1565", "perry-ffi@0.5.1565", "perry-stdlib@0.5.1565", "quanta@0.12.6", "quinn-udp@0.5.14", "rustls@0.23.43", "swc_atoms@9.0.3", "swc_bundler@37.0.0", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_codegen@21.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_utils@25.0.0", "tempfile@3.27.0", "tracing-core@0.1.36", "tracing-log@0.2.0", "tracing-subscriber@0.3.23", "wasm-bindgen@0.2.122"], "dependencies": ["critical-section@1.2.0", "portable-atomic@1.13.1"]}, -{"package": "once_cell_polyfill@1.70.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["anstyle-wincon@3.0.11"], "dependencies": []}, -{"package": "opaque-debug@0.3.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ghash@0.5.1", "poly1305@0.8.0", "polyval@0.6.2"], "dependencies": []}, -{"package": "openssl-probe@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rustls-native-certs@0.8.4"], "dependencies": []}, -{"package": "option-ext@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["dirs-sys@0.5.0"], "dependencies": []}, -{"package": "option-operations@0.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["gstreamer@0.25.3"], "dependencies": ["pastey@0.2.3"]}, -{"package": "ordered-stream@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zbus@5.16.0"], "dependencies": ["futures-core@0.3.34", "pin-project-lite@0.2.17"]}, -{"package": "ouroboros@0.17.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["allsorts-azul@0.16.5"], "dependencies": ["aliasable@0.1.3", "ouroboros_macro@0.17.2", "static_assertions@1.1.0"]}, -{"package": "ouroboros_macro@0.17.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["ouroboros@0.17.2"], "dependencies": ["heck@0.4.1", "proc-macro-error@1.0.4", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "outref@0.5.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["base64-simd@0.8.0"], "dependencies": []}, -{"package": "p12@0.6.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ext-http@0.5.1565"], "dependencies": ["cbc@0.1.2", "cipher@0.4.4", "des@0.8.1", "getrandom@0.2.17", "hmac@0.12.1", "lazy_static@1.5.0", "rc2@0.8.1", "sha1@0.10.6", "yasna@0.5.2"]}, -{"package": "p256@0.13.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "arithmetic", "default", "digest", "ecdh", "ecdsa", "ecdsa-core", "pem", "pkcs8", "sha2", "sha256", "std"], "parents": ["jsonwebtoken@11.0.0", "perry-stdlib@0.5.1565"], "dependencies": ["ecdsa@0.16.9", "elliptic-curve@0.13.8", "primeorder@0.13.6", "sha2@0.10.9"]}, -{"package": "p384@0.13.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "arithmetic", "default", "digest", "ecdh", "ecdsa", "ecdsa-core", "pem", "pkcs8", "sha2", "sha384", "std"], "parents": ["jsonwebtoken@11.0.0", "perry-stdlib@0.5.1565"], "dependencies": ["ecdsa@0.16.9", "elliptic-curve@0.13.8", "primeorder@0.13.6", "sha2@0.10.9"]}, -{"package": "p521@0.13.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["arithmetic", "digest", "ecdh", "ecdsa", "ecdsa-core", "pem", "pkcs8", "sha512"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["base16ct@0.2.0", "ecdsa@0.16.9", "elliptic-curve@0.13.8", "primeorder@0.13.6", "sha2@0.10.9"]}, -{"package": "pango-sys@0.20.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v1_42", "v1_44", "v1_46", "v1_48", "v1_50"], "parents": ["gdk4-sys@0.9.6", "gsk4-sys@0.9.6", "gtk4-sys@0.9.6", "pango@0.20.12"], "dependencies": ["glib-sys@0.20.10", "gobject-sys@0.20.10", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "pango@0.20.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v1_42", "v1_44", "v1_46", "v1_48", "v1_50"], "parents": ["gdk4@0.9.6", "gsk4@0.9.6", "gtk4@0.9.7"], "dependencies": ["gio@0.20.12", "glib@0.20.12", "libc@0.2.189", "pango-sys@0.20.10"]}, -{"package": "par-core@2.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_utils@25.0.0"], "dependencies": ["once_cell@1.21.4"]}, -{"package": "parking@2.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["async-io@2.6.0", "event-listener@5.4.1", "futures-lite@2.6.1"], "dependencies": []}, -{"package": "parking_lot@0.12.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["futures-intrusive@0.5.0", "governor@0.10.4", "hickory-resolver@0.26.1", "moka@0.12.15", "string_cache@0.9.0", "tokio@1.53.1"], "dependencies": ["lock_api@0.4.14", "parking_lot_core@0.9.12"]}, -{"package": "parking_lot_core@0.9.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["dashmap@5.5.3", "dashmap@6.2.1", "parking_lot@0.12.5"], "dependencies": ["cfg-if@1.0.4", "libc@0.2.189", "redox_syscall@0.5.18", "smallvec@1.15.1", "windows-link@0.2.1"]}, -{"package": "password-hash@0.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "rand_core", "std"], "parents": ["argon2@0.5.3", "scrypt@0.11.0"], "dependencies": ["base64ct@1.8.3", "rand_core@0.6.4", "subtle@2.6.1"]}, -{"package": "paste@1.0.15", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rav1e@0.8.1"], "dependencies": []}, -{"package": "pastey@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["av-scenechange@0.14.1"], "dependencies": []}, -{"package": "pastey@0.2.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gstreamer@0.25.3", "ksni@0.3.6", "option-operations@0.6.1"], "dependencies": []}, -{"package": "pathdiff@0.2.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_loader@18.0.0"], "dependencies": []}, -{"package": "pathfinder_geometry@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["allsorts-azul@0.16.5"], "dependencies": ["log@0.4.34", "pathfinder_simd@0.5.6"]}, -{"package": "pathfinder_simd@0.5.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["pathfinder_geometry@0.5.1"], "dependencies": ["rustc_version@0.4.1"]}, -{"package": "pbkdf2@0.12.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "hmac"], "parents": ["pkcs5@0.7.1", "scrypt@0.11.0"], "dependencies": ["digest@0.10.7", "hmac@0.12.1"]}, -{"package": "pbkdf2@0.13.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "hmac"], "parents": ["mongodb@3.8.2", "perry-stdlib@0.5.1565", "zip@8.6.0"], "dependencies": ["digest@0.11.3", "hmac@0.13.0"]}, -{"package": "pem-rfc7468@0.7.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["der@0.7.10", "elliptic-curve@0.13.8"], "dependencies": ["base64ct@1.8.3"]}, -{"package": "pem-rfc7468@1.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc"], "parents": ["der@0.8.1"], "dependencies": ["base64ct@1.8.3"]}, -{"package": "pem@3.0.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["jsonwebtoken@11.0.0"], "dependencies": ["base64@0.22.1", "serde_core@1.0.229"]}, -{"package": "pem@4.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["perry-ext-node-forge@0.5.1565"], "dependencies": ["base64@0.23.1", "serde_core@1.0.229"]}, -{"package": "percent-encoding@2.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["form_urlencoded@1.2.2", "hyper-util@0.1.20", "lettre@0.11.23", "mongodb@3.8.2", "redis@1.6.0", "reqwest@0.12.28", "sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-sqlite@0.9.0", "url@2.5.8"], "dependencies": []}, -{"package": "perex@0.1.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-perex@0.5.1565", "perry-runtime@0.5.1565"], "dependencies": []}, -{"package": "petgraph@0.7.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "graphmap", "matrix_graph", "stable_graph"], "parents": ["swc_bundler@37.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_graph_analyzer@14.0.2"], "dependencies": ["fixedbitset@0.5.7", "indexmap@2.14.1"]}, -{"package": "phf@0.11.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "macros", "phf_macros", "std"], "parents": ["cron@0.17.0", "swc_ecma_ast@19.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "swc_ecma_transforms_base@32.0.0"], "dependencies": ["phf_macros@0.11.3", "phf_shared@0.11.3"]}, -{"package": "phf@0.12.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["chrono-tz@0.10.4"], "dependencies": ["phf_shared@0.12.1"]}, -{"package": "phf@0.13.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "macros", "phf_macros", "std"], "parents": ["cssparser@0.37.0", "selectors@0.38.0", "web_atoms@0.2.4"], "dependencies": ["phf_macros@0.13.1", "phf_shared@0.13.1", "serde@1.0.229"]}, -{"package": "phf_codegen@0.13.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["selectors@0.38.0", "web_atoms@0.2.4"], "dependencies": ["phf_generator@0.13.1", "phf_shared@0.13.1"]}, -{"package": "phf_generator@0.11.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["phf_macros@0.11.3"], "dependencies": ["phf_shared@0.11.3", "rand@0.8.7"]}, -{"package": "phf_generator@0.13.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["phf_codegen@0.13.1", "phf_macros@0.13.1", "string_cache_codegen@0.6.1"], "dependencies": ["fastrand@2.4.1", "phf_shared@0.13.1"]}, -{"package": "phf_macros@0.11.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["phf@0.11.3"], "dependencies": ["phf_generator@0.11.3", "phf_shared@0.11.3", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "phf_macros@0.13.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["phf@0.13.1"], "dependencies": ["phf_generator@0.13.1", "phf_shared@0.13.1", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "phf_shared@0.11.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["phf@0.11.3", "phf_generator@0.11.3", "phf_macros@0.11.3"], "dependencies": ["siphasher@1.0.3"]}, -{"package": "phf_shared@0.12.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["phf@0.12.1"], "dependencies": ["siphasher@1.0.3"]}, -{"package": "phf_shared@0.13.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["phf@0.13.1", "phf_codegen@0.13.1", "phf_generator@0.13.1", "phf_macros@0.13.1", "string_cache@0.9.0", "string_cache_codegen@0.6.1"], "dependencies": ["siphasher@1.0.3"]}, -{"package": "pin-project-lite@0.2.17", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["async-broadcast@0.7.2", "async-channel@2.5.0", "async-executor@1.14.0", "async-lock@3.4.2", "combine@4.6.7", "event-listener-strategy@0.5.4", "event-listener@5.4.1", "futures-lite@2.6.1", "futures-util@0.3.34", "gio@0.20.12", "gstreamer@0.25.3", "http-body-util@0.1.5", "hyper-util@0.1.20", "hyper@1.11.1", "ordered-stream@0.2.0", "polling@3.11.0", "quinn@0.11.9", "redis@1.6.0", "reqwest@0.12.28", "tokio-stream@0.1.18", "tokio-util@0.7.18", "tokio@1.53.1", "tower-http@0.6.11", "tower@0.5.3", "tracing@0.1.44"], "dependencies": []}, -{"package": "piper@0.2.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "futures-io", "std"], "parents": ["blocking@1.6.2"], "dependencies": ["atomic-waker@1.1.2", "fastrand@2.4.1", "futures-io@0.3.34"]}, -{"package": "pkcs1@0.7.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "pem", "pkcs8", "std", "zeroize"], "parents": ["rsa@0.9.10"], "dependencies": ["der@0.7.10", "pkcs8@0.10.2", "spki@0.7.3"]}, -{"package": "pkcs1@0.8.0-rc.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "pem", "std", "zeroize"], "parents": ["rsa@0.10.0-rc.18"], "dependencies": ["der@0.8.1", "spki@0.8.0"]}, -{"package": "pkcs5@0.7.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "pbes2"], "parents": ["perry-ext-http@0.5.1565", "pkcs8@0.10.2"], "dependencies": ["aes@0.8.4", "cbc@0.1.2", "der@0.7.10", "pbkdf2@0.12.2", "scrypt@0.11.0", "sha2@0.10.9", "spki@0.7.3"]}, -{"package": "pkcs8@0.10.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "encryption", "pem", "pkcs5", "rand_core", "std"], "parents": ["ed25519@2.2.3", "elliptic-curve@0.13.8", "pkcs1@0.7.5", "rsa@0.9.10", "sec1@0.7.3"], "dependencies": ["der@0.7.10", "pkcs5@0.7.1", "rand_core@0.6.4", "spki@0.7.3"]}, -{"package": "pkcs8@0.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "pem", "std"], "parents": ["ed448@0.5.0", "elliptic-curve@0.14.0", "ml-kem@0.3.2", "rsa@0.10.0-rc.18"], "dependencies": ["der@0.8.1", "spki@0.8.0"]}, -{"package": "pkg-config@0.3.33", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["gdk4-sys@0.9.6", "graphene-sys@0.20.10", "libsqlite3-sys@0.37.0", "system-deps@7.0.8", "zstd-sys@2.0.16+zstd.1.5.7"], "dependencies": []}, -{"package": "png@0.18.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["image@0.25.10", "perry-ui-windows@0.5.1565"], "dependencies": ["bitflags@2.12.1", "crc32fast@1.5.0", "fdeflate@0.3.7", "flate2@1.1.10", "miniz_oxide@0.8.9"]}, -{"package": "polling@3.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["async-io@2.6.0"], "dependencies": ["cfg-if@1.0.4", "concurrent-queue@2.5.0", "hermit-abi@0.5.2", "pin-project-lite@0.2.17", "rustix@1.1.4", "windows-sys@0.61.2"]}, -{"package": "poly1305@0.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["chacha20poly1305@0.10.1"], "dependencies": ["cpufeatures@0.2.17", "opaque-debug@0.3.1", "universal-hash@0.5.1"]}, -{"package": "polyval@0.6.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ghash@0.5.1"], "dependencies": ["cfg-if@1.0.4", "cpufeatures@0.2.17", "opaque-debug@0.3.1", "universal-hash@0.5.1"]}, -{"package": "polyval@0.7.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["hazmat"], "parents": ["ghash@0.6.0"], "dependencies": ["cpubits@0.1.1", "cpufeatures@0.3.0", "universal-hash@0.6.1"]}, -{"package": "portable-atomic@1.13.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "fallback", "require-cas"], "parents": ["governor@0.10.4", "indicatif@0.18.6", "moka@0.12.15", "once_cell@1.21.4"], "dependencies": []}, -{"package": "potential_utf@0.1.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "writeable", "zerovec"], "parents": ["icu_collections@2.2.0", "icu_datetime@2.3.0", "icu_locale@2.2.0", "icu_locale_fallback@2.3.0"], "dependencies": ["serde_core@1.0.229", "writeable@0.6.4", "zerovec@0.11.8"]}, -{"package": "powerfmt@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["time@0.3.55"], "dependencies": []}, -{"package": "ppmd-rust@1.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["zip@8.6.0"], "dependencies": []}, -{"package": "ppv-lite86@0.2.21", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["simd", "std"], "parents": ["rand_chacha@0.3.1", "rand_chacha@0.9.0"], "dependencies": ["zerocopy@0.8.50"]}, -{"package": "precomputed-hash@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["scraper@0.27.0", "selectors@0.38.0", "string_cache@0.9.0"], "dependencies": []}, -{"package": "prefix-trie@0.8.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "ipnet"], "parents": ["hickory-proto@0.26.1"], "dependencies": ["either@1.16.0", "ipnet@2.12.0", "num-traits@0.2.19"]}, -{"package": "prettyplease@0.2.37", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wit-bindgen-rust-macro@0.51.0", "wit-bindgen-rust@0.51.0"], "dependencies": ["proc-macro2@1.0.106", "syn@2.0.117"]}, -{"package": "primeorder@0.13.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["p256@0.13.2", "p384@0.13.1", "p521@0.13.3"], "dependencies": ["elliptic-curve@0.13.8"]}, -{"package": "printpdf@0.10.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ext-pdf@0.5.1565"], "dependencies": ["allsorts-azul@0.16.5", "base64@0.22.1", "flate2@1.1.10", "getrandom@0.3.4", "lopdf@0.39.0", "serde@1.0.229", "serde_derive@1.0.229", "serde_json@1.0.151", "time@0.3.55", "wasm-bindgen-futures@0.4.72", "wasm-bindgen@0.2.122", "weezl@0.1.12"]}, -{"package": "proc-macro-crate@3.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["borsh-derive@1.6.1", "glib-macros@0.20.12", "gtk4-macros@0.9.5", "zbus_macros@5.16.0", "zvariant_derive@5.12.0"], "dependencies": ["toml_edit@0.25.12+spec-1.1.0"]}, -{"package": "proc-macro-error-attr@1.0.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["proc-macro-error@1.0.4"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "version_check@0.9.5"]}, -{"package": "proc-macro-error@1.0.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "syn", "syn-error"], "parents": ["ouroboros_macro@0.17.2"], "dependencies": ["proc-macro-error-attr@1.0.4", "proc-macro2@1.0.106", "quote@1.0.45", "syn@1.0.109", "version_check@0.9.5"]}, -{"package": "proc-macro2@1.0.106", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "proc-macro"], "parents": ["arg_enum_proc_macro@0.3.4", "async-recursion@1.1.1", "async-trait@0.1.92", "auto_impl@1.3.0", "bindgen@0.72.1", "borsh-derive@1.6.1", "clap_derive@4.6.4", "curve25519-dalek-derive@0.1.1", "darling_core@0.20.11", "darling_core@0.23.0", "der_derive@0.8.0", "derive-syn-parse@0.2.0", "derive-where@1.6.1", "derive_builder_core@0.20.2", "derive_more-impl@2.1.1", "displaydoc@0.2.6", "enumflags2_derive@0.7.12", "equator-macro@0.4.2", "futures-macro@0.3.34", "glib-macros@0.20.12", "glib-macros@0.22.6", "gtk4-macros@0.9.5", "inkwell_internals@0.14.0", "interpolate_name@0.2.4", "is-macro@0.3.7", "jni-macros@0.22.4", "macro_magic_core@0.5.1", "macro_magic_core_macros@0.5.1", "miette-derive@7.6.0", "mongodb-internal-macros@3.8.2", "num-derive@0.4.2", "ouroboros_macro@0.17.2", "phf_macros@0.11.3", "phf_macros@0.13.1", "prettyplease@0.2.37", "proc-macro-error-attr@1.0.4", "proc-macro-error@1.0.4", "quote@1.0.45", "serde_derive@1.0.229", "serde_repr@0.1.20", "serde_with_macros@3.21.0", "sqlx-macros-core@0.9.0", "sqlx-macros@0.9.0", "string_cache_codegen@0.6.1", "strum_macros@0.27.2", "swc_config_macro@1.0.1", "swc_ecma_codegen_macros@2.0.2", "swc_eq_ignore_macros@1.0.1", "swc_macros_common@1.0.1", "syn@1.0.109", "syn@2.0.117", "syn@3.0.3", "synstructure@0.13.2", "thiserror-impl@1.0.69", "thiserror-impl@2.0.18", "tls_codec_derive@0.4.2", "tokio-macros@2.7.0", "tracing-attributes@0.1.31", "trait-variant@0.1.2", "typed-builder-macro@0.22.0", "wasm-bindgen-macro-support@0.2.122", "webview2-com-macros@0.8.1", "windows-implement@0.60.2", "windows-implement@0.60.2 [vendored]", "windows-interface@0.59.3", "windows-interface@0.59.3 [vendored]", "wit-bindgen-rust-macro@0.51.0", "yoke-derive@0.8.2", "zbus_macros@5.16.0", "zerocopy-derive@0.8.50", "zerofrom-derive@0.1.7", "zeroize_derive@1.4.3", "zerovec-derive@0.11.6", "zvariant_derive@5.12.0", "zvariant_utils@3.4.0"], "dependencies": ["unicode-ident@1.0.24"]}, -{"package": "profiling-procmacros@1.0.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["profiling@1.0.18"], "dependencies": ["quote@1.0.45", "syn@2.0.117"]}, -{"package": "profiling@1.0.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "procmacros", "profiling-procmacros"], "parents": ["rav1e@0.8.1"], "dependencies": ["profiling-procmacros@1.0.18"]}, -{"package": "proptest@1.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["bit-set", "default", "fork", "regex-syntax", "rusty-fork", "std", "tempfile", "timeout"], "parents": ["perry-container-compose@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["bit-set@0.8.0", "bit-vec@0.8.0", "bitflags@2.12.1", "num-traits@0.2.19", "rand@0.9.4", "rand_chacha@0.9.0", "rand_xorshift@0.4.0", "regex-syntax@0.8.11", "rusty-fork@0.3.1", "tempfile@3.27.0", "unarray@0.1.4"]}, -{"package": "psm@0.1.32", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["stacker@0.1.25"], "dependencies": ["ar_archive_writer@0.5.1", "cc@1.4.4"]}, -{"package": "pxfm@0.1.29", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["moxcms@0.8.1"], "dependencies": []}, -{"package": "qoi@0.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["image@0.25.10"], "dependencies": ["bytemuck@1.25.0"]}, -{"package": "qrcodegen@1.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ui-windows@0.5.1565"], "dependencies": []}, -{"package": "quanta@0.12.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "flaky_tests"], "parents": ["governor@0.10.4"], "dependencies": ["crossbeam-utils@0.8.21", "libc@0.2.189", "once_cell@1.21.4", "raw-cpuid@11.6.0", "wasi@0.11.1+wasi-snapshot-preview1", "web-sys@0.3.99", "winapi@0.3.9"]}, -{"package": "quick-error@1.2.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rusty-fork@0.3.1"], "dependencies": []}, -{"package": "quick-error@2.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["image-webp@0.2.4", "ravif@0.13.0", "tiff@0.11.3"], "dependencies": []}, -{"package": "quinn-proto@0.11.15", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["ring", "rustls-ring"], "parents": ["quinn@0.11.9"], "dependencies": ["bytes@1.12.1", "getrandom@0.3.4", "lru-slab@0.1.2", "rand@0.9.4", "ring@0.17.14", "rustc-hash@2.1.2", "rustls-pki-types@1.14.1", "rustls@0.23.43", "slab@0.4.12", "thiserror@2.0.18", "tinyvec@1.11.0", "tracing@0.1.44", "web-time@1.1.0"]}, -{"package": "quinn-udp@0.5.14", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["tracing"], "parents": ["quinn@0.11.9"], "dependencies": ["cfg_aliases@0.2.1", "libc@0.2.189", "once_cell@1.21.4", "socket2@0.6.5", "tracing@0.1.44", "windows-sys@0.60.2"]}, -{"package": "quinn@0.11.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["ring", "runtime-tokio", "rustls", "rustls-ring"], "parents": ["reqwest@0.12.28"], "dependencies": ["bytes@1.12.1", "cfg_aliases@0.2.1", "pin-project-lite@0.2.17", "quinn-proto@0.11.15", "quinn-udp@0.5.14", "rustc-hash@2.1.2", "rustls@0.23.43", "socket2@0.6.5", "thiserror@2.0.18", "tokio@1.53.1", "tracing@0.1.44", "web-time@1.1.0"]}, -{"package": "quote@1.0.45", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "proc-macro"], "parents": ["arg_enum_proc_macro@0.3.4", "ast_node@5.0.0", "async-recursion@1.1.1", "async-trait@0.1.92", "auto_impl@1.3.0", "bindgen@0.72.1", "borsh-derive@1.6.1", "clap_derive@4.6.4", "cssparser-macros@0.7.0", "curve25519-dalek-derive@0.1.1", "darling_core@0.20.11", "darling_core@0.23.0", "darling_macro@0.20.11", "darling_macro@0.23.0", "der_derive@0.8.0", "derive-syn-parse@0.2.0", "derive-where@1.6.1", "derive_builder_core@0.20.2", "derive_more-impl@2.1.1", "displaydoc@0.2.6", "enumflags2_derive@0.7.12", "equator-macro@0.4.2", "futures-macro@0.3.34", "glib-macros@0.20.12", "glib-macros@0.22.6", "gtk4-macros@0.9.5", "inkwell_internals@0.14.0", "interpolate_name@0.2.4", "is-macro@0.3.7", "jni-macros@0.22.4", "jni-sys-macros@0.4.1", "macro_magic@0.5.1", "macro_magic_core@0.5.1", "macro_magic_core_macros@0.5.1", "macro_magic_macros@0.5.1", "miette-derive@7.6.0", "mongodb-internal-macros@3.8.2", "num-derive@0.4.2", "ouroboros_macro@0.17.2", "phf_macros@0.11.3", "phf_macros@0.13.1", "proc-macro-error-attr@1.0.4", "proc-macro-error@1.0.4", "profiling-procmacros@1.0.18", "serde_derive@1.0.229", "serde_repr@0.1.20", "serde_with_macros@3.21.0", "simd_helpers@0.1.0", "sqlx-macros-core@0.9.0", "sqlx-macros@0.9.0", "string_cache_codegen@0.6.1", "string_enum@1.0.2", "strum_macros@0.27.2", "swc_config_macro@1.0.1", "swc_eq_ignore_macros@1.0.1", "swc_macros_common@1.0.1", "syn@2.0.117", "syn@3.0.3", "synstructure@0.13.2", "thiserror-impl@1.0.69", "thiserror-impl@2.0.18", "tls_codec_derive@0.4.2", "tokio-macros@2.7.0", "tracing-attributes@0.1.31", "trait-variant@0.1.2", "typed-builder-macro@0.22.0", "wasm-bindgen-macro-support@0.2.122", "wasm-bindgen-macro@0.2.122", "webview2-com-macros@0.8.1", "windows-implement@0.60.2", "windows-implement@0.60.2 [vendored]", "windows-interface@0.59.3", "windows-interface@0.59.3 [vendored]", "wit-bindgen-rust-macro@0.51.0", "yoke-derive@0.8.2", "zbus_macros@5.16.0", "zerocopy-derive@0.8.50", "zerofrom-derive@0.1.7", "zeroize_derive@1.4.3", "zerovec-derive@0.11.6", "zvariant_derive@5.12.0", "zvariant_utils@3.4.0"], "dependencies": ["proc-macro2@1.0.106"]}, -{"package": "quoted_printable@0.5.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["lettre@0.11.23"], "dependencies": []}, -{"package": "r-efi@5.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["getrandom@0.3.4"], "dependencies": []}, -{"package": "r-efi@6.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["getrandom@0.4.2"], "dependencies": []}, -{"package": "radium@0.7.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["bitvec@1.0.1"], "dependencies": []}, -{"package": "radix_fmt@1.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_bundler@37.0.0"], "dependencies": []}, -{"package": "rand@0.10.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "std", "std_rng", "sys_rng", "thread_rng"], "parents": ["hickory-net@0.26.1", "hickory-proto@0.26.1", "hickory-resolver@0.26.1", "perry-container-compose@0.5.1565", "perry-ext-ethers@0.5.1565", "perry-ext-nanoid@0.5.1565", "perry-ext-node-forge@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-ui-geisterhand@0.5.1565", "perry@0.5.1565", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0"], "dependencies": ["chacha20@0.10.0", "getrandom@0.4.2", "rand_core@0.10.1"]}, -{"package": "rand@0.8.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "getrandom", "libc", "rand_chacha", "small_rng", "std", "std_rng"], "parents": ["jsonwebtoken@11.0.0", "num-bigint-dig@0.8.6", "phf_generator@0.11.3", "rust_decimal@1.43.0", "tungstenite@0.24.0"], "dependencies": ["libc@0.2.189", "rand_chacha@0.3.1", "rand_core@0.6.4"]}, -{"package": "rand@0.9.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "os_rng", "small_rng", "std", "std_rng", "thread_rng"], "parents": ["bson@3.1.0", "governor@0.10.4", "lopdf@0.39.0", "mongodb@3.8.2", "nanoid@0.5.0", "proptest@1.11.0", "quinn-proto@0.11.15", "rav1e@0.8.1", "rust_decimal@1.43.0", "tungstenite@0.29.0"], "dependencies": ["rand_chacha@0.9.0", "rand_core@0.9.5"]}, -{"package": "rand_chacha@0.3.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["rand@0.8.7"], "dependencies": ["ppv-lite86@0.2.21", "rand_core@0.6.4"]}, -{"package": "rand_chacha@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["proptest@1.11.0", "rand@0.9.4", "rav1e@0.8.1"], "dependencies": ["ppv-lite86@0.2.21", "rand_core@0.9.5"]}, -{"package": "rand_core@0.10.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["chacha20@0.10.0", "crypto-bigint@0.7.5", "crypto-common@0.2.2", "crypto-primes@0.7.2", "ed448-goldilocks@0.14.0-pre.15", "elliptic-curve@0.14.0", "ff@0.14.0", "getrandom@0.4.2", "group@0.14.0", "kem@0.3.0", "ml-kem@0.3.2", "rand@0.10.2", "rsa@0.10.0-rc.18", "signature@3.0.0"], "dependencies": []}, -{"package": "rand_core@0.6.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "getrandom", "std"], "parents": ["crypto-bigint@0.5.5", "crypto-common@0.1.7", "ed25519-dalek@2.2.0", "elliptic-curve@0.13.8", "ff@0.13.1", "group@0.13.0", "password-hash@0.5.0", "perry-ext-argon2@0.5.1565", "perry-stdlib@0.5.1565", "pkcs8@0.10.2", "rand@0.8.7", "rand_chacha@0.3.1", "rsa@0.9.10", "signature@2.2.0", "x25519-dalek@2.0.1"], "dependencies": ["getrandom@0.2.17"]}, -{"package": "rand_core@0.9.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["os_rng", "std"], "parents": ["rand@0.9.4", "rand_chacha@0.9.0", "rand_xorshift@0.4.0"], "dependencies": ["getrandom@0.3.4"]}, -{"package": "rand_xorshift@0.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["proptest@1.11.0"], "dependencies": ["rand_core@0.9.5"]}, -{"package": "rangemap@1.7.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["lopdf@0.39.0"], "dependencies": []}, -{"package": "rav1e@0.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["threading", "wasm", "wasm-bindgen"], "parents": ["ravif@0.13.0"], "dependencies": ["aligned-vec@0.6.4", "arbitrary@1.4.2", "arg_enum_proc_macro@0.3.4", "arrayvec@0.7.6", "av-scenechange@0.14.1", "av1-grain@0.2.5", "bitstream-io@4.10.0", "built@0.8.1", "cfg-if@1.0.4", "interpolate_name@0.2.4", "itertools@0.14.0", "libc@0.2.189", "libfuzzer-sys@0.4.12", "log@0.4.34", "maybe-rayon@0.1.1", "new_debug_unreachable@1.0.6", "noop_proc_macro@0.3.0", "num-derive@0.4.2", "num-traits@0.2.19", "paste@1.0.15", "profiling@1.0.18", "rand@0.9.4", "rand_chacha@0.9.0", "simd_helpers@0.1.0", "thiserror@2.0.18", "v_frame@0.3.9", "wasm-bindgen@0.2.122"]}, -{"package": "ravif@0.13.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["threading"], "parents": ["image@0.25.10"], "dependencies": ["avif-serialize@0.8.9", "imgref@1.12.3", "loop9@0.1.5", "quick-error@2.0.1", "rav1e@0.8.1", "rayon@1.12.0", "rgb@0.8.53"]}, -{"package": "raw-cpuid@11.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["quanta@0.12.6"], "dependencies": ["bitflags@2.12.1"]}, -{"package": "rayon-core@1.13.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["exr@1.74.0", "rayon@1.12.0"], "dependencies": ["crossbeam-deque@0.8.6", "crossbeam-utils@0.8.21"]}, -{"package": "rayon@1.12.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["av-scenechange@0.14.1", "dssim-core@3.5.1", "image@0.25.10", "maybe-rayon@0.1.1", "perry@0.5.1565", "ravif@0.13.0"], "dependencies": ["either@1.16.0", "rayon-core@1.13.0"]}, -{"package": "rc2@0.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["p12@0.6.3"], "dependencies": ["cipher@0.4.4"]}, -{"package": "redis@1.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["acl", "aio", "bytes", "connection-manager", "default", "geospatial", "num-bigint", "script", "streams", "tokio-comp"], "parents": ["perry-ext-ioredis@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["arc-swap@1.9.1", "arcstr@1.2.0", "async-lock@3.4.2", "backon@1.6.0", "bytes@1.12.1", "cfg-if@1.0.4", "combine@4.6.7", "futures-channel@0.3.32", "futures-util@0.3.34", "itoa@1.0.18", "num-bigint@0.5.1", "percent-encoding@2.3.2", "pin-project-lite@0.2.17", "ryu@1.0.23", "sha1_smol@1.0.1", "socket2@0.6.5", "tokio-util@0.7.18", "tokio@1.53.1", "url@2.5.8", "xxhash-rust@0.8.18"]}, -{"package": "redox_syscall@0.5.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "userspace"], "parents": ["parking_lot_core@0.9.12"], "dependencies": ["bitflags@2.12.1"]}, -{"package": "redox_users@0.5.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["dirs-sys@0.5.0"], "dependencies": ["getrandom@0.2.17", "libredox@0.1.17", "thiserror@2.0.18"]}, -{"package": "regex-automata@0.4.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "dfa-build", "dfa-onepass", "dfa-search", "hybrid", "meta", "nfa-backtrack", "nfa-pikevm", "nfa-thompson", "perf-inline", "perf-literal", "perf-literal-multisubstring", "perf-literal-substring", "std", "syntax", "unicode", "unicode-age", "unicode-bool", "unicode-case", "unicode-gencat", "unicode-perl", "unicode-script", "unicode-segment", "unicode-word-boundary"], "parents": ["matchers@0.2.0", "regex@1.13.1", "tracing-subscriber@0.3.23"], "dependencies": ["aho-corasick@1.1.4", "memchr@2.8.1", "regex-syntax@0.8.11"]}, -{"package": "regex-lite@0.1.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std", "string"], "parents": ["llvm-sys@221.0.1"], "dependencies": []}, -{"package": "regex-syntax@0.8.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std", "unicode", "unicode-age", "unicode-bool", "unicode-case", "unicode-gencat", "unicode-perl", "unicode-script", "unicode-segment"], "parents": ["proptest@1.11.0", "regex-automata@0.4.18", "regex@1.13.1"], "dependencies": []}, -{"package": "regex@1.13.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "perf", "perf-backtrack", "perf-cache", "perf-dfa", "perf-inline", "perf-literal", "perf-onepass", "std", "unicode", "unicode-age", "unicode-bool", "unicode-case", "unicode-gencat", "unicode-perl", "unicode-script", "unicode-segment"], "parents": ["bindgen@0.72.1", "env_logger@0.10.2", "perry-perex@0.5.1565", "perry-validation@0.5.1565", "swc_ecma_codegen@21.0.0", "validator@0.21.0"], "dependencies": ["aho-corasick@1.1.4", "memchr@2.8.1", "regex-automata@0.4.18", "regex-syntax@0.8.11"]}, -{"package": "relative-path@1.9.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["swc_bundler@37.0.0"], "dependencies": []}, -{"package": "reqwest@0.12.28", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["__rustls", "__rustls-ring", "__tls", "blocking", "h2", "http2", "json", "multipart", "rustls-tls", "rustls-tls-webpki-roots", "rustls-tls-webpki-roots-no-provider"], "parents": ["perry-ext-axios@0.5.1565", "perry-ext-fetch@0.5.1565", "perry-ext-http@0.5.1565", "perry-stdlib@0.5.1565", "perry@0.5.1565"], "dependencies": ["base64@0.22.1", "bytes@1.12.1", "futures-channel@0.3.32", "futures-core@0.3.34", "futures-util@0.3.34", "h2@0.4.19", "http-body-util@0.1.5", "http-body@1.0.1", "http@1.4.1", "hyper-rustls@0.27.9", "hyper-util@0.1.20", "hyper@1.11.1", "js-sys@0.3.99", "log@0.4.34", "mime_guess@2.0.5", "percent-encoding@2.3.2", "pin-project-lite@0.2.17", "quinn@0.11.9", "rustls-pki-types@1.14.1", "rustls@0.23.43", "serde@1.0.229", "serde_json@1.0.151", "serde_urlencoded@0.7.1", "sync_wrapper@1.0.2", "tokio-rustls@0.26.4", "tokio@1.53.1", "tower-http@0.6.11", "tower-service@0.3.3", "tower@0.5.3", "url@2.5.8", "wasm-bindgen-futures@0.4.72", "wasm-bindgen@0.2.122", "web-sys@0.3.99", "webpki-roots@1.0.9"]}, -{"package": "resolv-conf@0.7.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["system"], "parents": ["hickory-resolver@0.26.1", "perry-runtime@0.5.1565"], "dependencies": []}, -{"package": "rfc6979@0.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ecdsa@0.16.9"], "dependencies": ["hmac@0.12.1", "subtle@2.6.1"]}, -{"package": "rgb@0.8.53", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["argb", "as-bytes", "bytemuck", "default", "grb"], "parents": ["dssim-core@3.5.1", "image@0.25.10", "perry-doc-tests@0.5.1565", "ravif@0.13.0"], "dependencies": ["bytemuck@1.25.0"]}, -{"package": "ring@0.17.14", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "dev_urandom_fallback", "std", "wasm32_unknown_unknown_js"], "parents": ["hickory-proto@0.26.1", "perry-ext-http@0.5.1565", "quinn-proto@0.11.15", "rustls-webpki@0.103.13", "rustls@0.23.43"], "dependencies": ["cc@1.4.4", "cfg-if@1.0.4", "getrandom@0.2.17", "libc@0.2.189", "untrusted@0.9.0", "windows-sys@0.52.0"]}, -{"package": "rsa@0.10.0-rc.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "encoding", "sha2", "std"], "parents": ["perry-ext-node-forge@0.5.1565", "sqlx-mysql@0.9.0"], "dependencies": ["const-oid@0.10.2", "crypto-bigint@0.7.5", "crypto-primes@0.7.2", "digest@0.11.3", "pkcs1@0.8.0-rc.4", "pkcs8@0.11.0", "rand_core@0.10.1", "sha2@0.11.0", "signature@3.0.0", "spki@0.8.0", "zeroize@1.8.2"]}, -{"package": "rsa@0.9.10", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "pem", "pkcs5", "sha2", "std", "u64_digit"], "parents": ["jsonwebtoken@11.0.0", "perry-stdlib@0.5.1565"], "dependencies": ["const-oid@0.9.6", "digest@0.10.7", "num-bigint-dig@0.8.6", "num-integer@0.1.46", "num-traits@0.2.19", "pkcs1@0.7.5", "pkcs8@0.10.2", "rand_core@0.6.4", "sha2@0.10.9", "signature@2.2.0", "spki@0.7.3", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "rsqlite-vfs@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["sqlite-wasm-rs@0.5.5"], "dependencies": ["hashbrown@0.16.1", "thiserror@2.0.18"]}, -{"package": "rusqlite@0.39.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["bundled", "cache", "column_decltype", "default", "hashlink", "hooks", "limits", "modern_sqlite", "session"], "parents": ["perry-ext-better-sqlite3@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["bitflags@2.12.1", "fallible-iterator@0.3.0", "fallible-streaming-iterator@0.1.9", "hashlink@0.11.1", "libsqlite3-sys@0.37.0", "smallvec@1.15.1", "sqlite-wasm-rs@0.5.5"]}, -{"package": "rust_decimal@1.43.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "maths", "serde", "std"], "parents": ["perry-ext-decimal@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["arrayvec@0.7.6", "borsh@1.6.1", "bytes@1.12.1", "num-traits@0.2.19", "rand@0.8.7", "rand@0.9.4", "serde@1.0.229", "serde_json@1.0.151", "wasm-bindgen@0.2.122"]}, -{"package": "rustc-demangle@0.1.28", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-runtime@0.5.1565", "perry@0.5.1565"], "dependencies": []}, -{"package": "rustc-hash@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["allsorts-azul@0.16.5"], "dependencies": []}, -{"package": "rustc-hash@2.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["bindgen@0.72.1", "hstr@3.0.6", "quinn-proto@0.11.15", "quinn@0.11.9", "selectors@0.38.0", "swc_allocator@4.0.1", "swc_bundler@37.0.0", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_codegen@21.0.0", "swc_ecma_loader@18.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_transforms_typescript@35.0.0", "swc_ecma_utils@25.0.0", "swc_graph_analyzer@14.0.2", "swc_sourcemap@9.3.4", "windows-reactor@0.0.0 [vendored]"], "dependencies": []}, -{"package": "rustc_version@0.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["curve25519-dalek@4.1.3", "derive_more-impl@2.1.1", "field-offset@0.3.6", "jni-macros@0.22.4", "pathfinder_simd@0.5.6", "rustc_version_runtime@0.3.0", "simd_cesu8@1.1.1"], "dependencies": ["semver@1.0.28"]}, -{"package": "rustc_version_runtime@0.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["mongodb@3.8.2"], "dependencies": ["rustc_version@0.4.1", "semver@1.0.28"]}, -{"package": "rustix@1.1.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "event", "fs", "net", "pipe", "process", "std", "time"], "parents": ["async-io@2.6.0", "async-process@2.5.0", "async-signal@0.2.14", "polling@3.11.0", "tempfile@3.27.0", "xattr@1.6.1", "zbus@5.16.0"], "dependencies": ["bitflags@2.12.1", "errno@0.3.14", "libc@0.2.189", "linux-raw-sys@0.12.1", "windows-sys@0.61.2"]}, -{"package": "rustls-native-certs@0.8.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ext-net@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["openssl-probe@0.2.1", "rustls-pki-types@1.14.1", "schannel@0.1.29", "security-framework@3.7.0"]}, -{"package": "rustls-pemfile@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["perry-ext-http@0.5.1565", "perry-ext-net@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["rustls-pki-types@1.14.1"]}, -{"package": "rustls-pki-types@1.14.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std", "web", "web-time"], "parents": ["quinn-proto@0.11.15", "reqwest@0.12.28", "rustls-native-certs@0.8.4", "rustls-pemfile@2.2.0", "rustls-webpki@0.103.13", "rustls@0.23.43", "tokio-tungstenite@0.29.0", "tungstenite@0.24.0", "tungstenite@0.29.0", "webpki-roots@1.0.9"], "dependencies": ["web-time@1.1.0", "zeroize@1.8.2"]}, -{"package": "rustls-webpki@0.103.13", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "aws-lc-rs", "default", "ring", "std"], "parents": ["perry-ext-http@0.5.1565", "rustls@0.23.43"], "dependencies": ["aws-lc-rs@1.17.0", "ring@0.17.14", "rustls-pki-types@1.14.1", "untrusted@0.9.0"]}, -{"package": "rustls@0.23.43", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["aws-lc-rs", "aws_lc_rs", "default", "log", "logging", "prefer-post-quantum", "ring", "std", "tls12"], "parents": ["hyper-rustls@0.27.9", "lettre@0.11.23", "mongodb@3.8.2", "perry-ext-http@0.5.1565", "perry-ext-net@0.5.1565", "perry-ext-ws@0.5.1565", "perry-stdlib@0.5.1565", "quinn-proto@0.11.15", "quinn@0.11.9", "reqwest@0.12.28", "tokio-rustls@0.26.4", "tokio-tungstenite@0.29.0", "tungstenite@0.24.0", "tungstenite@0.29.0"], "dependencies": ["aws-lc-rs@1.17.0", "log@0.4.34", "once_cell@1.21.4", "ring@0.17.14", "rustls-pki-types@1.14.1", "rustls-webpki@0.103.13", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "rustversion@1.0.22", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["arc-swap@1.9.1", "castaway@0.2.4", "wasm-bindgen@0.2.122"], "dependencies": []}, -{"package": "rusty-fork@0.3.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["timeout", "wait-timeout"], "parents": ["proptest@1.11.0"], "dependencies": ["fnv@1.0.7", "quick-error@1.2.3", "tempfile@3.27.0", "wait-timeout@0.2.1"]}, -{"package": "ryu-js@1.0.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-runtime@0.5.1565", "swc_ecma_codegen@21.0.0", "swc_ecma_utils@25.0.0"], "dependencies": []}, -{"package": "ryu@1.0.23", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["compact_str@0.7.1", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-ui-android@0.5.1565", "redis@1.6.0", "serde_urlencoded@0.7.1", "serde_yaml@0.9.34+deprecated"], "dependencies": []}, -{"package": "salsa20@0.10.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["scrypt@0.11.0"], "dependencies": ["cipher@0.4.4"]}, -{"package": "same-file@1.0.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["walkdir@2.5.0"], "dependencies": ["winapi-util@0.1.11"]}, -{"package": "schannel@0.1.29", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rustls-native-certs@0.8.4"], "dependencies": ["windows-sys@0.61.2"]}, -{"package": "scoped-tls@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["better_scoped_tls@1.0.1"], "dependencies": []}, -{"package": "scopeguard@1.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["lock_api@0.4.14"], "dependencies": []}, -{"package": "scraper@0.27.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "errors", "main"], "parents": ["perry-ext-cheerio@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["cssparser@0.37.0", "ego-tree@0.11.0", "getopts@0.2.24", "html5ever@0.39.0", "precomputed-hash@0.1.1", "selectors@0.38.0", "tendril@0.5.0"]}, -{"package": "scrypt@0.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "password-hash", "simple", "std"], "parents": ["perry-stdlib@0.5.1565", "pkcs5@0.7.1"], "dependencies": ["password-hash@0.5.0", "pbkdf2@0.12.2", "salsa20@0.10.2", "sha2@0.10.9"]}, -{"package": "sec1@0.7.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "der", "pem", "pkcs8", "point", "std", "subtle", "zeroize"], "parents": ["elliptic-curve@0.13.8"], "dependencies": ["base16ct@0.2.0", "der@0.7.10", "generic-array@0.14.7", "pkcs8@0.10.2", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "sec1@0.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "ctutils", "default", "der", "point", "subtle", "zeroize"], "parents": ["elliptic-curve@0.14.0"], "dependencies": ["base16ct@1.0.0", "ctutils@0.4.2", "der@0.8.1", "hybrid-array@0.4.12", "subtle@2.6.1", "zeroize@1.8.2"]}, -{"package": "security-framework-sys@2.17.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["security-framework@3.7.0"], "dependencies": ["core-foundation-sys@0.8.7", "libc@0.2.189"]}, -{"package": "security-framework@3.7.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["OSX_10_14", "alpn", "default", "session-tickets"], "parents": ["rustls-native-certs@0.8.4"], "dependencies": ["bitflags@2.12.1", "core-foundation-sys@0.8.7", "core-foundation@0.10.1", "libc@0.2.189", "security-framework-sys@2.17.0"]}, -{"package": "selectors@0.38.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["scraper@0.27.0"], "dependencies": ["bitflags@2.12.1", "cssparser@0.37.0", "derive_more@2.1.1", "log@0.4.34", "new_debug_unreachable@1.0.6", "phf@0.13.1", "phf_codegen@0.13.1", "precomputed-hash@0.1.1", "rustc-hash@2.1.2", "servo_arc@0.4.3", "smallvec@1.15.1"]}, -{"package": "semver@1.0.28", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["llvm-sys@221.0.1", "perry-updater@0.5.1565", "perry@0.5.1565", "rustc_version@0.4.1", "rustc_version_runtime@0.3.0", "wasmparser@0.244.0", "wasmparser@0.258.0", "wit-parser@0.244.0"], "dependencies": []}, -{"package": "seq-macro@0.3.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0"], "dependencies": []}, -{"package": "serde@1.0.229", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "derive", "rc", "serde_derive", "std"], "parents": ["bson@3.1.0", "bytes-str@0.2.7", "chrono@0.4.45", "debugid@0.8.0", "ed25519-dalek@2.2.0", "either@1.16.0", "enumflags2@0.7.12", "hstr@3.0.6", "icu_locale_core@2.3.0", "icu_pattern@0.5.0", "icu_provider@2.3.1", "icu_time@2.3.0", "indexmap@2.14.1", "ipnet@2.12.0", "jsonwebtoken@11.0.0", "ksni@0.3.6", "mongocrypt@0.4.0", "mongodb@3.8.2", "mpris-server@0.10.0", "node-semver@2.2.0", "num-bigint@0.4.6", "perry-api-manifest@0.5.1565", "perry-codegen@0.5.1565", "perry-container-compose@0.5.1565", "perry-diagnostics@0.5.1565", "perry-doc-tests@0.5.1565", "perry-ext-jsonwebtoken@0.5.1565", "perry-ext-node-forge@0.5.1565", "perry-ext-parcel-watcher@0.5.1565", "perry-ext-typescript@0.5.1565", "perry-hir@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-ui-geisterhand@0.5.1565", "perry-updater@0.5.1565", "perry@0.5.1565", "phf@0.13.1", "printpdf@0.10.1", "reqwest@0.12.28", "rust_decimal@1.43.0", "serde_bytes@0.11.19", "serde_json@1.0.151", "serde_urlencoded@0.7.1", "serde_yaml@0.9.34+deprecated", "serdect@0.4.3", "smallvec@1.15.1", "sqlx-core@0.9.0", "sqlx-macros-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_config@3.1.2", "swc_ecma_codegen@21.0.0", "swc_ecma_loader@18.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_transforms_typescript@35.0.0", "swc_sourcemap@9.3.4", "taffy@0.13.0", "triomphe@0.1.15", "url@2.5.8", "validator@0.21.0", "wasm-bindgen@0.2.122", "wit-component@0.244.0", "wit-parser@0.244.0", "x25519-dalek@2.0.1", "zbus@5.16.0", "zbus_names@4.3.2", "zerovec@0.11.8", "zvariant@5.12.0", "zvariant_utils@3.4.0"], "dependencies": ["serde_core@1.0.229", "serde_derive@1.0.229"]}, -{"package": "serde_bytes@0.11.19", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["bson@3.1.0", "mongodb@3.8.2"], "dependencies": ["serde@1.0.229", "serde_core@1.0.229"]}, -{"package": "serde_core@1.0.229", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "rc", "result", "std"], "parents": ["bitflags@2.12.1", "deranged@0.5.8", "indexmap@2.14.1", "pem@3.0.6", "pem@4.0.0", "potential_utf@0.1.5", "serde@1.0.229", "serde_bytes@0.11.19", "serde_json@1.0.151", "serde_spanned@1.1.1", "serde_with@3.21.0", "time@0.3.55", "tinystr@0.8.4", "toml@1.1.4+spec-1.1.0", "toml_datetime@1.1.1+spec-1.1.0", "uuid@1.26.0"], "dependencies": ["serde_derive@1.0.229"]}, -{"package": "serde_derive@1.0.229", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["printpdf@0.10.1", "serde@1.0.229", "serde_core@1.0.229", "validator@0.21.0", "wit-component@0.244.0", "wit-parser@0.244.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@3.0.3"]}, -{"package": "serde_json@1.0.151", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "indexmap", "preserve_order", "raw_value", "std"], "parents": ["jsonwebtoken@11.0.0", "perry-codegen@0.5.1565", "perry-container-compose@0.5.1565", "perry-diagnostics@0.5.1565", "perry-doc-tests@0.5.1565", "perry-ext-dotenv@0.5.1565", "perry-ext-fastify@0.5.1565", "perry-ext-fetch@0.5.1565", "perry-ext-http@0.5.1565", "perry-ext-jsonwebtoken@0.5.1565", "perry-ext-mongodb@0.5.1565", "perry-ext-mysql2@0.5.1565", "perry-ext-net@0.5.1565", "perry-ext-node-forge@0.5.1565", "perry-ext-parcel-watcher@0.5.1565", "perry-ext-qs@0.5.1565", "perry-ext-typescript@0.5.1565", "perry-ext-undici@0.5.1565", "perry-ext-validator@0.5.1565", "perry-hir@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-ui-android@0.5.1565", "perry-ui-geisterhand@0.5.1565", "perry-updater@0.5.1565", "perry@0.5.1565", "printpdf@0.10.1", "reqwest@0.12.28", "rust_decimal@1.43.0", "sqlx-core@0.9.0", "sqlx-macros-core@0.9.0", "sqlx-postgres@0.9.0", "swc_config@3.1.2", "swc_ecma_transforms_optimization@34.0.0", "swc_sourcemap@9.3.4", "validator@0.21.0", "wit-component@0.244.0", "wit-parser@0.244.0"], "dependencies": ["indexmap@2.14.1", "itoa@1.0.18", "memchr@2.8.1", "serde@1.0.229", "serde_core@1.0.229", "zmij@1.0.21"]}, -{"package": "serde_repr@0.1.20", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zbus@5.16.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "serde_spanned@1.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "serde", "std"], "parents": ["toml@1.1.4+spec-1.1.0"], "dependencies": ["serde_core@1.0.229"]}, -{"package": "serde_urlencoded@0.7.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["reqwest@0.12.28"], "dependencies": ["form_urlencoded@1.2.2", "itoa@1.0.18", "ryu@1.0.23", "serde@1.0.229"]}, -{"package": "serde_with@3.21.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["macros"], "parents": ["mongodb@3.8.2"], "dependencies": ["serde_core@1.0.229", "serde_with_macros@3.21.0"]}, -{"package": "serde_with_macros@3.21.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["serde_with@3.21.0"], "dependencies": ["darling@0.23.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "serde_yaml@0.9.34+deprecated", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-container-compose@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["indexmap@2.14.1", "itoa@1.0.18", "ryu@1.0.23", "serde@1.0.229", "unsafe-libyaml@0.2.11"]}, -{"package": "serdect@0.4.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default"], "parents": ["crypto-bigint@0.7.5", "ed448-goldilocks@0.14.0-pre.15"], "dependencies": ["base16ct@1.0.0", "serde@1.0.229"]}, -{"package": "servo_arc@0.4.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "track_alloc_size"], "parents": ["selectors@0.38.0"], "dependencies": ["stable_deref_trait@1.2.1"]}, -{"package": "sha1@0.10.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["p12@0.6.3", "perry-stdlib@0.5.1565", "swc_ecma_transforms_react@35.0.0", "tungstenite@0.24.0", "tungstenite@0.29.0"], "dependencies": ["cfg-if@1.0.4", "cpufeatures@0.2.17", "digest@0.10.7"]}, -{"package": "sha1@0.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "oid"], "parents": ["mongodb@3.8.2", "perry-stdlib@0.5.1565", "sqlx-mysql@0.9.0", "x509-cert@0.3.0", "zip@8.6.0"], "dependencies": ["cfg-if@1.0.4", "cpufeatures@0.3.0", "digest@0.11.3"]}, -{"package": "sha1_smol@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["redis@1.6.0", "uuid@1.26.0"], "dependencies": []}, -{"package": "sha2@0.10.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "oid", "std"], "parents": ["ed25519-dalek@2.2.0", "jsonwebtoken@11.0.0", "lopdf@0.39.0", "p256@0.13.2", "p384@0.13.1", "p521@0.13.3", "pkcs5@0.7.1", "rsa@0.9.10", "scrypt@0.11.0", "sqlx-core@0.9.0", "sqlx-macros-core@0.9.0"], "dependencies": ["cfg-if@1.0.4", "cpufeatures@0.2.17", "digest@0.10.7"]}, -{"package": "sha2@0.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "oid"], "parents": ["lzma-rust2@0.16.4", "mongodb@3.8.2", "perry-ext-node-forge@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-updater@0.5.1565", "perry@0.5.1565", "rsa@0.10.0-rc.18", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0"], "dependencies": ["cfg-if@1.0.4", "cpufeatures@0.3.0", "digest@0.11.3"]}, -{"package": "sha3-utils@0.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["zerocopy@0.8.50"]}, -{"package": "sha3@0.10.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["digest@0.10.7", "keccak@0.1.6"]}, -{"package": "sha3@0.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["ml-kem@0.3.2"], "dependencies": ["digest@0.11.3", "keccak@0.2.0"]}, -{"package": "sha3@0.12.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "oid"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["digest@0.11.3", "keccak@0.2.0", "sponge-cursor@0.1.0"]}, -{"package": "shake@0.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default"], "parents": ["ed448-goldilocks@0.14.0-pre.15", "perry-stdlib@0.5.1565"], "dependencies": ["digest@0.11.3", "keccak@0.2.0", "sponge-cursor@0.1.0"]}, -{"package": "sharded-slab@0.1.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tracing-subscriber@0.3.23"], "dependencies": ["lazy_static@1.5.0"]}, -{"package": "shell-words@1.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["dialoguer@0.11.0", "dialoguer@0.12.0"], "dependencies": []}, -{"package": "shlex@1.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["bindgen@0.72.1"], "dependencies": []}, -{"package": "shlex@2.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["cc@1.4.4"], "dependencies": []}, -{"package": "signal-hook-registry@1.4.8", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["async-signal@0.2.14", "tokio@1.53.1"], "dependencies": ["errno@0.3.14", "libc@0.2.189"]}, -{"package": "signature@2.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "digest", "rand_core", "std"], "parents": ["ecdsa@0.16.9", "ed25519@2.2.3", "jsonwebtoken@11.0.0", "rsa@0.9.10"], "dependencies": ["digest@0.10.7", "rand_core@0.6.4"]}, -{"package": "signature@3.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "digest", "rand_core"], "parents": ["ed448-goldilocks@0.14.0-pre.15", "ed448@0.5.0", "rsa@0.10.0-rc.18", "x509-cert@0.3.0"], "dependencies": ["digest@0.11.3", "rand_core@0.10.1"]}, -{"package": "simd-adler32@0.3.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["const-generics", "default", "std"], "parents": ["fdeflate@0.3.7", "miniz_oxide@0.8.9", "miniz_oxide@0.9.1", "zopfli@0.8.3", "zune-inflate@0.2.54"], "dependencies": []}, -{"package": "simd_cesu8@1.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["jni-macros@0.22.4", "jni@0.22.4"], "dependencies": ["rustc_version@0.4.1", "simdutf8@0.1.5"]}, -{"package": "simd_helpers@0.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rav1e@0.8.1"], "dependencies": ["quote@1.0.45"]}, -{"package": "simdutf8@0.1.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["bson@3.1.0", "perry-runtime@0.5.1565", "simd_cesu8@1.1.1"], "dependencies": []}, -{"package": "simple_asn1@0.6.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["jsonwebtoken@11.0.0"], "dependencies": ["num-bigint@0.4.6", "num-traits@0.2.19", "thiserror@2.0.18", "time@0.3.55"]}, -{"package": "siphasher@0.3.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["swc_common@18.0.1"], "dependencies": []}, -{"package": "siphasher@1.0.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["phf_shared@0.11.3", "phf_shared@0.12.1", "phf_shared@0.13.1"], "dependencies": []}, -{"package": "slab@0.4.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["async-executor@1.14.0", "async-io@2.6.0", "async-signal@0.2.14", "futures-util@0.3.34", "h2@0.4.19", "quinn-proto@0.11.15"], "dependencies": []}, -{"package": "slotmap@1.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["taffy@0.13.0"], "dependencies": ["version_check@0.9.5"]}, -{"package": "smallvec@1.15.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["const_generics", "const_new", "serde", "union", "write"], "parents": ["cfg-expr@0.20.8", "cssparser@0.37.0", "exr@1.74.0", "fixed_decimal@0.7.2", "gio@0.20.12", "glib@0.20.12", "glib@0.22.7", "governor@0.10.4", "gstreamer@0.25.3", "hickory-resolver@0.26.1", "hyper@1.11.1", "icu_normalizer@2.2.0", "idna@1.1.0", "moka@0.12.15", "num-bigint-dig@0.8.6", "parking_lot_core@0.9.12", "rusqlite@0.39.0", "selectors@0.38.0", "sqlx-core@0.9.0", "sqlx-postgres@0.9.0", "tracing-subscriber@0.3.23"], "dependencies": ["serde@1.0.229"]}, -{"package": "smartstring@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0"], "dependencies": ["autocfg@1.5.1", "static_assertions@1.1.0", "version_check@0.9.5"]}, -{"package": "socket2@0.6.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["all"], "parents": ["hyper-util@0.1.20", "ipconfig@0.3.4", "lettre@0.11.23", "mongodb@3.8.2", "perry-ext-fastify@0.5.1565", "perry-ext-http@0.5.1565", "perry-runtime@0.5.1565", "quinn-udp@0.5.14", "quinn@0.11.9", "redis@1.6.0", "tokio@1.53.1"], "dependencies": ["libc@0.2.189", "windows-sys@0.61.2"]}, -{"package": "soup3-sys@0.7.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["v3_0"], "parents": ["soup3@0.7.0", "webkit6-sys@0.4.0"], "dependencies": ["gio-sys@0.20.10", "glib-sys@0.20.10", "gobject-sys@0.20.10", "libc@0.2.189", "system-deps@7.0.8"]}, -{"package": "soup3@0.7.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["webkit6@0.4.0"], "dependencies": ["futures-channel@0.3.32", "gio@0.20.12", "glib@0.20.12", "libc@0.2.189", "soup3-sys@0.7.0"]}, -{"package": "spin@0.9.8", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["barrier", "default", "lazy", "lock_api", "lock_api_crate", "mutex", "once", "rwlock", "spin_mutex"], "parents": ["flume@0.12.0", "lazy_static@1.5.0", "wasmi@1.1.0"], "dependencies": ["lock_api@0.4.14"]}, -{"package": "spinning_top@0.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["governor@0.10.4"], "dependencies": ["lock_api@0.4.14"]}, -{"package": "spki@0.7.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "pem", "std"], "parents": ["ecdsa@0.16.9", "pkcs1@0.7.5", "pkcs5@0.7.1", "pkcs8@0.10.2", "rsa@0.9.10"], "dependencies": ["base64ct@1.8.3", "der@0.7.10"]}, -{"package": "spki@0.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "pem", "std"], "parents": ["perry-ext-node-forge@0.5.1565", "perry-stdlib@0.5.1565", "pkcs1@0.8.0-rc.4", "pkcs8@0.11.0", "rsa@0.10.0-rc.18", "x509-cert@0.3.0"], "dependencies": ["base64ct@1.8.3", "der@0.8.1"]}, -{"package": "sponge-cursor@0.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["sha3@0.12.0", "shake@0.1.0"], "dependencies": []}, -{"package": "sqlite-wasm-rs@0.5.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rusqlite@0.39.0"], "dependencies": ["cc@1.4.4", "js-sys@0.3.99", "rsqlite-vfs@0.1.1", "wasm-bindgen@0.2.122"]}, -{"package": "sqlx-core@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["_rt-tokio", "any", "chrono", "crc", "default", "json", "migrate", "offline", "serde", "serde_json", "sha2", "tokio", "tokio-stream"], "parents": ["sqlx-macros-core@0.9.0", "sqlx-macros@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "sqlx@0.9.0"], "dependencies": ["base64@0.22.1", "bytes@1.12.1", "cfg-if@1.0.4", "chrono@0.4.45", "crc@3.4.0", "crossbeam-queue@0.3.12", "either@1.16.0", "event-listener@5.4.1", "futures-core@0.3.34", "futures-intrusive@0.5.0", "futures-io@0.3.34", "futures-util@0.3.34", "hashbrown@0.16.1", "hashlink@0.11.1", "indexmap@2.14.1", "log@0.4.34", "memchr@2.8.1", "percent-encoding@2.3.2", "serde@1.0.229", "serde_json@1.0.151", "sha2@0.10.9", "smallvec@1.15.1", "thiserror@2.0.18", "tokio-stream@0.1.18", "tokio@1.53.1", "tracing@0.1.44", "url@2.5.8"]}, -{"package": "sqlx-macros-core@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["_rt-tokio", "chrono", "default", "json", "mysql", "mysql-rsa", "postgres", "sqlx-mysql", "sqlx-postgres", "tokio"], "parents": ["sqlx-macros@0.9.0"], "dependencies": ["cfg-if@1.0.4", "dotenvy@0.15.7", "either@1.16.0", "heck@0.5.0", "hex@0.4.3", "proc-macro2@1.0.106", "quote@1.0.45", "serde@1.0.229", "serde_json@1.0.151", "sha2@0.10.9", "sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "syn@2.0.117", "tokio@1.53.1", "url@2.5.8"]}, -{"package": "sqlx-macros@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["_rt-tokio", "chrono", "default", "json", "mysql", "mysql-rsa", "postgres"], "parents": ["sqlx@0.9.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "sqlx-core@0.9.0", "sqlx-macros-core@0.9.0", "syn@2.0.117"]}, -{"package": "sqlx-mysql@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["chrono", "json", "migrate", "offline", "rsa", "serde"], "parents": ["sqlx-macros-core@0.9.0", "sqlx@0.9.0"], "dependencies": ["bitflags@2.12.1", "byteorder@1.5.0", "bytes@1.12.1", "chrono@0.4.45", "crc@3.4.0", "digest@0.11.3", "dotenvy@0.15.7", "either@1.16.0", "futures-core@0.3.34", "futures-util@0.3.34", "generic-array@0.14.7", "log@0.4.34", "percent-encoding@2.3.2", "rand@0.10.2", "rsa@0.10.0-rc.18", "serde@1.0.229", "sha1@0.11.0", "sha2@0.11.0", "sqlx-core@0.9.0", "thiserror@2.0.18", "tracing@0.1.44"]}, -{"package": "sqlx-postgres@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["chrono", "json", "migrate", "offline"], "parents": ["sqlx-macros-core@0.9.0", "sqlx@0.9.0"], "dependencies": ["atoi@2.0.0", "base64@0.22.1", "bitflags@2.12.1", "byteorder@1.5.0", "chrono@0.4.45", "crc@3.4.0", "dotenvy@0.15.7", "etcetera@0.11.0", "futures-channel@0.3.32", "futures-core@0.3.34", "futures-util@0.3.34", "hex@0.4.3", "hkdf@0.13.0", "hmac@0.13.0", "itoa@1.0.18", "log@0.4.34", "md-5@0.11.0", "memchr@2.8.1", "rand@0.10.2", "serde@1.0.229", "serde_json@1.0.151", "sha2@0.11.0", "smallvec@1.15.1", "sqlx-core@0.9.0", "stringprep@0.1.5", "thiserror@2.0.18", "tracing@0.1.44", "whoami@2.1.2"]}, -{"package": "sqlx-sqlite@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["chrono", "json", "migrate", "offline", "serde"], "parents": ["sqlx-macros-core@0.9.0", "sqlx@0.9.0"], "dependencies": ["atoi@2.0.0", "chrono@0.4.45", "flume@0.12.0", "form_urlencoded@1.2.2", "futures-channel@0.3.32", "futures-core@0.3.34", "futures-executor@0.3.32", "futures-intrusive@0.5.0", "futures-util@0.3.34", "libsqlite3-sys@0.37.0", "log@0.4.34", "percent-encoding@2.3.2", "serde@1.0.229", "sqlx-core@0.9.0", "thiserror@2.0.18", "tracing@0.1.44", "url@2.5.8"]}, -{"package": "sqlx@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["_rt-tokio", "chrono", "json", "mysql", "mysql-rsa", "postgres", "runtime-tokio", "sqlx-mysql", "sqlx-postgres"], "parents": ["perry-ext-mysql2@0.5.1565", "perry-ext-pg@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["sqlx-core@0.9.0", "sqlx-macros@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0"]}, -{"package": "stable_deref_trait@1.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["as-slice@0.2.1", "icu_provider@2.3.1", "servo_arc@0.4.3", "triomphe@0.1.15", "yoke@0.8.3"], "dependencies": []}, -{"package": "stacker@0.1.25", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-hir@0.5.1565", "swc_ecma_parser@32.0.0"], "dependencies": ["cc@1.4.4", "cfg-if@1.0.4", "libc@0.2.189", "psm@0.1.32", "windows-sys@0.61.2"]}, -{"package": "static_assertions@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["compact_str@0.7.1", "kstring@2.0.2", "ouroboros@0.17.2", "smartstring@1.0.1"], "dependencies": []}, -{"package": "string_cache@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["web_atoms@0.2.4"], "dependencies": ["new_debug_unreachable@1.0.6", "parking_lot@0.12.5", "phf_shared@0.13.1", "precomputed-hash@0.1.1"]}, -{"package": "string_cache_codegen@0.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["web_atoms@0.2.4"], "dependencies": ["phf_generator@0.13.1", "phf_shared@0.13.1", "proc-macro2@1.0.106", "quote@1.0.45"]}, -{"package": "string_enum@1.0.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_ast@19.0.0", "swc_ecma_transforms_react@35.0.0"], "dependencies": ["quote@1.0.45", "swc_macros_common@1.0.1", "syn@2.0.117"]}, -{"package": "stringprep@0.1.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["lopdf@0.39.0", "mongodb@3.8.2", "sqlx-postgres@0.9.0"], "dependencies": ["unicode-bidi@0.3.18", "unicode-normalization@0.1.25", "unicode-properties@0.1.4"]}, -{"package": "strsim@0.11.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["clap_builder@4.6.6", "darling_core@0.20.11", "darling_core@0.23.0", "mongodb@3.8.2"], "dependencies": []}, -{"package": "strum@0.27.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "derive", "std", "strum_macros"], "parents": ["croner@3.0.1"], "dependencies": ["strum_macros@0.27.2"]}, -{"package": "strum_macros@0.27.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["strum@0.27.2"], "dependencies": ["heck@0.5.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "subtle@2.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["const-generics", "i128"], "parents": ["aes-gcm@0.10.3", "bcrypt@0.19.3", "crypto-bigint@0.5.5", "crypto-bigint@0.7.5", "ctutils@0.4.2", "curve25519-dalek@4.1.3", "digest@0.10.7", "ed25519-dalek@2.2.0", "ed448-goldilocks@0.14.0-pre.15", "elliptic-curve@0.13.8", "elliptic-curve@0.14.0", "ff@0.13.1", "ff@0.14.0", "group@0.13.0", "group@0.14.0", "hybrid-array@0.4.12", "password-hash@0.5.0", "rfc6979@0.4.0", "rsa@0.9.10", "rustls@0.23.43", "sec1@0.7.3", "sec1@0.8.1", "universal-hash@0.5.1"], "dependencies": []}, -{"package": "swc_allocator@4.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["hashbrown"], "parents": ["swc_ecma_codegen@21.0.0"], "dependencies": ["allocator-api2@0.2.21", "bumpalo@3.20.3", "hashbrown@0.14.5", "rustc-hash@2.1.2"]}, -{"package": "swc_atoms@9.0.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_bundler@37.0.0", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_codegen@21.0.0", "swc_ecma_loader@18.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_transforms_typescript@35.0.0", "swc_ecma_utils@25.0.0", "swc_ecma_visit@19.0.0"], "dependencies": ["hstr@3.0.6", "once_cell@1.21.4", "serde@1.0.229"]}, -{"package": "swc_bundler@37.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-ext-typescript@0.5.1565"], "dependencies": ["anyhow@1.0.104", "crc@2.1.0", "indexmap@2.14.1", "is-macro@0.3.7", "once_cell@1.21.4", "petgraph@0.7.1", "radix_fmt@1.0.0", "relative-path@1.9.3", "rustc-hash@2.1.2", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_codegen@21.0.0", "swc_ecma_loader@18.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_utils@25.0.0", "swc_ecma_visit@19.0.0", "swc_graph_analyzer@14.0.2", "tracing@0.1.44"]}, -{"package": "swc_common@18.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-ext-typescript@0.5.1565", "perry-hir@0.5.1565", "perry-parser@0.5.1565", "perry@0.5.1565", "swc_bundler@37.0.0", "swc_ecma_ast@19.0.0", "swc_ecma_codegen@21.0.0", "swc_ecma_loader@18.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_transforms_typescript@35.0.0", "swc_ecma_utils@25.0.0", "swc_ecma_visit@19.0.0"], "dependencies": ["anyhow@1.0.104", "ast_node@5.0.0", "better_scoped_tls@1.0.1", "bytes-str@0.2.7", "either@1.16.0", "from_variant@3.0.0", "num-bigint@0.4.6", "once_cell@1.21.4", "rustc-hash@2.1.2", "serde@1.0.229", "siphasher@0.3.11", "swc_atoms@9.0.3", "swc_eq_ignore_macros@1.0.1", "swc_visit@2.0.1", "tracing@0.1.44", "unicode-width@0.2.2", "url@2.5.8"]}, -{"package": "swc_config@3.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_transforms_react@35.0.0"], "dependencies": ["anyhow@1.0.104", "bytes-str@0.2.7", "indexmap@2.14.1", "serde@1.0.229", "serde_json@1.0.151", "swc_config_macro@1.0.1"]}, -{"package": "swc_config_macro@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_config@3.1.2"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "swc_macros_common@1.0.1", "syn@2.0.117"]}, -{"package": "swc_ecma_ast@19.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-ext-typescript@0.5.1565", "perry-hir@0.5.1565", "perry-parser@0.5.1565", "perry@0.5.1565", "swc_bundler@37.0.0", "swc_ecma_codegen@21.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_transforms_typescript@35.0.0", "swc_ecma_utils@25.0.0", "swc_ecma_visit@19.0.0"], "dependencies": ["bitflags@2.12.1", "is-macro@0.3.7", "num-bigint@0.4.6", "once_cell@1.21.4", "phf@0.11.3", "rustc-hash@2.1.2", "string_enum@1.0.2", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_visit@2.0.1", "unicode-id-start@1.4.0"]}, -{"package": "swc_ecma_codegen@21.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ext-typescript@0.5.1565", "perry-hir@0.5.1565", "swc_bundler@37.0.0"], "dependencies": ["ascii@1.1.0", "compact_str@0.7.1", "memchr@2.8.1", "num-bigint@0.4.6", "once_cell@1.21.4", "regex@1.13.1", "rustc-hash@2.1.2", "ryu-js@1.0.3", "serde@1.0.229", "swc_allocator@4.0.1", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_codegen_macros@2.0.2", "swc_sourcemap@9.3.4", "tracing@0.1.44"]}, -{"package": "swc_ecma_codegen_macros@2.0.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_codegen@21.0.0"], "dependencies": ["proc-macro2@1.0.106", "swc_macros_common@1.0.1", "syn@2.0.117"]}, -{"package": "swc_ecma_loader@18.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-ext-typescript@0.5.1565", "swc_bundler@37.0.0"], "dependencies": ["anyhow@1.0.104", "pathdiff@0.2.3", "rustc-hash@2.1.2", "serde@1.0.229", "swc_atoms@9.0.3", "swc_common@18.0.1", "tracing@0.1.44"]}, -{"package": "swc_ecma_parser@29.0.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["typescript"], "parents": ["swc_bundler@37.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0"], "dependencies": ["bitflags@2.12.1", "either@1.16.0", "num-bigint@0.4.6", "phf@0.11.3", "rustc-hash@2.1.2", "seq-macro@0.3.6", "serde@1.0.229", "smartstring@1.0.1", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "tracing@0.1.44"]}, -{"package": "swc_ecma_parser@32.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "stacker", "typescript"], "parents": ["perry-ext-typescript@0.5.1565", "perry-parser@0.5.1565"], "dependencies": ["bitflags@2.12.1", "either@1.16.0", "num-bigint@0.4.6", "phf@0.11.3", "rustc-hash@2.1.2", "seq-macro@0.3.6", "serde@1.0.229", "smartstring@1.0.1", "stacker@0.1.25", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "tracing@0.1.44"]}, -{"package": "swc_ecma_transforms_base@32.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ext-typescript@0.5.1565", "perry-hir@0.5.1565", "perry-parser@0.5.1565", "perry@0.5.1565", "swc_bundler@37.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_transforms_typescript@35.0.0"], "dependencies": ["better_scoped_tls@1.0.1", "indexmap@2.14.1", "once_cell@1.21.4", "par-core@2.0.0", "phf@0.11.3", "rustc-hash@2.1.2", "serde@1.0.229", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_utils@25.0.0", "swc_ecma_visit@19.0.0", "tracing@0.1.44"]}, -{"package": "swc_ecma_transforms_optimization@34.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_bundler@37.0.0"], "dependencies": ["bytes-str@0.2.7", "dashmap@5.5.3", "indexmap@2.14.1", "once_cell@1.21.4", "par-core@2.0.0", "petgraph@0.7.1", "rustc-hash@2.1.2", "serde_json@1.0.151", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_transforms_base@32.0.0", "swc_ecma_utils@25.0.0", "swc_ecma_visit@19.0.0", "tracing@0.1.44"]}, -{"package": "swc_ecma_transforms_react@35.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "serde", "serde-impl"], "parents": ["perry-ext-typescript@0.5.1565", "swc_ecma_transforms_typescript@35.0.0"], "dependencies": ["base64@0.22.1", "bytes-str@0.2.7", "indexmap@2.14.1", "once_cell@1.21.4", "rustc-hash@2.1.2", "serde@1.0.229", "sha1@0.10.6", "string_enum@1.0.2", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_config@3.1.2", "swc_ecma_ast@19.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_transforms_base@32.0.0", "swc_ecma_utils@25.0.0", "swc_ecma_visit@19.0.0"]}, -{"package": "swc_ecma_transforms_typescript@35.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ext-typescript@0.5.1565"], "dependencies": ["bytes-str@0.2.7", "rustc-hash@2.1.2", "serde@1.0.229", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_utils@25.0.0", "swc_ecma_visit@19.0.0"]}, -{"package": "swc_ecma_utils@25.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_bundler@37.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_transforms_typescript@35.0.0"], "dependencies": ["indexmap@2.14.1", "num_cpus@1.17.0", "once_cell@1.21.4", "par-core@2.0.0", "rustc-hash@2.1.2", "ryu-js@1.0.3", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_visit@19.0.0", "tracing@0.1.44"]}, -{"package": "swc_ecma_visit@19.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-ext-typescript@0.5.1565", "perry-hir@0.5.1565", "perry-parser@0.5.1565", "perry@0.5.1565", "swc_bundler@37.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_transforms_react@35.0.0", "swc_ecma_transforms_typescript@35.0.0", "swc_ecma_utils@25.0.0"], "dependencies": ["new_debug_unreachable@1.0.6", "num-bigint@0.4.6", "swc_atoms@9.0.3", "swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_visit@2.0.1", "tracing@0.1.44"]}, -{"package": "swc_eq_ignore_macros@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_common@18.0.1"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "swc_graph_analyzer@14.0.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_bundler@37.0.0"], "dependencies": ["auto_impl@1.3.0", "petgraph@0.7.1", "rustc-hash@2.1.2", "tracing@0.1.44"]}, -{"package": "swc_macros_common@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ast_node@5.0.0", "from_variant@3.0.0", "string_enum@1.0.2", "swc_config_macro@1.0.1", "swc_ecma_codegen_macros@2.0.2"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "swc_sourcemap@9.3.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_codegen@21.0.0"], "dependencies": ["base64-simd@0.8.0", "bitvec@1.0.1", "bytes-str@0.2.7", "data-encoding@2.11.0", "debugid@0.8.0", "if_chain@1.0.3", "rustc-hash@2.1.2", "serde@1.0.229", "serde_json@1.0.151", "unicode-id-start@1.4.0", "url@2.5.8"]}, -{"package": "swc_visit@2.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_common@18.0.1", "swc_ecma_ast@19.0.0", "swc_ecma_visit@19.0.0"], "dependencies": ["either@1.16.0", "new_debug_unreachable@1.0.6"]}, -{"package": "syn@1.0.109", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["proc-macro-error@1.0.4"], "dependencies": ["proc-macro2@1.0.106", "unicode-ident@1.0.24"]}, -{"package": "syn@2.0.117", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["clone-impls", "default", "derive", "extra-traits", "fold", "full", "parsing", "printing", "proc-macro", "visit", "visit-mut"], "parents": ["arg_enum_proc_macro@0.3.4", "ast_node@5.0.0", "async-recursion@1.1.1", "auto_impl@1.3.0", "bindgen@0.72.1", "borsh-derive@1.6.1", "cssparser-macros@0.7.0", "curve25519-dalek-derive@0.1.1", "darling_core@0.20.11", "darling_core@0.23.0", "darling_macro@0.20.11", "darling_macro@0.23.0", "der_derive@0.8.0", "derive-syn-parse@0.2.0", "derive-where@1.6.1", "derive_builder_core@0.20.2", "derive_builder_macro@0.20.2", "derive_more-impl@2.1.1", "displaydoc@0.2.6", "enumflags2_derive@0.7.12", "equator-macro@0.4.2", "from_variant@3.0.0", "glib-macros@0.20.12", "glib-macros@0.22.6", "gtk4-macros@0.9.5", "inkwell_internals@0.14.0", "interpolate_name@0.2.4", "is-macro@0.3.7", "jni-macros@0.22.4", "jni-sys-macros@0.4.1", "macro_magic@0.5.1", "macro_magic_core@0.5.1", "macro_magic_core_macros@0.5.1", "macro_magic_macros@0.5.1", "miette-derive@7.6.0", "mongodb-internal-macros@3.8.2", "num-derive@0.4.2", "ouroboros_macro@0.17.2", "phf_macros@0.11.3", "phf_macros@0.13.1", "prettyplease@0.2.37", "profiling-procmacros@1.0.18", "serde_repr@0.1.20", "serde_with_macros@3.21.0", "sqlx-macros-core@0.9.0", "sqlx-macros@0.9.0", "string_enum@1.0.2", "strum_macros@0.27.2", "swc_config_macro@1.0.1", "swc_ecma_codegen_macros@2.0.2", "swc_eq_ignore_macros@1.0.1", "swc_macros_common@1.0.1", "synstructure@0.13.2", "thiserror-impl@1.0.69", "thiserror-impl@2.0.18", "tls_codec_derive@0.4.2", "tokio-macros@2.7.0", "tracing-attributes@0.1.31", "trait-variant@0.1.2", "typed-builder-macro@0.22.0", "wasm-bindgen-macro-support@0.2.122", "webview2-com-macros@0.8.1", "windows-implement@0.60.2", "windows-implement@0.60.2 [vendored]", "windows-interface@0.59.3", "windows-interface@0.59.3 [vendored]", "wit-bindgen-rust-macro@0.51.0", "wit-bindgen-rust@0.51.0", "yoke-derive@0.8.2", "zbus_macros@5.16.0", "zerocopy-derive@0.8.50", "zerofrom-derive@0.1.7", "zeroize_derive@1.4.3", "zvariant_derive@5.12.0", "zvariant_utils@3.4.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "unicode-ident@1.0.24"]}, -{"package": "syn@3.0.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["clone-impls", "default", "derive", "extra-traits", "full", "parsing", "printing", "proc-macro", "visit-mut"], "parents": ["async-trait@0.1.92", "clap_derive@4.6.4", "futures-macro@0.3.34", "serde_derive@1.0.229", "zerovec-derive@0.11.6"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "unicode-ident@1.0.24"]}, -{"package": "sync_wrapper@1.0.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["futures", "futures-core"], "parents": ["reqwest@0.12.28", "tower@0.5.3"], "dependencies": ["futures-core@0.3.34"]}, -{"package": "synstructure@0.13.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "proc-macro"], "parents": ["yoke-derive@0.8.2", "zerofrom-derive@0.1.7"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "system-configuration-sys@0.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["system-configuration@0.7.0"], "dependencies": ["core-foundation-sys@0.8.7", "libc@0.2.189"]}, -{"package": "system-configuration@0.7.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["hickory-resolver@0.26.1"], "dependencies": ["bitflags@2.12.1", "core-foundation@0.9.4", "system-configuration-sys@0.6.0"]}, -{"package": "system-deps@7.0.8", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["cairo-sys-rs@0.20.10", "cairo-sys-rs@0.22.0", "gdk-pixbuf-sys@0.20.10", "gdk4-sys@0.9.6", "gio-sys@0.20.10", "gio-sys@0.22.0", "glib-sys@0.20.10", "glib-sys@0.22.6", "gobject-sys@0.20.10", "gobject-sys@0.22.6", "graphene-sys@0.20.10", "gsk4-sys@0.9.6", "gstreamer-app-sys@0.25.0", "gstreamer-base-sys@0.25.0", "gstreamer-sys@0.25.2", "gtk4-sys@0.9.6", "javascriptcore6-sys@0.4.0", "libshumate-sys@0.6.0", "pango-sys@0.20.10", "soup3-sys@0.7.0", "webkit6-sys@0.4.0"], "dependencies": ["cfg-expr@0.20.8", "heck@0.5.0", "pkg-config@0.3.33", "toml@1.1.4+spec-1.1.0", "version-compare@0.2.1"]}, -{"package": "taffy@0.13.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["flexbox", "std", "taffy_tree"], "parents": ["perry-runtime@0.5.1565"], "dependencies": ["arrayvec@0.7.6", "serde@1.0.229", "slotmap@1.1.1"]}, -{"package": "tagptr@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["moka@0.12.15"], "dependencies": []}, -{"package": "take_mut@0.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["mongodb@3.8.2"], "dependencies": []}, -{"package": "tap@1.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["bitvec@1.0.1", "wyz@0.5.1"], "dependencies": []}, -{"package": "tar@0.4.46", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "xattr"], "parents": ["perry@0.5.1565"], "dependencies": ["filetime@0.2.29", "libc@0.2.189", "xattr@1.6.1"]}, -{"package": "target-lexicon@0.13.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["cfg-expr@0.20.8"], "dependencies": []}, -{"package": "tempfile@3.27.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "getrandom"], "parents": ["dialoguer@0.11.0", "dialoguer@0.12.0", "perry-doc-tests@0.5.1565", "perry-ext-parcel-watcher@0.5.1565", "perry-ui@0.5.1565", "perry-updater@0.5.1565", "perry@0.5.1565", "proptest@1.11.0", "rusty-fork@0.3.1", "uds_windows@1.2.1"], "dependencies": ["fastrand@2.4.1", "getrandom@0.4.2", "once_cell@1.21.4", "rustix@1.1.4", "windows-sys@0.61.2"]}, -{"package": "temporal_rs@0.2.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["compiled_data", "std", "tzdb"], "parents": ["perry-runtime@0.5.1565"], "dependencies": ["calendrical_calculations@0.2.4", "core_maths@0.1.1", "icu_calendar@2.3.0", "icu_locale_core@2.3.0", "ixdtf@0.6.5", "num-traits@0.2.19", "timezone_provider@0.2.6", "tinystr@0.8.4", "writeable@0.6.4"]}, -{"package": "tendril@0.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["markup5ever@0.39.0", "scraper@0.27.0"], "dependencies": ["new_debug_unreachable@1.0.6", "utf-8@0.7.6"]}, -{"package": "termcolor@1.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["env_logger@0.10.2"], "dependencies": ["winapi-util@0.1.11"]}, -{"package": "thiserror-impl@1.0.69", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["thiserror@1.0.69"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "thiserror-impl@2.0.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["thiserror@2.0.18"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "thiserror@1.0.69", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["dialoguer@0.11.0", "node-semver@2.2.0", "perry-codegen@0.5.1565", "perry-container-compose@0.5.1565", "perry-hir@0.5.1565", "perry-parser@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry-transform@0.5.1565", "tungstenite@0.24.0"], "dependencies": ["thiserror-impl@1.0.69"]}, -{"package": "thiserror@2.0.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["av-scenechange@0.14.1", "bson@3.1.0", "fast_image_resize@6.1.0", "gstreamer@0.25.3", "hickory-net@0.26.1", "hickory-proto@0.26.1", "hickory-resolver@0.26.1", "inkwell@0.9.0", "jni@0.22.4", "lopdf@0.39.0", "mongodb@3.8.2", "quinn-proto@0.11.15", "quinn@0.11.9", "rav1e@0.8.1", "redox_users@0.5.2", "rsqlite-vfs@0.1.1", "simple_asn1@0.6.4", "sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "tungstenite@0.29.0", "webview2-com-sys@0.39.1"], "dependencies": ["thiserror-impl@2.0.18"]}, -{"package": "thread_local@1.1.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tracing-subscriber@0.3.23"], "dependencies": ["cfg-if@1.0.4"]}, -{"package": "tiff@0.11.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "deflate", "fax", "jpeg", "lzw"], "parents": ["image@0.25.10"], "dependencies": ["fax@0.2.7", "flate2@1.1.10", "half@2.7.1", "quick-error@2.0.1", "weezl@0.1.12", "zune-jpeg@0.5.15"]}, -{"package": "time-core@0.1.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["time-macros@0.2.32", "time@0.3.55"], "dependencies": []}, -{"package": "time-macros@0.2.32", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["formatting", "parsing", "serde"], "parents": ["time@0.3.55"], "dependencies": ["num-conv@0.2.2", "time-core@0.1.9"]}, -{"package": "time@0.3.55", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "formatting", "macros", "parsing", "serde", "serde-human-readable", "std", "wasm-bindgen"], "parents": ["bson@3.1.0", "lopdf@0.39.0", "perry-ext-node-forge@0.5.1565", "printpdf@0.10.1", "simple_asn1@0.6.4", "zip@8.6.0"], "dependencies": ["deranged@0.5.8", "js-sys@0.3.99", "num-conv@0.2.2", "powerfmt@0.2.0", "serde_core@1.0.229", "time-core@0.1.9", "time-macros@0.2.32"]}, -{"package": "timezone_provider@0.2.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["std", "tzif"], "parents": ["perry-runtime@0.5.1565", "temporal_rs@0.2.6"], "dependencies": ["combine@4.6.7", "jiff-tzdb@0.1.6", "tinystr@0.8.4", "tzif@0.4.1", "zerotrie@0.2.5", "zerovec@0.11.8"]}, -{"package": "tiny-keccak@2.0.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "shake"], "parents": ["const-random-macro@0.1.16"], "dependencies": ["crunchy@0.2.4"]}, -{"package": "tiny_http@0.12.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-ui-geisterhand@0.5.1565"], "dependencies": ["ascii@1.1.0", "chunked_transfer@1.5.0", "httpdate@1.0.3", "log@0.4.34"]}, -{"package": "tinystr@0.8.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "zerovec"], "parents": ["icu_calendar@2.3.0", "icu_datetime@2.3.0", "icu_locale@2.2.0", "icu_locale_core@2.3.0", "icu_locale_fallback@2.3.0", "temporal_rs@0.2.6", "timezone_provider@0.2.6"], "dependencies": ["displaydoc@0.2.6", "serde_core@1.0.229", "zerovec@0.11.8"]}, -{"package": "tinyvec@1.11.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "rustc_1_57", "std", "tinyvec_macros"], "parents": ["allsorts-azul@0.16.5", "hickory-net@0.26.1", "hickory-proto@0.26.1", "quinn-proto@0.11.15", "unicode-normalization@0.1.25"], "dependencies": ["tinyvec_macros@0.1.1"]}, -{"package": "tinyvec_macros@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tinyvec@1.11.0"], "dependencies": []}, -{"package": "tls_codec@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["derive", "std", "tls_codec_derive"], "parents": ["x509-cert@0.3.0"], "dependencies": ["tls_codec_derive@0.4.2", "zeroize@1.8.2"]}, -{"package": "tls_codec_derive@0.4.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["tls_codec@0.4.2"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "tokio-cron-scheduler@0.15.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["chrono-tz@0.10.4", "chrono@0.4.45", "croner@3.0.1", "num-derive@0.4.2", "num-traits@0.2.19", "tokio@1.53.1", "tracing@0.1.44", "uuid@1.26.0"]}, -{"package": "tokio-macros@2.7.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tokio@1.53.1"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "tokio-rustls@0.26.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["aws_lc_rs", "default", "logging", "ring", "tls12"], "parents": ["hyper-rustls@0.27.9", "lettre@0.11.23", "mongodb@3.8.2", "perry-ext-http@0.5.1565", "perry-ext-net@0.5.1565", "perry-stdlib@0.5.1565", "reqwest@0.12.28", "tokio-tungstenite@0.29.0"], "dependencies": ["rustls@0.23.43", "tokio@1.53.1"]}, -{"package": "tokio-stream@0.1.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "fs", "time"], "parents": ["sqlx-core@0.9.0"], "dependencies": ["futures-core@0.3.34", "pin-project-lite@0.2.17", "tokio@1.53.1"]}, -{"package": "tokio-tungstenite@0.29.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["__rustls-tls", "connect", "default", "handshake", "rustls", "rustls-pki-types", "rustls-tls-webpki-roots", "stream", "tokio-rustls", "webpki-roots"], "parents": ["perry-ext-fastify@0.5.1565", "perry-ext-http@0.5.1565", "perry-ext-ws@0.5.1565", "perry-stdlib@0.5.1565", "perry@0.5.1565"], "dependencies": ["futures-util@0.3.34", "log@0.4.34", "rustls-pki-types@1.14.1", "rustls@0.23.43", "tokio-rustls@0.26.4", "tokio@1.53.1", "tungstenite@0.29.0", "webpki-roots@0.26.11"]}, -{"package": "tokio-util@0.7.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["codec", "compat", "default", "futures-io", "futures-util", "io", "rt"], "parents": ["combine@4.6.7", "h2@0.4.19", "mongodb@3.8.2", "redis@1.6.0"], "dependencies": ["bytes@1.12.1", "futures-core@0.3.34", "futures-io@0.3.34", "futures-sink@0.3.34", "futures-util@0.3.34", "pin-project-lite@0.2.17", "tokio@1.53.1"]}, -{"package": "tokio@1.53.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["bytes", "default", "fs", "full", "io-std", "io-util", "libc", "macros", "mio", "net", "parking_lot", "process", "rt", "rt-multi-thread", "signal", "signal-hook-registry", "socket2", "sync", "time", "tokio-macros", "tracing", "windows-sys"], "parents": ["combine@4.6.7", "h2@0.4.19", "hickory-net@0.26.1", "hickory-resolver@0.26.1", "hyper-rustls@0.27.9", "hyper-util@0.1.20", "hyper@1.11.1", "ksni@0.3.6", "lettre@0.11.23", "mongodb@3.8.2", "perry-container-compose@0.5.1565", "perry-ext-axios@0.5.1565", "perry-ext-fastify@0.5.1565", "perry-ext-fetch@0.5.1565", "perry-ext-http@0.5.1565", "perry-ext-ioredis@0.5.1565", "perry-ext-mongodb@0.5.1565", "perry-ext-mysql2@0.5.1565", "perry-ext-net@0.5.1565", "perry-ext-nodemailer@0.5.1565", "perry-ext-pg@0.5.1565", "perry-ext-ws@0.5.1565", "perry-stdlib@0.5.1565", "perry-ui-gtk4@0.5.1565", "perry@0.5.1565", "quinn@0.11.9", "redis@1.6.0", "reqwest@0.12.28", "sqlx-core@0.9.0", "sqlx-macros-core@0.9.0", "tokio-cron-scheduler@0.15.1", "tokio-rustls@0.26.4", "tokio-stream@0.1.18", "tokio-tungstenite@0.29.0", "tokio-util@0.7.18", "tower@0.5.3", "zbus@5.16.0"], "dependencies": ["bytes@1.12.1", "libc@0.2.189", "mio@1.2.1", "parking_lot@0.12.5", "pin-project-lite@0.2.17", "signal-hook-registry@1.4.8", "socket2@0.6.5", "tokio-macros@2.7.0", "tracing@0.1.44", "windows-sys@0.61.2"]}, -{"package": "toml@1.1.4+spec-1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "display", "parse", "serde", "std"], "parents": ["perry-runtime@0.5.1565", "perry@0.5.1565", "system-deps@7.0.8", "winresource@0.1.31"], "dependencies": ["indexmap@2.14.1", "serde_core@1.0.229", "serde_spanned@1.1.1", "toml_datetime@1.1.1+spec-1.1.0", "toml_parser@1.1.3+spec-1.1.0", "toml_writer@1.1.2+spec-1.1.0", "winnow@1.0.3"]}, -{"package": "toml_datetime@1.1.1+spec-1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "serde", "std"], "parents": ["toml@1.1.4+spec-1.1.0", "toml_edit@0.25.12+spec-1.1.0"], "dependencies": ["serde_core@1.0.229"]}, -{"package": "toml_edit@0.25.12+spec-1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["parse"], "parents": ["proc-macro-crate@3.5.0"], "dependencies": ["indexmap@2.14.1", "toml_datetime@1.1.1+spec-1.1.0", "toml_parser@1.1.3+spec-1.1.0", "winnow@1.0.3"]}, -{"package": "toml_parser@1.1.3+spec-1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["toml@1.1.4+spec-1.1.0", "toml_edit@0.25.12+spec-1.1.0"], "dependencies": ["winnow@1.0.3"]}, -{"package": "toml_writer@1.1.2+spec-1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "std"], "parents": ["toml@1.1.4+spec-1.1.0"], "dependencies": []}, -{"package": "tower-http@0.6.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["follow-redirect", "futures-util", "tower"], "parents": ["reqwest@0.12.28"], "dependencies": ["bitflags@2.12.1", "bytes@1.12.1", "futures-util@0.3.34", "http-body@1.0.1", "http@1.4.1", "pin-project-lite@0.2.17", "tower-layer@0.3.3", "tower-service@0.3.3", "tower@0.5.3", "url@2.5.8"]}, -{"package": "tower-layer@0.3.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tower-http@0.6.11", "tower@0.5.3"], "dependencies": []}, -{"package": "tower-service@0.3.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["hyper-rustls@0.27.9", "hyper-util@0.1.20", "reqwest@0.12.28", "tower-http@0.6.11", "tower@0.5.3"], "dependencies": []}, -{"package": "tower@0.5.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["futures-core", "futures-util", "pin-project-lite", "retry", "sync_wrapper", "timeout", "tokio", "util"], "parents": ["reqwest@0.12.28", "tower-http@0.6.11"], "dependencies": ["futures-core@0.3.34", "futures-util@0.3.34", "pin-project-lite@0.2.17", "sync_wrapper@1.0.2", "tokio@1.53.1", "tower-layer@0.3.3", "tower-service@0.3.3"]}, -{"package": "tracing-attributes@0.1.31", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tracing@0.1.44"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "tracing-core@0.1.36", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "once_cell", "std"], "parents": ["tracing-log@0.2.0", "tracing-subscriber@0.3.23", "tracing@0.1.44"], "dependencies": ["once_cell@1.21.4", "valuable@0.1.1"]}, -{"package": "tracing-log@0.2.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["log-tracer", "std"], "parents": ["tracing-subscriber@0.3.23"], "dependencies": ["log@0.4.34", "once_cell@1.21.4", "tracing-core@0.1.36"]}, -{"package": "tracing-subscriber@0.3.23", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "ansi", "default", "env-filter", "fmt", "matchers", "nu-ansi-term", "once_cell", "registry", "sharded-slab", "smallvec", "std", "thread_local", "tracing", "tracing-log"], "parents": ["perry-container-compose@0.5.1565"], "dependencies": ["matchers@0.2.0", "nu-ansi-term@0.50.3", "once_cell@1.21.4", "regex-automata@0.4.18", "sharded-slab@0.1.7", "smallvec@1.15.1", "thread_local@1.1.9", "tracing-core@0.1.36", "tracing-log@0.2.0", "tracing@0.1.44"]}, -{"package": "tracing@0.1.44", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["attributes", "default", "log", "std", "tracing-attributes"], "parents": ["h2@0.4.19", "hickory-net@0.26.1", "hickory-proto@0.26.1", "hickory-resolver@0.26.1", "hyper-util@0.1.20", "perry-container-compose@0.5.1565", "quinn-proto@0.11.15", "quinn-udp@0.5.14", "quinn@0.11.9", "sqlx-core@0.9.0", "sqlx-mysql@0.9.0", "sqlx-postgres@0.9.0", "sqlx-sqlite@0.9.0", "swc_bundler@37.0.0", "swc_common@18.0.1", "swc_ecma_codegen@21.0.0", "swc_ecma_loader@18.0.0", "swc_ecma_parser@29.0.2", "swc_ecma_parser@32.0.0", "swc_ecma_transforms_base@32.0.0", "swc_ecma_transforms_optimization@34.0.0", "swc_ecma_utils@25.0.0", "swc_ecma_visit@19.0.0", "swc_graph_analyzer@14.0.2", "tokio-cron-scheduler@0.15.1", "tokio@1.53.1", "tracing-subscriber@0.3.23", "zbus@5.16.0"], "dependencies": ["log@0.4.34", "pin-project-lite@0.2.17", "tracing-attributes@0.1.31", "tracing-core@0.1.36"]}, -{"package": "trait-variant@0.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["mpris-server@0.10.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "triomphe@0.1.15", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "serde", "stable_deref_trait", "std"], "parents": ["hstr@3.0.6"], "dependencies": ["serde@1.0.229", "stable_deref_trait@1.2.1"]}, -{"package": "try-lock@0.2.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["want@0.3.1"], "dependencies": []}, -{"package": "ttf-parser@0.25.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["apple-layout", "default", "glyph-names", "opentype-layout", "std", "variable-fonts"], "parents": ["lopdf@0.39.0"], "dependencies": []}, -{"package": "tungstenite@0.24.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["__rustls-tls", "data-encoding", "default", "handshake", "http", "httparse", "rustls", "rustls-pki-types", "rustls-tls-webpki-roots", "sha1", "webpki-roots"], "parents": ["perry-ui-android@0.5.1565"], "dependencies": ["byteorder@1.5.0", "bytes@1.12.1", "data-encoding@2.11.0", "http@1.4.1", "httparse@1.10.1", "log@0.4.34", "rand@0.8.7", "rustls-pki-types@1.14.1", "rustls@0.23.43", "sha1@0.10.6", "thiserror@1.0.69", "utf-8@0.7.6", "webpki-roots@0.26.11"]}, -{"package": "tungstenite@0.29.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["__rustls-tls", "data-encoding", "handshake", "http", "httparse", "rustls", "rustls-pki-types", "sha1"], "parents": ["tokio-tungstenite@0.29.0"], "dependencies": ["bytes@1.12.1", "data-encoding@2.11.0", "http@1.4.1", "httparse@1.10.1", "log@0.4.34", "rand@0.9.4", "rustls-pki-types@1.14.1", "rustls@0.23.43", "sha1@0.10.6", "thiserror@2.0.18"]}, -{"package": "typed-builder-macro@0.22.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["typed-builder@0.22.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "typed-builder@0.22.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["mongodb@3.8.2"], "dependencies": ["typed-builder-macro@0.22.0"]}, -{"package": "typed-path@0.12.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["zip@8.6.0"], "dependencies": []}, -{"package": "typenum@1.20.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["const-generics"], "parents": ["crypto-common@0.1.7", "generic-array@0.14.7", "hybrid-array@0.4.12"], "dependencies": []}, -{"package": "tzif@0.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["timezone_provider@0.2.6"], "dependencies": ["combine@4.6.7"]}, -{"package": "ucd-trie@0.1.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["allsorts-azul@0.16.5"], "dependencies": []}, -{"package": "uds_windows@1.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zbus@5.16.0"], "dependencies": ["memoffset@0.9.1", "tempfile@3.27.0", "windows-sys@0.61.2"]}, -{"package": "unarray@0.1.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["proptest@1.11.0"], "dependencies": []}, -{"package": "unicase@2.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["mime_guess@2.0.5"], "dependencies": []}, -{"package": "unicode-bidi@0.3.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "hardcoded-data", "std"], "parents": ["stringprep@0.1.5"], "dependencies": []}, -{"package": "unicode-canonical-combining-class@1.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["allsorts-azul@0.16.5"], "dependencies": []}, -{"package": "unicode-general-category@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["allsorts-azul@0.16.5"], "dependencies": []}, -{"package": "unicode-id-start@1.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["swc_ecma_ast@19.0.0", "swc_sourcemap@9.3.4"], "dependencies": []}, -{"package": "unicode-ident@1.0.24", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["proc-macro2@1.0.106", "syn@1.0.109", "syn@2.0.117", "syn@3.0.3", "wasm-bindgen-shared@0.2.122"], "dependencies": []}, -{"package": "unicode-joining-type@1.0.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["allsorts-azul@0.16.5"], "dependencies": []}, -{"package": "unicode-normalization@0.1.25", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["perry-runtime@0.5.1565", "stringprep@0.1.5"], "dependencies": ["tinyvec@1.11.0"]}, -{"package": "unicode-properties@0.1.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "emoji", "general-category"], "parents": ["stringprep@0.1.5"], "dependencies": []}, -{"package": "unicode-segmentation@1.13.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["convert_case@0.10.0", "perry-runtime@0.5.1565"], "dependencies": []}, -{"package": "unicode-width@0.1.14", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["cjk", "default"], "parents": ["miette@7.6.0"], "dependencies": []}, -{"package": "unicode-width@0.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["cjk", "default"], "parents": ["console@0.15.11", "console@0.16.4", "getopts@0.2.24", "indicatif@0.18.6", "swc_common@18.0.1"], "dependencies": []}, -{"package": "unicode-xid@0.2.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["derive_more-impl@2.1.1", "wit-parser@0.244.0"], "dependencies": []}, -{"package": "unit-prefix@0.5.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["indicatif@0.18.6"], "dependencies": []}, -{"package": "universal-hash@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["poly1305@0.8.0", "polyval@0.6.2"], "dependencies": ["crypto-common@0.1.7", "subtle@2.6.1"]}, -{"package": "universal-hash@0.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["polyval@0.7.3"], "dependencies": ["crypto-common@0.2.2", "ctutils@0.4.2"]}, -{"package": "unsafe-libyaml@0.2.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-runtime@0.5.1565", "serde_yaml@0.9.34+deprecated"], "dependencies": []}, -{"package": "untrusted@0.9.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ring@0.17.14", "rustls-webpki@0.103.13"], "dependencies": []}, -{"package": "url@2.5.8", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["hickory-net@0.26.1", "hickory-proto@0.26.1", "lettre@0.11.23", "perry-runtime@0.5.1565", "perry-validation@0.5.1565", "perry@0.5.1565", "redis@1.6.0", "reqwest@0.12.28", "sqlx-core@0.9.0", "sqlx-macros-core@0.9.0", "sqlx-sqlite@0.9.0", "swc_common@18.0.1", "swc_sourcemap@9.3.4", "tower-http@0.6.11", "validator@0.21.0"], "dependencies": ["form_urlencoded@1.2.2", "idna@1.1.0", "percent-encoding@2.3.2", "serde@1.0.229"]}, -{"package": "utf-8@0.7.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["tendril@0.5.0", "tungstenite@0.24.0"], "dependencies": []}, -{"package": "utf8_iter@1.0.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["icu_collections@2.2.0", "idna@1.1.0"], "dependencies": []}, -{"package": "utf8parse@0.2.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["anstream@1.0.0", "anstyle-parse@1.0.0"], "dependencies": []}, -{"package": "uuid@1.26.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["atomic", "default", "js", "md5", "rng", "serde", "sha1", "std", "v1", "v3", "v4", "v5", "v7"], "parents": ["bson@3.1.0", "debugid@0.8.0", "moka@0.12.15", "mongodb@3.8.2", "perry-ext-nodemailer@0.5.1565", "perry-ext-uuid@0.5.1565", "perry-stdlib@0.5.1565", "tokio-cron-scheduler@0.15.1", "zbus@5.16.0"], "dependencies": ["atomic@0.6.1", "getrandom@0.4.2", "js-sys@0.3.99", "md-5@0.10.6", "serde_core@1.0.229", "sha1_smol@1.0.1", "wasm-bindgen@0.2.122"]}, -{"package": "v_frame@0.3.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["av-scenechange@0.14.1", "av1-grain@0.2.5", "rav1e@0.8.1"], "dependencies": ["aligned-vec@0.6.4", "num-traits@0.2.19", "wasm-bindgen@0.2.122"]}, -{"package": "validator@0.21.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-validation@0.5.1565"], "dependencies": ["idna@1.1.0", "regex@1.13.1", "serde@1.0.229", "serde_derive@1.0.229", "serde_json@1.0.151", "url@2.5.8"]}, -{"package": "valuable@0.1.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "std"], "parents": ["tracing-core@0.1.36"], "dependencies": []}, -{"package": "vcpkg@0.2.15", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["libsqlite3-sys@0.37.0"], "dependencies": []}, -{"package": "version-compare@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["system-deps@7.0.8"], "dependencies": []}, -{"package": "version_check@0.9.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["ahash@0.8.12", "generic-array@0.14.7", "proc-macro-error-attr@1.0.4", "proc-macro-error@1.0.4", "slotmap@1.1.1", "smartstring@1.0.1", "winresource@0.1.31"], "dependencies": []}, -{"package": "vsimd@0.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "detect", "std"], "parents": ["base64-simd@0.8.0"], "dependencies": []}, -{"package": "wait-timeout@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["rusty-fork@0.3.1"], "dependencies": ["libc@0.2.189"]}, -{"package": "walkdir@2.5.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["jni@0.22.4", "notify@6.1.1", "perry-doc-tests@0.5.1565", "perry@0.5.1565"], "dependencies": ["same-file@1.0.6", "winapi-util@0.1.11"]}, -{"package": "want@0.3.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["hyper@1.11.1"], "dependencies": ["try-lock@0.2.5"]}, -{"package": "wasi@0.11.1+wasi-snapshot-preview1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["getrandom@0.2.17", "mio@0.8.11", "mio@1.2.1", "quanta@0.12.6"], "dependencies": []}, -{"package": "wasip2@1.0.3+wasi-0.2.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["getrandom@0.3.4", "getrandom@0.4.2"], "dependencies": ["wit-bindgen@0.57.1"]}, -{"package": "wasip3@0.4.0+wasi-0.3.0-rc-2026-01-06", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["getrandom@0.4.2"], "dependencies": ["wit-bindgen@0.51.0"]}, -{"package": "wasm-bindgen-futures@0.4.72", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["printpdf@0.10.1", "reqwest@0.12.28"], "dependencies": ["js-sys@0.3.99", "wasm-bindgen@0.2.122"]}, -{"package": "wasm-bindgen-macro-support@0.2.122", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wasm-bindgen-macro@0.2.122"], "dependencies": ["bumpalo@3.20.3", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117", "wasm-bindgen-shared@0.2.122"]}, -{"package": "wasm-bindgen-macro@0.2.122", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wasm-bindgen@0.2.122"], "dependencies": ["quote@1.0.45", "wasm-bindgen-macro-support@0.2.122"]}, -{"package": "wasm-bindgen-shared@0.2.122", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wasm-bindgen-macro-support@0.2.122", "wasm-bindgen@0.2.122"], "dependencies": ["unicode-ident@1.0.24"]}, -{"package": "wasm-bindgen@0.2.122", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "serde", "std"], "parents": ["chrono@0.4.45", "getrandom@0.2.17", "getrandom@0.3.4", "getrandom@0.4.2", "iana-time-zone@0.1.65", "js-sys@0.3.99", "printpdf@0.10.1", "rav1e@0.8.1", "reqwest@0.12.28", "rust_decimal@1.43.0", "sqlite-wasm-rs@0.5.5", "uuid@1.26.0", "v_frame@0.3.9", "wasm-bindgen-futures@0.4.72", "web-sys@0.3.99", "web-time@1.1.0"], "dependencies": ["cfg-if@1.0.4", "once_cell@1.21.4", "rustversion@1.0.22", "serde@1.0.229", "wasm-bindgen-macro@0.2.122", "wasm-bindgen-shared@0.2.122"]}, -{"package": "wasm-encoder@0.244.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["component-model", "std", "wasmparser"], "parents": ["wasm-metadata@0.244.0", "wit-component@0.244.0"], "dependencies": ["leb128fmt@0.1.0", "wasmparser@0.244.0"]}, -{"package": "wasm-encoder@0.258.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["component-model", "default", "std"], "parents": ["perry-codegen-wasm@0.5.1565"], "dependencies": ["leb128fmt@0.1.0", "wasmparser@0.258.0"]}, -{"package": "wasm-metadata@0.244.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wit-bindgen-rust@0.51.0", "wit-component@0.244.0"], "dependencies": ["anyhow@1.0.104", "indexmap@2.14.1", "wasm-encoder@0.244.0", "wasmparser@0.244.0"]}, -{"package": "wasmi@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["simd"], "parents": ["perry-wasm-host@0.5.1565"], "dependencies": ["spin@0.9.8", "wasmi_collections@1.1.0", "wasmi_core@1.1.0", "wasmi_ir@1.1.0", "wasmparser@0.239.0"]}, -{"package": "wasmi_collections@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wasmi@1.1.0"], "dependencies": []}, -{"package": "wasmi_core@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["simd"], "parents": ["wasmi@1.1.0", "wasmi_ir@1.1.0"], "dependencies": ["libm@0.2.16"]}, -{"package": "wasmi_ir@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["simd"], "parents": ["wasmi@1.1.0"], "dependencies": ["wasmi_core@1.1.0"]}, -{"package": "wasmparser@0.239.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["features", "simd", "validate"], "parents": ["wasmi@1.1.0"], "dependencies": ["bitflags@2.12.1"]}, -{"package": "wasmparser@0.244.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["component-model", "features", "hash-collections", "simd", "std", "validate"], "parents": ["wasm-encoder@0.244.0", "wasm-metadata@0.244.0", "wit-component@0.244.0", "wit-parser@0.244.0"], "dependencies": ["bitflags@2.12.1", "hashbrown@0.15.5", "indexmap@2.14.1", "semver@1.0.28"]}, -{"package": "wasmparser@0.258.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["component-model", "simd", "std"], "parents": ["wasm-encoder@0.258.0"], "dependencies": ["bitflags@2.12.1", "indexmap@2.14.1", "semver@1.0.28"]}, -{"package": "web-sys@0.3.99", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["AbortController", "AbortSignal", "Blob", "BlobPropertyBag", "EventTarget", "File", "FormData", "Headers", "Performance", "ReadableStream", "Request", "RequestCache", "RequestCredentials", "RequestInit", "RequestMode", "Response", "ServiceWorkerGlobalScope", "Window", "WorkerGlobalScope", "default", "std"], "parents": ["quanta@0.12.6", "reqwest@0.12.28"], "dependencies": ["js-sys@0.3.99", "wasm-bindgen@0.2.122"]}, -{"package": "web-time@1.1.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["governor@0.10.4", "indicatif@0.18.6", "quinn-proto@0.11.15", "quinn@0.11.9", "rustls-pki-types@1.14.1"], "dependencies": ["js-sys@0.3.99", "wasm-bindgen@0.2.122"]}, -{"package": "web_atoms@0.2.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["markup5ever@0.39.0"], "dependencies": ["phf@0.13.1", "phf_codegen@0.13.1", "string_cache@0.9.0", "string_cache_codegen@0.6.1"]}, -{"package": "webkit6-sys@0.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["webkit6@0.4.0"], "dependencies": ["gdk4-sys@0.9.6", "gio-sys@0.20.10", "glib-sys@0.20.10", "gobject-sys@0.20.10", "gtk4-sys@0.9.6", "javascriptcore6-sys@0.4.0", "libc@0.2.189", "soup3-sys@0.7.0", "system-deps@7.0.8"]}, -{"package": "webkit6@0.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ui-gtk4@0.5.1565"], "dependencies": ["gdk4@0.9.6", "gio@0.20.12", "glib@0.20.12", "gtk4@0.9.7", "javascriptcore6@0.4.0", "libc@0.2.189", "soup3@0.7.0", "webkit6-sys@0.4.0"]}, -{"package": "webpki-roots@0.26.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["tokio-tungstenite@0.29.0", "tungstenite@0.24.0"], "dependencies": ["webpki-roots@1.0.9"]}, -{"package": "webpki-roots@1.0.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["hyper-rustls@0.27.9", "lettre@0.11.23", "mongodb@3.8.2", "perry-ext-http@0.5.1565", "reqwest@0.12.28", "webpki-roots@0.26.11"], "dependencies": ["rustls-pki-types@1.14.1"]}, -{"package": "webview2-com-macros@0.8.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["webview2-com@0.39.1"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "webview2-com-sys@0.39.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["webview2-com@0.39.1"], "dependencies": ["thiserror@2.0.18", "windows-core@0.62.2", "windows@0.62.2"]}, -{"package": "webview2-com@0.39.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": [], "parents": ["perry-ui-windows@0.5.1565"], "dependencies": ["webview2-com-macros@0.8.1", "webview2-com-sys@0.39.1", "windows-core@0.62.2", "windows@0.62.2"]}, -{"package": "weezl@0.1.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["gif@0.14.2", "lopdf@0.39.0", "printpdf@0.10.1", "tiff@0.11.3"], "dependencies": []}, -{"package": "which@8.0.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "real-sys"], "parents": ["perry-container-compose@0.5.1565"], "dependencies": ["libc@0.2.189"]}, -{"package": "whoami@2.1.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["sqlx-postgres@0.9.0"], "dependencies": []}, -{"package": "widestring@1.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["ipconfig@0.3.4"], "dependencies": []}, -{"package": "winapi-i686-pc-windows-gnu@0.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["winapi@0.3.9"], "dependencies": []}, -{"package": "winapi-util@0.1.11", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["same-file@1.0.6", "termcolor@1.4.1", "walkdir@2.5.0"], "dependencies": ["windows-sys@0.61.2"]}, -{"package": "winapi-x86_64-pc-windows-gnu@0.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["winapi@0.3.9"], "dependencies": []}, -{"package": "winapi@0.3.9", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["consoleapi", "errhandlingapi", "fileapi", "handleapi", "minwinbase", "minwindef", "processenv", "processthreadsapi", "profileapi", "synchapi", "winbase", "winerror", "winnt"], "parents": ["atty@0.2.14", "fslock@0.2.1", "quanta@0.12.6"], "dependencies": ["winapi-i686-pc-windows-gnu@0.4.0", "winapi-x86_64-pc-windows-gnu@0.4.0"]}, -{"package": "windows-collections@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["windows@0.62.2"], "dependencies": ["windows-core@0.62.2"]}, -{"package": "windows-collections@0.3.2 [vendored]", "source": "third_party/windows-winui/windows-collections/Cargo.toml", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["windows-reactor@0.0.0 [vendored]"], "dependencies": ["windows-core@0.62.2 [vendored]"]}, -{"package": "windows-core@0.62.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "std"], "parents": ["iana-time-zone@0.1.65", "perry-ui-windows@0.5.1565", "webview2-com-sys@0.39.1", "webview2-com@0.39.1", "windows-collections@0.3.2", "windows-future@0.3.2", "windows-numerics@0.3.1", "windows@0.62.2"], "dependencies": ["windows-implement@0.60.2", "windows-interface@0.59.3", "windows-link@0.2.1", "windows-result@0.4.1", "windows-strings@0.5.1"]}, -{"package": "windows-core@0.62.2 [vendored]", "source": "third_party/windows-winui/windows-core/Cargo.toml", "name_is_direct_dependency": true, "lock_features": ["default", "proc-macros", "std"], "parents": ["windows-collections@0.3.2 [vendored]", "windows-future@0.3.2 [vendored]", "windows-numerics@0.3.1 [vendored]", "windows-reactor@0.0.0 [vendored]", "windows-reference@0.1.0 [vendored]", "windows-time@0.1.0 [vendored]"], "dependencies": ["windows-implement@0.60.2 [vendored]", "windows-interface@0.59.3 [vendored]", "windows-link@0.2.1 [vendored]", "windows-result@0.4.1 [vendored]", "windows-strings@0.5.1 [vendored]"]}, -{"package": "windows-future@0.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["windows@0.62.2"], "dependencies": ["windows-core@0.62.2", "windows-link@0.2.1", "windows-threading@0.2.1"]}, -{"package": "windows-future@0.3.2 [vendored]", "source": "third_party/windows-winui/windows-future/Cargo.toml", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["windows-reactor@0.0.0 [vendored]"], "dependencies": ["windows-core@0.62.2 [vendored]", "windows-link@0.2.1 [vendored]", "windows-threading@0.2.1 [vendored]"]}, -{"package": "windows-implement@0.60.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-core@0.62.2"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "windows-implement@0.60.2 [vendored]", "source": "third_party/windows-winui/windows-implement/Cargo.toml", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-core@0.62.2 [vendored]"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "windows-interface@0.59.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-core@0.62.2"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "windows-interface@0.59.3 [vendored]", "source": "third_party/windows-winui/windows-interface/Cargo.toml", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-core@0.62.2 [vendored]"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "windows-link@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["chrono@0.4.45", "hostname@0.4.2", "jni@0.22.4", "libloading@0.8.9", "parking_lot_core@0.9.12", "windows-core@0.62.2", "windows-future@0.3.2", "windows-numerics@0.3.1", "windows-registry@0.6.1", "windows-result@0.4.1", "windows-strings@0.5.1", "windows-sys@0.61.2", "windows-targets@0.53.5", "windows-threading@0.2.1"], "dependencies": []}, -{"package": "windows-link@0.2.1 [vendored]", "source": "third_party/windows-winui/windows-link/Cargo.toml", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-core@0.62.2 [vendored]", "windows-future@0.3.2 [vendored]", "windows-numerics@0.3.1 [vendored]", "windows-result@0.4.1 [vendored]", "windows-strings@0.5.1 [vendored]", "windows-threading@0.2.1 [vendored]"], "dependencies": []}, -{"package": "windows-numerics@0.3.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["windows@0.62.2"], "dependencies": ["windows-core@0.62.2", "windows-link@0.2.1"]}, -{"package": "windows-numerics@0.3.1 [vendored]", "source": "third_party/windows-winui/windows-numerics/Cargo.toml", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["windows-reactor@0.0.0 [vendored]"], "dependencies": ["windows-core@0.62.2 [vendored]", "windows-link@0.2.1 [vendored]"]}, -{"package": "windows-reactor@0.0.0 [vendored]", "source": "third_party/windows-winui/windows-reactor/Cargo.toml", "name_is_direct_dependency": true, "lock_features": ["default", "diagnostics"], "parents": ["perry-ui-windows-winui@0.5.1565"], "dependencies": ["rustc-hash@2.1.2", "windows-collections@0.3.2 [vendored]", "windows-core@0.62.2 [vendored]", "windows-future@0.3.2 [vendored]", "windows-numerics@0.3.1 [vendored]", "windows-reference@0.1.0 [vendored]", "windows-threading@0.2.1 [vendored]", "windows-time@0.1.0 [vendored]"]}, -{"package": "windows-reference@0.1.0 [vendored]", "source": "third_party/windows-winui/windows-reference/Cargo.toml", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["windows-reactor@0.0.0 [vendored]"], "dependencies": ["windows-core@0.62.2 [vendored]", "windows-time@0.1.0 [vendored]"]}, -{"package": "windows-registry@0.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["ipconfig@0.3.4"], "dependencies": ["windows-link@0.2.1", "windows-result@0.4.1", "windows-strings@0.5.1"]}, -{"package": "windows-result@0.4.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["ipconfig@0.3.4", "windows-core@0.62.2", "windows-registry@0.6.1"], "dependencies": ["windows-link@0.2.1"]}, -{"package": "windows-result@0.4.1 [vendored]", "source": "third_party/windows-winui/windows-result/Cargo.toml", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["windows-core@0.62.2 [vendored]"], "dependencies": ["windows-link@0.2.1 [vendored]"]}, -{"package": "windows-strings@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["windows-core@0.62.2", "windows-registry@0.6.1"], "dependencies": ["windows-link@0.2.1"]}, -{"package": "windows-strings@0.5.1 [vendored]", "source": "third_party/windows-winui/windows-strings/Cargo.toml", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["windows-core@0.62.2 [vendored]"], "dependencies": ["windows-link@0.2.1 [vendored]"]}, -{"package": "windows-sys@0.48.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["Win32", "Win32_Foundation", "Win32_Networking", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage", "Win32_Storage_FileSystem", "Win32_System", "Win32_System_IO", "Win32_System_Pipes", "Win32_System_Threading", "Win32_System_WindowsProgramming", "default"], "parents": ["mio@0.8.11", "notify@6.1.1"], "dependencies": ["windows-targets@0.48.5"]}, -{"package": "windows-sys@0.52.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["Win32", "Win32_Foundation", "Win32_System", "Win32_System_Threading", "default"], "parents": ["ring@0.17.14"], "dependencies": ["windows-targets@0.52.6"]}, -{"package": "windows-sys@0.59.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["Win32", "Win32_Foundation", "Win32_Networking", "Win32_Networking_WinSock", "Win32_Storage", "Win32_Storage_FileSystem", "Win32_System", "Win32_System_Console", "Win32_UI", "Win32_UI_Input", "Win32_UI_Input_KeyboardAndMouse", "default"], "parents": ["console@0.15.11", "gio-sys@0.20.10"], "dependencies": ["windows-targets@0.52.6"]}, -{"package": "windows-sys@0.60.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["Win32", "Win32_Foundation", "Win32_Networking", "Win32_Networking_WinSock", "Win32_System", "Win32_System_IO", "default"], "parents": ["quinn-udp@0.5.14"], "dependencies": ["windows-targets@0.53.5"]}, -{"package": "windows-sys@0.61.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["Wdk", "Wdk_Foundation", "Wdk_Storage", "Wdk_Storage_FileSystem", "Wdk_System", "Wdk_System_IO", "Win32", "Win32_Foundation", "Win32_Globalization", "Win32_NetworkManagement", "Win32_NetworkManagement_IpHelper", "Win32_NetworkManagement_Ndis", "Win32_Networking", "Win32_Networking_WinSock", "Win32_Security", "Win32_Security_Authentication", "Win32_Security_Authentication_Identity", "Win32_Security_Authorization", "Win32_Security_Credentials", "Win32_Security_Cryptography", "Win32_Storage", "Win32_Storage_FileSystem", "Win32_System", "Win32_System_Com", "Win32_System_Console", "Win32_System_Diagnostics", "Win32_System_Diagnostics_Debug", "Win32_System_IO", "Win32_System_LibraryLoader", "Win32_System_Memory", "Win32_System_Pipes", "Win32_System_Registry", "Win32_System_SystemInformation", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_WindowsProgramming", "Win32_UI", "Win32_UI_Input", "Win32_UI_Input_KeyboardAndMouse", "Win32_UI_Shell", "default"], "parents": ["anstyle-query@1.1.5", "anstyle-wincon@3.0.11", "async-io@2.6.0", "async-signal@0.2.14", "console@0.16.4", "dirs-sys@0.5.0", "errno@0.3.14", "etcetera@0.11.0", "gio-sys@0.22.0", "ipconfig@0.3.4", "is-terminal@0.4.17", "mio@1.2.1", "nu-ansi-term@0.50.3", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry@0.5.1565", "polling@3.11.0", "rustix@1.1.4", "schannel@0.1.29", "socket2@0.6.5", "stacker@0.1.25", "tempfile@3.27.0", "tokio@1.53.1", "uds_windows@1.2.1", "winapi-util@0.1.11", "zbus@5.16.0"], "dependencies": ["windows-link@0.2.1"]}, -{"package": "windows-targets@0.48.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-sys@0.48.0"], "dependencies": ["windows_aarch64_gnullvm@0.48.5", "windows_aarch64_msvc@0.48.5", "windows_i686_gnu@0.48.5", "windows_i686_msvc@0.48.5", "windows_x86_64_gnu@0.48.5", "windows_x86_64_gnullvm@0.48.5", "windows_x86_64_msvc@0.48.5"]}, -{"package": "windows-targets@0.52.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-sys@0.52.0", "windows-sys@0.59.0"], "dependencies": ["windows_aarch64_gnullvm@0.52.6", "windows_aarch64_msvc@0.52.6", "windows_i686_gnu@0.52.6", "windows_i686_gnullvm@0.52.6", "windows_i686_msvc@0.52.6", "windows_x86_64_gnu@0.52.6", "windows_x86_64_gnullvm@0.52.6", "windows_x86_64_msvc@0.52.6"]}, -{"package": "windows-targets@0.53.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-sys@0.60.2"], "dependencies": ["windows-link@0.2.1", "windows_aarch64_gnullvm@0.53.1", "windows_aarch64_msvc@0.53.1", "windows_i686_gnu@0.53.1", "windows_i686_gnullvm@0.53.1", "windows_i686_msvc@0.53.1", "windows_x86_64_gnu@0.53.1", "windows_x86_64_gnullvm@0.53.1", "windows_x86_64_msvc@0.53.1"]}, -{"package": "windows-threading@0.2.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-future@0.3.2"], "dependencies": ["windows-link@0.2.1"]}, -{"package": "windows-threading@0.2.1 [vendored]", "source": "third_party/windows-winui/windows-threading/Cargo.toml", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["windows-future@0.3.2 [vendored]", "windows-reactor@0.0.0 [vendored]"], "dependencies": ["windows-link@0.2.1 [vendored]"]}, -{"package": "windows-time@0.1.0 [vendored]", "source": "third_party/windows-winui/windows-time/Cargo.toml", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["windows-reactor@0.0.0 [vendored]", "windows-reference@0.1.0 [vendored]"], "dependencies": ["windows-core@0.62.2 [vendored]"]}, -{"package": "windows@0.35.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["Devices", "Devices_Geolocation", "Foundation", "Foundation_Collections", "UI", "UI_Xaml", "UI_Xaml_Controls", "UI_Xaml_Controls_Maps", "UI_Xaml_Hosting", "Win32", "Win32_Foundation", "Win32_System", "Win32_System_WinRT", "Win32_System_WinRT_Xaml", "Win32_UI", "Win32_UI_WindowsAndMessaging", "default"], "parents": ["perry-ui-windows@0.5.1565"], "dependencies": ["windows_aarch64_msvc@0.35.0", "windows_i686_gnu@0.35.0", "windows_i686_msvc@0.35.0", "windows_x86_64_gnu@0.35.0", "windows_x86_64_msvc@0.35.0"]}, -{"package": "windows@0.62.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["Data", "Data_Pdf", "Foundation", "Media", "Media_Core", "Media_Playback", "Storage", "Storage_Streams", "Win32", "Win32_Foundation", "Win32_Globalization", "Win32_Graphics", "Win32_Graphics_Gdi", "Win32_Graphics_GdiPlus", "Win32_Media", "Win32_Media_Audio", "Win32_Networking", "Win32_Networking_WinHttp", "Win32_Storage", "Win32_Storage_Xps", "Win32_System", "Win32_System_Com", "Win32_System_Com_StructuredStorage", "Win32_System_DataExchange", "Win32_System_LibraryLoader", "Win32_System_Memory", "Win32_System_Ole", "Win32_System_Registry", "Win32_System_SystemInformation", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_Variant", "Win32_System_WinRT", "Win32_UI", "Win32_UI_Controls", "Win32_UI_HiDpi", "Win32_UI_Input", "Win32_UI_Input_KeyboardAndMouse", "Win32_UI_Shell", "Win32_UI_Shell_Common", "Win32_UI_WindowsAndMessaging", "default", "std"], "parents": ["perry-ui-windows-winui@0.5.1565", "perry-ui-windows@0.5.1565", "webview2-com-sys@0.39.1", "webview2-com@0.39.1"], "dependencies": ["windows-collections@0.3.2", "windows-core@0.62.2", "windows-future@0.3.2", "windows-numerics@0.3.1"]}, -{"package": "windows_aarch64_gnullvm@0.48.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.48.5"], "dependencies": []}, -{"package": "windows_aarch64_gnullvm@0.52.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.52.6"], "dependencies": []}, -{"package": "windows_aarch64_gnullvm@0.53.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.53.5"], "dependencies": []}, -{"package": "windows_aarch64_msvc@0.35.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows@0.35.0"], "dependencies": []}, -{"package": "windows_aarch64_msvc@0.48.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.48.5"], "dependencies": []}, -{"package": "windows_aarch64_msvc@0.52.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.52.6"], "dependencies": []}, -{"package": "windows_aarch64_msvc@0.53.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.53.5"], "dependencies": []}, -{"package": "windows_i686_gnu@0.35.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows@0.35.0"], "dependencies": []}, -{"package": "windows_i686_gnu@0.48.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.48.5"], "dependencies": []}, -{"package": "windows_i686_gnu@0.52.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.52.6"], "dependencies": []}, -{"package": "windows_i686_gnu@0.53.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.53.5"], "dependencies": []}, -{"package": "windows_i686_gnullvm@0.52.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.52.6"], "dependencies": []}, -{"package": "windows_i686_gnullvm@0.53.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.53.5"], "dependencies": []}, -{"package": "windows_i686_msvc@0.35.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows@0.35.0"], "dependencies": []}, -{"package": "windows_i686_msvc@0.48.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.48.5"], "dependencies": []}, -{"package": "windows_i686_msvc@0.52.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.52.6"], "dependencies": []}, -{"package": "windows_i686_msvc@0.53.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.53.5"], "dependencies": []}, -{"package": "windows_x86_64_gnu@0.35.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows@0.35.0"], "dependencies": []}, -{"package": "windows_x86_64_gnu@0.48.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.48.5"], "dependencies": []}, -{"package": "windows_x86_64_gnu@0.52.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.52.6"], "dependencies": []}, -{"package": "windows_x86_64_gnu@0.53.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.53.5"], "dependencies": []}, -{"package": "windows_x86_64_gnullvm@0.48.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.48.5"], "dependencies": []}, -{"package": "windows_x86_64_gnullvm@0.52.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.52.6"], "dependencies": []}, -{"package": "windows_x86_64_gnullvm@0.53.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.53.5"], "dependencies": []}, -{"package": "windows_x86_64_msvc@0.35.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows@0.35.0"], "dependencies": []}, -{"package": "windows_x86_64_msvc@0.48.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.48.5"], "dependencies": []}, -{"package": "windows_x86_64_msvc@0.52.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.52.6"], "dependencies": []}, -{"package": "windows_x86_64_msvc@0.53.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["windows-targets@0.53.5"], "dependencies": []}, -{"package": "winnow@0.7.15", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "std"], "parents": ["cron@0.17.0"], "dependencies": ["memchr@2.8.1"]}, -{"package": "winnow@1.0.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "ascii", "binary", "default", "parser", "std"], "parents": ["toml@1.1.4+spec-1.1.0", "toml_edit@0.25.12+spec-1.1.0", "toml_parser@1.1.3+spec-1.1.0", "zbus@5.16.0", "zbus_names@4.3.2", "zvariant@5.12.0", "zvariant_utils@3.4.0"], "dependencies": ["memchr@2.8.1"]}, -{"package": "winresource@0.1.31", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "toml"], "parents": ["perry@0.5.1565"], "dependencies": ["toml@1.1.4+spec-1.1.0", "version_check@0.9.5"]}, -{"package": "wit-bindgen-core@0.51.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wit-bindgen-rust-macro@0.51.0", "wit-bindgen-rust@0.51.0"], "dependencies": ["anyhow@1.0.104", "heck@0.5.0", "wit-parser@0.244.0"]}, -{"package": "wit-bindgen-rust-macro@0.51.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["async"], "parents": ["wit-bindgen@0.51.0"], "dependencies": ["anyhow@1.0.104", "prettyplease@0.2.37", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117", "wit-bindgen-core@0.51.0", "wit-bindgen-rust@0.51.0"]}, -{"package": "wit-bindgen-rust@0.51.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wit-bindgen-rust-macro@0.51.0"], "dependencies": ["anyhow@1.0.104", "heck@0.5.0", "indexmap@2.14.1", "prettyplease@0.2.37", "syn@2.0.117", "wasm-metadata@0.244.0", "wit-bindgen-core@0.51.0", "wit-component@0.244.0"]}, -{"package": "wit-bindgen@0.51.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["async", "std"], "parents": ["wasip3@0.4.0+wasi-0.3.0-rc-2026-01-06"], "dependencies": ["wit-bindgen-rust-macro@0.51.0"]}, -{"package": "wit-bindgen@0.57.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wasip2@1.0.3+wasi-0.2.9"], "dependencies": []}, -{"package": "wit-component@0.244.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["wit-bindgen-rust@0.51.0"], "dependencies": ["anyhow@1.0.104", "bitflags@2.12.1", "indexmap@2.14.1", "log@0.4.34", "serde@1.0.229", "serde_derive@1.0.229", "serde_json@1.0.151", "wasm-encoder@0.244.0", "wasm-metadata@0.244.0", "wasmparser@0.244.0", "wit-parser@0.244.0"]}, -{"package": "wit-parser@0.244.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["decoding", "default", "serde", "serde_json"], "parents": ["wit-bindgen-core@0.51.0", "wit-component@0.244.0"], "dependencies": ["anyhow@1.0.104", "id-arena@2.3.0", "indexmap@2.14.1", "log@0.4.34", "semver@1.0.28", "serde@1.0.229", "serde_derive@1.0.229", "serde_json@1.0.151", "unicode-xid@0.2.6", "wasmparser@0.244.0"]}, -{"package": "writeable@0.6.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "either"], "parents": ["fixed_decimal@0.7.2", "icu_datetime@2.3.0", "icu_decimal@2.3.0", "icu_locale_core@2.3.0", "icu_pattern@0.5.0", "icu_provider@2.3.1", "perry-runtime@0.5.1565", "potential_utf@0.1.5", "temporal_rs@0.2.6"], "dependencies": ["either@1.16.0"]}, -{"package": "wyz@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["bitvec@1.0.1"], "dependencies": ["tap@1.0.1"]}, -{"package": "x25519-dalek@2.0.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["alloc", "default", "precomputed-tables", "static_secrets", "zeroize"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["curve25519-dalek@4.1.3", "rand_core@0.6.4", "serde@1.0.229", "zeroize@1.8.2"]}, -{"package": "x448@0.14.0-pre.12", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["default", "getrandom", "static_secrets"], "parents": ["perry-stdlib@0.5.1565"], "dependencies": ["ed448-goldilocks@0.14.0-pre.15", "zeroize@1.8.2"]}, -{"package": "x509-cert@0.3.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["builder", "default", "hazmat", "pem", "signature", "std"], "parents": ["perry-ext-http@0.5.1565", "perry-ext-node-forge@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565"], "dependencies": ["const-oid@0.10.2", "der@0.8.1", "sha1@0.11.0", "signature@3.0.0", "spki@0.8.0", "tls_codec@0.4.2"]}, -{"package": "xattr@1.6.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "unsupported"], "parents": ["tar@0.4.46"], "dependencies": ["libc@0.2.189", "rustix@1.1.4"]}, -{"package": "xxhash-rust@0.8.18", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["xxh3", "xxh64"], "parents": ["perry-runtime@0.5.1565", "redis@1.6.0"], "dependencies": []}, -{"package": "y4m@0.8.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["av-scenechange@0.14.1"], "dependencies": []}, -{"package": "yasna@0.5.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "std"], "parents": ["p12@0.6.3"], "dependencies": []}, -{"package": "yoke-derive@0.8.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["yoke@0.8.3"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117", "synstructure@0.13.2"]}, -{"package": "yoke@0.8.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "derive", "zerofrom"], "parents": ["icu_collections@2.2.0", "icu_provider@2.3.1", "zerotrie@0.2.5", "zerovec@0.11.8"], "dependencies": ["stable_deref_trait@1.2.1", "yoke-derive@0.8.2", "zerofrom@0.1.8"]}, -{"package": "zbus@5.16.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["async-executor", "async-fs", "async-io", "async-lock", "async-process", "async-task", "blocking", "blocking-api", "default", "tokio"], "parents": ["ksni@0.3.6", "mpris-server@0.10.0"], "dependencies": ["async-broadcast@0.7.2", "async-executor@1.14.0", "async-io@2.6.0", "async-lock@3.4.2", "async-process@2.5.0", "async-recursion@1.1.1", "async-task@4.7.1", "async-trait@0.1.92", "blocking@1.6.2", "enumflags2@0.7.12", "event-listener@5.4.1", "futures-core@0.3.34", "futures-lite@2.6.1", "hex@0.4.3", "libc@0.2.189", "ordered-stream@0.2.0", "rustix@1.1.4", "serde@1.0.229", "serde_repr@0.1.20", "tokio@1.53.1", "tracing@0.1.44", "uds_windows@1.2.1", "uuid@1.26.0", "windows-sys@0.61.2", "winnow@1.0.3", "zbus_macros@5.16.0", "zbus_names@4.3.2", "zvariant@5.12.0"]}, -{"package": "zbus_macros@5.16.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["blocking-api", "default"], "parents": ["zbus@5.16.0"], "dependencies": ["proc-macro-crate@3.5.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117", "zbus_names@4.3.2", "zvariant@5.12.0", "zvariant_utils@3.4.0"]}, -{"package": "zbus_names@4.3.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zbus@5.16.0", "zbus_macros@5.16.0"], "dependencies": ["serde@1.0.229", "winnow@1.0.3", "zvariant@5.12.0"]}, -{"package": "zerocopy-derive@0.8.50", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zerocopy@0.8.50"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "zerocopy@0.8.50", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["derive", "simd", "zerocopy-derive"], "parents": ["ahash@0.8.12", "half@2.7.1", "ppv-lite86@0.2.21", "sha3-utils@0.5.0"], "dependencies": ["zerocopy-derive@0.8.50"]}, -{"package": "zerofrom-derive@0.1.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zerofrom@0.1.8"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117", "synstructure@0.13.2"]}, -{"package": "zerofrom@0.1.8", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "derive"], "parents": ["icu_collections@2.2.0", "icu_provider@2.3.1", "yoke@0.8.3", "zerotrie@0.2.5", "zerovec@0.11.8"], "dependencies": ["zerofrom-derive@0.1.7"]}, -{"package": "zeroize@1.8.2", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "derive", "zeroize_derive"], "parents": ["aws-lc-rs@1.17.0", "bcrypt@0.19.3", "block-buffer@0.12.0", "chacha20poly1305@0.10.1", "cipher@0.4.4", "crypto-bigint@0.5.5", "crypto-bigint@0.7.5", "curve25519-dalek@4.1.3", "der@0.7.10", "der@0.8.1", "dialoguer@0.11.0", "dialoguer@0.12.0", "digest@0.11.3", "ed25519-dalek@2.2.0", "elliptic-curve@0.13.8", "elliptic-curve@0.14.0", "generic-array@0.14.7", "hybrid-array@0.4.12", "jsonwebtoken@11.0.0", "num-bigint-dig@0.8.6", "rsa@0.10.0-rc.18", "rsa@0.9.10", "rustls-pki-types@1.14.1", "rustls@0.23.43", "sec1@0.7.3", "sec1@0.8.1", "tls_codec@0.4.2", "x25519-dalek@2.0.1", "x448@0.14.0-pre.12", "zip@8.6.0"], "dependencies": ["zeroize_derive@1.4.3"]}, -{"package": "zeroize_derive@1.4.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zeroize@1.8.2"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117"]}, -{"package": "zerotrie@0.2.5", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "default", "yoke", "zerofrom"], "parents": ["icu_properties@2.2.0", "icu_provider@2.3.1", "icu_time@2.3.0", "timezone_provider@0.2.6"], "dependencies": ["displaydoc@0.2.6", "yoke@0.8.3", "zerofrom@0.1.8", "zerovec@0.11.8"]}, -{"package": "zerovec-derive@0.11.6", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["zerovec@0.11.8"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "syn@3.0.3"]}, -{"package": "zerovec@0.11.8", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["alloc", "derive", "yoke"], "parents": ["icu_calendar@2.3.0", "icu_collections@2.2.0", "icu_datetime@2.3.0", "icu_decimal@2.3.0", "icu_locale@2.2.0", "icu_locale_core@2.3.0", "icu_locale_fallback@2.3.0", "icu_normalizer@2.2.0", "icu_pattern@0.5.0", "icu_plurals@2.3.0", "icu_properties@2.2.0", "icu_provider@2.3.1", "icu_time@2.3.0", "potential_utf@0.1.5", "timezone_provider@0.2.6", "tinystr@0.8.4", "zerotrie@0.2.5"], "dependencies": ["serde@1.0.229", "yoke@0.8.3", "zerofrom@0.1.8", "zerovec-derive@0.11.6"]}, -{"package": "zip@8.6.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["_bzip2_any", "_deflate-any", "aes-crypto", "bzip2", "default", "deflate", "deflate-flate2", "deflate-flate2-zlib-rs", "deflate-zopfli", "deflate64", "getrandom", "lzma", "ppmd", "time", "xz", "zstd"], "parents": ["perry@0.5.1565"], "dependencies": ["aes@0.9.1", "bzip2@0.6.1", "constant_time_eq@0.4.2", "crc32fast@1.5.0", "deflate64@0.1.12", "flate2@1.1.10", "getrandom@0.4.2", "hmac@0.13.0", "indexmap@2.14.1", "lzma-rust2@0.16.4", "memchr@2.8.1", "pbkdf2@0.13.0", "ppmd-rust@1.4.0", "sha1@0.11.0", "time@0.3.55", "typed-path@0.12.3", "zeroize@1.8.2", "zopfli@0.8.3", "zstd@0.13.3"]}, -{"package": "zlib-rs@0.6.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["rust-allocator", "std"], "parents": ["flate2@1.1.10"], "dependencies": []}, -{"package": "zmij@1.0.21", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": [], "parents": ["serde_json@1.0.151"], "dependencies": []}, -{"package": "zopfli@0.8.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "gzip", "std", "zlib"], "parents": ["zip@8.6.0"], "dependencies": ["bumpalo@3.20.3", "crc32fast@1.5.0", "log@0.4.34", "simd-adler32@0.3.9"]}, -{"package": "zstd-safe@7.2.4", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["arrays", "legacy", "std", "zdict_builder"], "parents": ["zstd@0.13.3"], "dependencies": ["zstd-sys@2.0.16+zstd.1.5.7"]}, -{"package": "zstd-sys@2.0.16+zstd.1.5.7", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["legacy", "std", "zdict_builder"], "parents": ["zstd-safe@7.2.4"], "dependencies": ["cc@1.4.4", "pkg-config@0.3.33"]}, -{"package": "zstd@0.13.3", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": true, "lock_features": ["arrays", "default", "legacy", "zdict_builder"], "parents": ["perry-ext-zlib@0.5.1565", "perry-runtime@0.5.1565", "perry-stdlib@0.5.1565", "perry@0.5.1565", "zip@8.6.0"], "dependencies": ["zstd-safe@7.2.4"]}, -{"package": "zune-core@0.5.1", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["std"], "parents": ["image@0.25.10", "zune-jpeg@0.5.15"], "dependencies": []}, -{"package": "zune-inflate@0.2.54", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["simd-adler32", "zlib"], "parents": ["exr@1.74.0"], "dependencies": ["simd-adler32@0.3.9"]}, -{"package": "zune-jpeg@0.5.15", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "neon", "std", "x86"], "parents": ["image@0.25.10", "tiff@0.11.3"], "dependencies": ["zune-core@0.5.1"]}, -{"package": "zvariant@5.12.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default", "enumflags2"], "parents": ["zbus@5.16.0", "zbus_macros@5.16.0", "zbus_names@4.3.2"], "dependencies": ["endi@1.1.1", "enumflags2@0.7.12", "serde@1.0.229", "winnow@1.0.3", "zvariant_derive@5.12.0", "zvariant_utils@3.4.0"]}, -{"package": "zvariant_derive@5.12.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["zvariant@5.12.0"], "dependencies": ["proc-macro-crate@3.5.0", "proc-macro2@1.0.106", "quote@1.0.45", "syn@2.0.117", "zvariant_utils@3.4.0"]}, -{"package": "zvariant_utils@3.4.0", "source": "registry+https://github.com/rust-lang/crates.io-index", "name_is_direct_dependency": false, "lock_features": ["default"], "parents": ["zbus_macros@5.16.0", "zvariant@5.12.0", "zvariant_derive@5.12.0"], "dependencies": ["proc-macro2@1.0.106", "quote@1.0.45", "serde@1.0.229", "syn@2.0.117", "winnow@1.0.3"]} -], -"other_manifests": [ -{"manifest": "benchmarks/compiler_output/fixtures/native_memory_fixture_project/node_modules/@perry-fixtures/native-memory-fixture/native/Cargo.toml", "vendored": false, "external_declarations": []}, -{"manifest": "benchmarks/honest_bench/workloads/1_json_pipeline/rust/Cargo.toml", "vendored": false, "external_declarations": [{"name": "serde", "kind": "dependencies", "target": null, "version": "1", "features": ["derive"]}, {"name": "serde_json", "kind": "dependencies", "target": null, "version": "1"}]}, -{"manifest": "benchmarks/honest_bench/workloads/3_image_convolution/rust/Cargo.toml", "vendored": false, "external_declarations": []}, -{"manifest": "benchmarks/json_performance/results/json-depth-scanning/prototypes/depth19/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-depth-scanning/prototypes/depth20/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-depth-scanning/prototypes/depth21/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-depth-scanning/prototypes/depth22/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-depth-scanning/prototypes/depth23/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-depth-scanning/prototypes/depth24/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-escaped-decoding/prototypes/decode13/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-escaped-decoding/prototypes/decode14/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-escaped-decoding/prototypes/decode15/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-escaped-decoding/prototypes/decode17-prototype/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libc", "kind": "dev-dependencies", "target": null, "version": "0.2"}]}, -{"manifest": "benchmarks/json_performance/results/json-string-counting/fused/Cargo.toml", "vendored": false, "external_declarations": []}, -{"manifest": "benchmarks/json_polyglot/Cargo.toml", "vendored": false, "external_declarations": [{"name": "serde", "kind": "dependencies", "target": null, "version": "1", "features": ["derive"]}, {"name": "serde_json", "kind": "dependencies", "target": null, "version": "1"}]}, -{"manifest": "crates/perry-container-compose/fuzz/Cargo.toml", "vendored": false, "external_declarations": [{"name": "libfuzzer-sys", "kind": "dependencies", "target": null, "version": "0.4"}]}, -{"manifest": "experiments/llvm-inprocess-spike/Cargo.toml", "vendored": false, "external_declarations": [{"name": "inkwell", "kind": "dependencies", "target": null, "version": "0.9.0", "features": ["llvm22-1"]}, {"name": "llvm-sys", "kind": "dependencies", "target": null, "version": "221"}]}, -{"manifest": "tests/fixtures/issue_8075_provider_gc/stdlib-provider/Cargo.toml", "vendored": false, "external_declarations": []}, -{"manifest": "tests/fixtures/next-app-route/provider/Cargo.toml", "vendored": false, "external_declarations": []}, -{"manifest": "tests/release/packages/next-app-route/provider/Cargo.toml", "vendored": false, "external_declarations": []}, -{"manifest": "tests/release/packages/next-app-route/provider/runtime/Cargo.toml", "vendored": false, "external_declarations": []}, -{"manifest": "tests/release/packages/next-app-route/provider/stdlib/Cargo.toml", "vendored": false, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-collections/Cargo.toml", "vendored": true, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-core/Cargo.toml", "vendored": true, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-future/Cargo.toml", "vendored": true, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-implement/Cargo.toml", "vendored": true, "external_declarations": [{"name": "proc-macro2", "kind": "dependencies", "target": null, "version": "1.0", "default-features": false}, {"name": "quote", "kind": "dependencies", "target": null, "version": "1.0", "default-features": false}, {"name": "syn", "kind": "dependencies", "target": null, "version": "2.0", "default-features": false, "features": ["parsing", "proc-macro", "printing", "full", "clone-impls"]}]}, -{"manifest": "third_party/windows-winui/windows-interface/Cargo.toml", "vendored": true, "external_declarations": [{"name": "proc-macro2", "kind": "dependencies", "target": null, "version": "1.0", "default-features": false}, {"name": "quote", "kind": "dependencies", "target": null, "version": "1.0", "default-features": false}, {"name": "syn", "kind": "dependencies", "target": null, "version": "2.0", "default-features": false, "features": ["parsing", "proc-macro", "printing", "full", "clone-impls"]}]}, -{"manifest": "third_party/windows-winui/windows-link/Cargo.toml", "vendored": true, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-numerics/Cargo.toml", "vendored": true, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-reactor/Cargo.toml", "vendored": true, "external_declarations": [{"name": "rustc-hash", "kind": "dependencies", "target": null, "version": "2"}]}, -{"manifest": "third_party/windows-winui/windows-reference/Cargo.toml", "vendored": true, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-result/Cargo.toml", "vendored": true, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-strings/Cargo.toml", "vendored": true, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-threading/Cargo.toml", "vendored": true, "external_declarations": []}, -{"manifest": "third_party/windows-winui/windows-time/Cargo.toml", "vendored": true, "external_declarations": []} -] -} diff --git a/docs/audits/rust-dependency-build-graphs-2026-09-14.json b/docs/audits/rust-dependency-build-graphs-2026-09-14.json deleted file mode 100644 index cd657e2e6d4..00000000000 --- a/docs/audits/rust-dependency-build-graphs-2026-09-14.json +++ /dev/null @@ -1,25 +0,0 @@ -{ -"semantics": "Deduplicated external package-version identities from cargo tree normal+build, locked/offline. Graph approximates Cargo builds; no builds or binary/performance measurement.", -"graphs": [ -{"configuration": "CLI default", "target": "x86_64-pc-windows-msvc", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry", "-e", "normal,build", "--target", "x86_64-pc-windows-msvc", "--prefix", "none", "--format", "{p}"], "external_package_versions": 352, "packages": ["adler2 v2.0.1", "aes v0.9.1", "ahash v0.8.12", "aho-corasick v1.1.4", "allocator-api2 v0.2.21", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anstyle-wincon v3.0.11", "anyhow v1.0.104", "ar_archive_writer v0.5.1", "arrayvec v0.7.6", "ast_node v5.0.0", "atomic-waker v1.1.2", "autocfg v1.5.1", "base16ct v0.2.0", "base64 v0.22.1", "base64ct v1.8.3", "better_scoped_tls v1.0.1", "bitflags v2.12.1", "block-buffer v0.10.4", "block-buffer v0.12.0", "bumpalo v3.20.3", "bytes v1.12.1", "bytes-str v0.2.7", "bzip2 v0.6.1", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "chrono v0.4.45", "cipher v0.5.2", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "cmov v0.5.4", "colorchoice v1.0.5", "console v0.16.4", "const-oid v0.10.2", "const-oid v0.9.6", "constant_time_eq v0.4.2", "cpubits v0.1.1", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "crc32fast v1.5.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-deque v0.8.6", "crossbeam-epoch v0.9.20", "crossbeam-utils v0.8.21", "crypto-bigint v0.5.5", "crypto-common v0.1.7", "crypto-common v0.2.2", "ctutils v0.4.2", "curve25519-dalek v4.1.3", "curve25519-dalek-derive v0.1.1", "data-encoding v2.11.0", "deflate64 v0.1.12", "der v0.7.10", "der v0.8.1", "der_derive v0.8.0", "deranged v0.5.8", "dialoguer v0.12.0", "digest v0.10.7", "digest v0.11.3", "dirs v6.0.0", "dirs-sys v0.5.0", "displaydoc v0.2.6", "dotenvy v0.15.7", "ecdsa v0.16.9", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "either v1.16.0", "elliptic-curve v0.13.8", "encode_unicode v1.0.0", "encoding_rs v0.8.35", "env_logger v0.10.2", "equivalent v1.0.2", "fastrand v2.4.1", "ff v0.13.1", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "flate2 v1.1.10", "form_urlencoded v1.2.2", "from_variant v3.0.0", "fslock v0.2.1", "futures-channel v0.3.32", "futures-core v0.3.34", "futures-io v0.3.34", "futures-macro v0.3.34", "futures-sink v0.3.34", "futures-task v0.3.34", "futures-util v0.3.34", "generic-array v0.14.7", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "group v0.13.0", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hex v0.4.3", "hickory-proto v0.26.1", "hkdf v0.12.4", "hmac v0.12.1", "hmac v0.13.0", "hstr v3.0.6", "http v1.4.1", "http-body v1.0.1", "http-body-util v0.1.5", "httparse v1.10.1", "humantime v2.3.0", "hybrid-array v0.4.12", "hyper v1.11.1", "hyper-rustls v0.27.9", "hyper-util v0.1.20", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "indexmap v2.14.1", "indicatif v0.18.6", "inkwell v0.9.0", "inkwell_internals v0.14.0", "inout v0.2.2", "ipnet v2.12.0", "is-macro v0.3.7", "is-terminal v0.4.17", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "jobserver v0.1.34", "jsonwebtoken v11.0.0", "lazy_static v1.5.0", "leb128fmt v0.1.0", "libbz2-rs-sys v0.2.5", "libc v0.2.189", "libm v0.2.16", "litemap v0.8.2", "llvm-sys v221.0.1", "lock_api v0.4.14", "log v0.4.34", "lzma-rust2 v0.16.4", "memchr v2.8.1", "mime v0.3.17", "mime_guess v2.0.5", "miniz_oxide v0.9.1", "mio v1.2.1", "new_debug_unreachable v1.0.6", "notify v6.1.1", "num-bigint v0.4.6", "num-bigint-dig v0.8.6", "num-conv v0.2.2", "num-integer v0.1.46", "num-iter v0.1.45", "num-traits v0.2.19", "num_cpus v1.17.0", "object v0.37.3", "once_cell v1.21.4", "once_cell_polyfill v1.70.2", "option-ext v0.2.0", "p256 v0.13.2", "p384 v0.13.1", "par-core v2.0.0", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "pbkdf2 v0.13.0", "pem v3.0.6", "pem-rfc7468 v0.7.0", "percent-encoding v2.3.2", "perex v0.1.4", "phf v0.11.3", "phf_generator v0.11.3", "phf_macros v0.11.3", "phf_shared v0.11.3", "pin-project-lite v0.2.17", "pkcs1 v0.7.5", "pkcs8 v0.10.2", "pkg-config v0.3.33", "portable-atomic v1.13.1", "potential_utf v0.1.5", "powerfmt v0.2.0", "ppmd-rust v1.4.0", "ppv-lite86 v0.2.21", "primeorder v0.13.6", "proc-macro2 v1.0.106", "psm v0.1.32", "quote v1.0.45", "rand v0.10.2", "rand v0.8.7", "rand v0.9.4", "rand_chacha v0.3.1", "rand_chacha v0.9.0", "rand_core v0.10.1", "rand_core v0.6.4", "rand_core v0.9.5", "rayon v1.12.0", "rayon-core v1.13.0", "regex v1.13.1", "regex-automata v0.4.18", "regex-lite v0.1.9", "regex-syntax v0.8.11", "reqwest v0.12.28", "resolv-conf v0.7.6", "rfc6979 v0.4.0", "ring v0.17.14", "rsa v0.9.10", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "rustc_version v0.4.1", "rustls v0.23.43", "rustls-pki-types v1.14.1", "rustls-webpki v0.103.13", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scoped-tls v1.0.1", "scopeguard v1.2.0", "sec1 v0.7.3", "semver v1.0.28", "seq-macro v0.3.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_spanned v1.1.1", "serde_urlencoded v0.7.1", "sha1 v0.10.6", "sha1 v0.11.0", "sha2 v0.10.9", "sha2 v0.11.0", "shell-words v1.1.1", "shlex v2.0.1", "signature v2.2.0", "simd-adler32 v0.3.9", "simdutf8 v0.1.5", "simple_asn1 v0.6.4", "siphasher v0.3.11", "siphasher v1.0.3", "slab v0.4.12", "slotmap v1.1.1", "smallvec v1.15.1", "smartstring v1.0.1", "socket2 v0.6.5", "spin v0.9.8", "spki v0.7.3", "spki v0.8.0", "stable_deref_trait v1.2.1", "stacker v0.1.25", "static_assertions v1.1.0", "string_enum v1.0.2", "strsim v0.11.1", "subtle v2.6.1", "swc_atoms v9.0.3", "swc_common v18.0.1", "swc_ecma_ast v19.0.0", "swc_ecma_parser v29.0.2", "swc_ecma_parser v32.0.0", "swc_ecma_transforms_base v32.0.0", "swc_ecma_utils v25.0.0", "swc_ecma_visit v19.0.0", "swc_eq_ignore_macros v1.0.1", "swc_macros_common v1.0.1", "swc_visit v2.0.1", "syn v2.0.117", "syn v3.0.3", "sync_wrapper v1.0.2", "synstructure v0.13.2", "taffy v0.13.0", "tar v0.4.46", "tempfile v3.27.0", "termcolor v1.4.1", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "time v0.3.55", "time-core v0.1.9", "time-macros v0.2.32", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tokio v1.53.1", "tokio-macros v2.7.0", "tokio-rustls v0.26.4", "tokio-tungstenite v0.29.0", "toml v1.1.4+spec-1.1.0", "toml_datetime v1.1.1+spec-1.1.0", "toml_parser v1.1.3+spec-1.1.0", "toml_writer v1.1.2+spec-1.1.0", "tower v0.5.3", "tower-http v0.6.11", "tower-layer v0.3.3", "tower-service v0.3.3", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "triomphe v0.1.15", "try-lock v0.2.5", "tungstenite v0.29.0", "typed-path v0.12.3", "typenum v1.20.1", "unicase v2.9.0", "unicode-id-start v1.4.0", "unicode-ident v1.0.24", "unicode-width v0.2.2", "unit-prefix v0.5.2", "untrusted v0.9.0", "url v2.5.8", "utf8_iter v1.0.4", "utf8parse v0.2.2", "version_check v0.9.5", "walkdir v2.5.0", "want v0.3.1", "wasm-encoder v0.258.0", "webpki-roots v0.26.11", "webpki-roots v1.0.9", "winapi v0.3.9", "winapi-util v0.1.11", "windows-link v0.2.1", "windows-sys v0.48.0", "windows-sys v0.61.2", "windows-targets v0.48.5", "windows_x86_64_msvc v0.48.5", "winnow v1.0.3", "winresource v0.1.31", "writeable v0.6.4", "x509-cert v0.3.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zeroize_derive v1.4.3", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zip v8.6.0", "zlib-rs v0.6.4", "zmij v1.0.21", "zopfli v0.8.3", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7"]}, -{"configuration": "CLI dev", "target": "x86_64-pc-windows-msvc", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry", "--no-default-features", "--features", "dev-cli", "-e", "normal,build", "--target", "x86_64-pc-windows-msvc", "--prefix", "none", "--format", "{p}"], "external_package_versions": 350, "packages": ["adler2 v2.0.1", "aes v0.9.1", "ahash v0.8.12", "aho-corasick v1.1.4", "allocator-api2 v0.2.21", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anstyle-wincon v3.0.11", "anyhow v1.0.104", "ar_archive_writer v0.5.1", "arrayvec v0.7.6", "ast_node v5.0.0", "atomic-waker v1.1.2", "autocfg v1.5.1", "base16ct v0.2.0", "base64 v0.22.1", "base64ct v1.8.3", "better_scoped_tls v1.0.1", "bitflags v2.12.1", "block-buffer v0.10.4", "block-buffer v0.12.0", "bumpalo v3.20.3", "bytes v1.12.1", "bytes-str v0.2.7", "bzip2 v0.6.1", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "chrono v0.4.45", "cipher v0.5.2", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "cmov v0.5.4", "colorchoice v1.0.5", "console v0.16.4", "const-oid v0.10.2", "const-oid v0.9.6", "constant_time_eq v0.4.2", "cpubits v0.1.1", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "crc32fast v1.5.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-deque v0.8.6", "crossbeam-epoch v0.9.20", "crossbeam-utils v0.8.21", "crypto-bigint v0.5.5", "crypto-common v0.1.7", "crypto-common v0.2.2", "ctutils v0.4.2", "curve25519-dalek v4.1.3", "curve25519-dalek-derive v0.1.1", "data-encoding v2.11.0", "deflate64 v0.1.12", "der v0.7.10", "der v0.8.1", "der_derive v0.8.0", "deranged v0.5.8", "dialoguer v0.12.0", "digest v0.10.7", "digest v0.11.3", "dirs v6.0.0", "dirs-sys v0.5.0", "displaydoc v0.2.6", "dotenvy v0.15.7", "ecdsa v0.16.9", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "either v1.16.0", "elliptic-curve v0.13.8", "encode_unicode v1.0.0", "encoding_rs v0.8.35", "env_logger v0.10.2", "equivalent v1.0.2", "fastrand v2.4.1", "ff v0.13.1", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "flate2 v1.1.10", "form_urlencoded v1.2.2", "from_variant v3.0.0", "fslock v0.2.1", "futures-channel v0.3.32", "futures-core v0.3.34", "futures-io v0.3.34", "futures-macro v0.3.34", "futures-sink v0.3.34", "futures-task v0.3.34", "futures-util v0.3.34", "generic-array v0.14.7", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "group v0.13.0", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hex v0.4.3", "hickory-proto v0.26.1", "hkdf v0.12.4", "hmac v0.12.1", "hmac v0.13.0", "hstr v3.0.6", "http v1.4.1", "http-body v1.0.1", "http-body-util v0.1.5", "httparse v1.10.1", "humantime v2.3.0", "hybrid-array v0.4.12", "hyper v1.11.1", "hyper-rustls v0.27.9", "hyper-util v0.1.20", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "indexmap v2.14.1", "indicatif v0.18.6", "inkwell v0.9.0", "inkwell_internals v0.14.0", "inout v0.2.2", "ipnet v2.12.0", "is-macro v0.3.7", "is-terminal v0.4.17", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "jobserver v0.1.34", "jsonwebtoken v11.0.0", "lazy_static v1.5.0", "libbz2-rs-sys v0.2.5", "libc v0.2.189", "libm v0.2.16", "litemap v0.8.2", "llvm-sys v221.0.1", "lock_api v0.4.14", "log v0.4.34", "lzma-rust2 v0.16.4", "memchr v2.8.1", "mime v0.3.17", "mime_guess v2.0.5", "miniz_oxide v0.9.1", "mio v1.2.1", "new_debug_unreachable v1.0.6", "notify v6.1.1", "num-bigint v0.4.6", "num-bigint-dig v0.8.6", "num-conv v0.2.2", "num-integer v0.1.46", "num-iter v0.1.45", "num-traits v0.2.19", "num_cpus v1.17.0", "object v0.37.3", "once_cell v1.21.4", "once_cell_polyfill v1.70.2", "option-ext v0.2.0", "p256 v0.13.2", "p384 v0.13.1", "par-core v2.0.0", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "pbkdf2 v0.13.0", "pem v3.0.6", "pem-rfc7468 v0.7.0", "percent-encoding v2.3.2", "perex v0.1.4", "phf v0.11.3", "phf_generator v0.11.3", "phf_macros v0.11.3", "phf_shared v0.11.3", "pin-project-lite v0.2.17", "pkcs1 v0.7.5", "pkcs8 v0.10.2", "pkg-config v0.3.33", "portable-atomic v1.13.1", "potential_utf v0.1.5", "powerfmt v0.2.0", "ppmd-rust v1.4.0", "ppv-lite86 v0.2.21", "primeorder v0.13.6", "proc-macro2 v1.0.106", "psm v0.1.32", "quote v1.0.45", "rand v0.10.2", "rand v0.8.7", "rand v0.9.4", "rand_chacha v0.3.1", "rand_chacha v0.9.0", "rand_core v0.10.1", "rand_core v0.6.4", "rand_core v0.9.5", "rayon v1.12.0", "rayon-core v1.13.0", "regex v1.13.1", "regex-automata v0.4.18", "regex-lite v0.1.9", "regex-syntax v0.8.11", "reqwest v0.12.28", "resolv-conf v0.7.6", "rfc6979 v0.4.0", "ring v0.17.14", "rsa v0.9.10", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "rustc_version v0.4.1", "rustls v0.23.43", "rustls-pki-types v1.14.1", "rustls-webpki v0.103.13", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scoped-tls v1.0.1", "scopeguard v1.2.0", "sec1 v0.7.3", "semver v1.0.28", "seq-macro v0.3.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_spanned v1.1.1", "serde_urlencoded v0.7.1", "sha1 v0.10.6", "sha1 v0.11.0", "sha2 v0.10.9", "sha2 v0.11.0", "shell-words v1.1.1", "shlex v2.0.1", "signature v2.2.0", "simd-adler32 v0.3.9", "simdutf8 v0.1.5", "simple_asn1 v0.6.4", "siphasher v0.3.11", "siphasher v1.0.3", "slab v0.4.12", "slotmap v1.1.1", "smallvec v1.15.1", "smartstring v1.0.1", "socket2 v0.6.5", "spin v0.9.8", "spki v0.7.3", "spki v0.8.0", "stable_deref_trait v1.2.1", "stacker v0.1.25", "static_assertions v1.1.0", "string_enum v1.0.2", "strsim v0.11.1", "subtle v2.6.1", "swc_atoms v9.0.3", "swc_common v18.0.1", "swc_ecma_ast v19.0.0", "swc_ecma_parser v29.0.2", "swc_ecma_parser v32.0.0", "swc_ecma_transforms_base v32.0.0", "swc_ecma_utils v25.0.0", "swc_ecma_visit v19.0.0", "swc_eq_ignore_macros v1.0.1", "swc_macros_common v1.0.1", "swc_visit v2.0.1", "syn v2.0.117", "syn v3.0.3", "sync_wrapper v1.0.2", "synstructure v0.13.2", "taffy v0.13.0", "tar v0.4.46", "tempfile v3.27.0", "termcolor v1.4.1", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "time v0.3.55", "time-core v0.1.9", "time-macros v0.2.32", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tokio v1.53.1", "tokio-macros v2.7.0", "tokio-rustls v0.26.4", "tokio-tungstenite v0.29.0", "toml v1.1.4+spec-1.1.0", "toml_datetime v1.1.1+spec-1.1.0", "toml_parser v1.1.3+spec-1.1.0", "toml_writer v1.1.2+spec-1.1.0", "tower v0.5.3", "tower-http v0.6.11", "tower-layer v0.3.3", "tower-service v0.3.3", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "triomphe v0.1.15", "try-lock v0.2.5", "tungstenite v0.29.0", "typed-path v0.12.3", "typenum v1.20.1", "unicase v2.9.0", "unicode-id-start v1.4.0", "unicode-ident v1.0.24", "unicode-width v0.2.2", "unit-prefix v0.5.2", "untrusted v0.9.0", "url v2.5.8", "utf8_iter v1.0.4", "utf8parse v0.2.2", "version_check v0.9.5", "walkdir v2.5.0", "want v0.3.1", "webpki-roots v0.26.11", "webpki-roots v1.0.9", "winapi v0.3.9", "winapi-util v0.1.11", "windows-link v0.2.1", "windows-sys v0.48.0", "windows-sys v0.61.2", "windows-targets v0.48.5", "windows_x86_64_msvc v0.48.5", "winnow v1.0.3", "winresource v0.1.31", "writeable v0.6.4", "x509-cert v0.3.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zeroize_derive v1.4.3", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zip v8.6.0", "zlib-rs v0.6.4", "zmij v1.0.21", "zopfli v0.8.3", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7"]}, -{"configuration": "Runtime default", "target": "x86_64-pc-windows-msvc", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-runtime", "-e", "normal,build", "--target", "x86_64-pc-windows-msvc", "--prefix", "none", "--format", "{p}"], "external_package_versions": 218, "packages": ["ahash v0.8.12", "allocator-api2 v0.2.21", "anyhow v1.0.104", "ar_archive_writer v0.5.1", "arrayvec v0.7.6", "ast_node v5.0.0", "autocfg v1.5.1", "base64 v0.22.1", "better_scoped_tls v1.0.1", "bitflags v2.12.1", "block-buffer v0.12.0", "bytecount v0.6.9", "bytes v1.12.1", "bytes-str v0.2.7", "calendrical_calculations v0.2.4", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "combine v4.6.7", "const-oid v0.10.2", "core_maths v0.1.1", "cpufeatures v0.3.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-utils v0.8.21", "crypto-common v0.2.2", "cty v0.2.2", "data-encoding v2.11.0", "der v0.8.1", "der_derive v0.8.0", "digest v0.11.3", "dirs v6.0.0", "dirs-sys v0.5.0", "displaydoc v0.2.6", "either v1.16.0", "encoding_rs v0.8.35", "equivalent v1.0.2", "filetime v0.2.29", "find-msvc-tools v0.1.11", "fixed_decimal v0.7.2", "flagset v0.4.7", "form_urlencoded v1.2.2", "from_variant v3.0.0", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hickory-proto v0.26.1", "hostname v0.4.2", "hstr v3.0.6", "hybrid-array v0.4.12", "icu_calendar v2.3.0", "icu_calendar_data v2.3.0", "icu_collections v2.2.0", "icu_datetime v2.3.0", "icu_datetime_data v2.3.0", "icu_decimal v2.3.0", "icu_decimal_data v2.3.0", "icu_locale v2.2.0", "icu_locale_core v2.3.0", "icu_locale_data v2.2.0", "icu_locale_fallback v2.3.0", "icu_locale_fallback_data v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_pattern v0.5.0", "icu_plurals v2.3.0", "icu_plurals_data v2.3.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "icu_time v2.3.0", "icu_time_data v2.3.0", "idna v1.1.0", "idna_adapter v1.2.2", "indexmap v2.14.1", "ipnet v2.12.0", "is-macro v0.3.7", "itoa v1.0.18", "ixdtf v0.6.5", "jiff-tzdb v0.1.6", "jobserver v0.1.34", "lazy_static v1.5.0", "libc v0.2.189", "libm v0.2.16", "libmimalloc-sys v0.1.49", "litemap v0.8.2", "log v0.4.34", "memchr v2.8.1", "miette v7.6.0", "miette-derive v7.6.0", "mimalloc v0.1.52", "minimal-lexical v0.2.1", "new_debug_unreachable v1.0.6", "node-semver v2.2.0", "nom v7.1.3", "notify v6.1.1", "num-bigint v0.4.6", "num-integer v0.1.46", "num-traits v0.2.19", "num_cpus v1.17.0", "object v0.37.3", "once_cell v1.21.4", "option-ext v0.2.0", "par-core v2.0.0", "percent-encoding v2.3.2", "perex v0.1.4", "phf v0.11.3", "phf_generator v0.11.3", "phf_macros v0.11.3", "phf_shared v0.11.3", "pin-project-lite v0.2.17", "pkg-config v0.3.33", "portable-atomic v1.13.1", "potential_utf v0.1.5", "proc-macro2 v1.0.106", "psm v0.1.32", "quote v1.0.45", "rand v0.10.2", "rand v0.8.7", "rand_core v0.10.1", "rand_core v0.6.4", "resolv-conf v0.7.6", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scoped-tls v1.0.1", "seq-macro v0.3.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_spanned v1.1.1", "sha2 v0.11.0", "shlex v2.0.1", "simdutf8 v0.1.5", "siphasher v0.3.11", "siphasher v1.0.3", "slotmap v1.1.1", "smallvec v1.15.1", "smartstring v1.0.1", "socket2 v0.6.5", "spki v0.8.0", "stable_deref_trait v1.2.1", "stacker v0.1.25", "static_assertions v1.1.0", "string_enum v1.0.2", "swc_atoms v9.0.3", "swc_common v18.0.1", "swc_ecma_ast v19.0.0", "swc_ecma_parser v29.0.2", "swc_ecma_parser v32.0.0", "swc_ecma_transforms_base v32.0.0", "swc_ecma_utils v25.0.0", "swc_ecma_visit v19.0.0", "swc_eq_ignore_macros v1.0.1", "swc_macros_common v1.0.1", "swc_visit v2.0.1", "syn v2.0.117", "syn v3.0.3", "synstructure v0.13.2", "taffy v0.13.0", "temporal_rs v0.2.6", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "timezone_provider v0.2.6", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "toml v1.1.4+spec-1.1.0", "toml_datetime v1.1.1+spec-1.1.0", "toml_parser v1.1.3+spec-1.1.0", "toml_writer v1.1.2+spec-1.1.0", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "triomphe v0.1.15", "typenum v1.20.1", "tzif v0.4.1", "unicode-id-start v1.4.0", "unicode-ident v1.0.24", "unicode-normalization v0.1.25", "unicode-segmentation v1.13.3", "unicode-width v0.1.14", "unicode-width v0.2.2", "unsafe-libyaml v0.2.11", "url v2.5.8", "utf8_iter v1.0.4", "version_check v0.9.5", "walkdir v2.5.0", "winapi-util v0.1.11", "windows-link v0.2.1", "windows-sys v0.48.0", "windows-sys v0.61.2", "windows-targets v0.48.5", "windows_x86_64_msvc v0.48.5", "winnow v1.0.3", "writeable v0.6.4", "x509-cert v0.3.0", "xxhash-rust v0.8.18", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7"]}, -{"configuration": "Runtime minimal", "target": "x86_64-pc-windows-msvc", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-runtime", "--no-default-features", "-e", "normal,build", "--target", "x86_64-pc-windows-msvc", "--prefix", "none", "--format", "{p}"], "external_package_versions": 108, "packages": ["ahash v0.8.12", "anyhow v1.0.104", "arrayvec v0.7.6", "base64 v0.22.1", "block-buffer v0.12.0", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "const-oid v0.10.2", "cpufeatures v0.3.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-utils v0.8.21", "crypto-common v0.2.2", "data-encoding v2.11.0", "der v0.8.1", "der_derive v0.8.0", "digest v0.11.3", "displaydoc v0.2.6", "encoding_rs v0.8.35", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "form_urlencoded v1.2.2", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "hickory-proto v0.26.1", "hybrid-array v0.4.12", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "ipnet v2.12.0", "itoa v1.0.18", "lazy_static v1.5.0", "libc v0.2.189", "litemap v0.8.2", "log v0.4.34", "memchr v2.8.1", "notify v6.1.1", "once_cell v1.21.4", "percent-encoding v2.3.2", "pin-project-lite v0.2.17", "portable-atomic v1.13.1", "potential_utf v0.1.5", "proc-macro2 v1.0.106", "quote v1.0.45", "rand v0.10.2", "rand_core v0.10.1", "resolv-conf v0.7.6", "rustc-demangle v0.1.28", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "sha2 v0.11.0", "shlex v2.0.1", "simdutf8 v0.1.5", "slotmap v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "spki v0.8.0", "stable_deref_trait v1.2.1", "syn v2.0.117", "syn v3.0.3", "synstructure v0.13.2", "taffy v0.13.0", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tracing v0.1.44", "tracing-core v0.1.36", "typenum v1.20.1", "unicode-ident v1.0.24", "url v2.5.8", "utf8_iter v1.0.4", "version_check v0.9.5", "walkdir v2.5.0", "winapi-util v0.1.11", "windows-link v0.2.1", "windows-sys v0.48.0", "windows-sys v0.61.2", "windows-targets v0.48.5", "windows_x86_64_msvc v0.48.5", "writeable v0.6.4", "x509-cert v0.3.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21"]}, -{"configuration": "Stdlib default", "target": "x86_64-pc-windows-msvc", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-stdlib", "-e", "normal,build", "--target", "x86_64-pc-windows-msvc", "--prefix", "none", "--format", "{p}"], "external_package_versions": 556, "packages": ["adler2 v2.0.1", "aead v0.5.2", "aes v0.8.4", "aes v0.9.1", "aes-gcm v0.10.3", "aes-kw v0.3.1", "ahash v0.8.12", "aligned v0.4.3", "aligned-vec v0.6.4", "alloc-no-stdlib v2.0.4", "alloc-stdlib v0.2.2", "allocator-api2 v0.2.21", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anstyle-wincon v3.0.11", "anyhow v1.0.104", "arc-swap v1.9.1", "arcstr v1.2.0", "arg_enum_proc_macro v0.3.4", "argon2 v0.5.3", "arrayvec v0.7.6", "as-slice v0.2.1", "async-lock v3.4.2", "async-trait v0.1.92", "atoi v2.0.0", "atomic v0.6.1", "atomic-waker v1.1.2", "autocfg v1.5.1", "av-scenechange v0.14.1", "av1-grain v0.2.5", "avif-serialize v0.8.9", "aws-lc-rs v1.17.0", "aws-lc-sys v0.41.0", "backon v1.6.0", "base16ct v0.2.0", "base16ct v1.0.0", "base64 v0.22.1", "base64 v0.23.1", "base64ct v1.8.3", "bcrypt v0.19.3", "bindgen v0.72.1", "bit_field v0.10.3", "bitflags v2.12.1", "bitstream-io v4.10.0", "bitvec v1.0.1", "blake2 v0.10.6", "block-buffer v0.10.4", "block-buffer v0.12.0", "block-padding v0.3.3", "block-padding v0.4.2", "blowfish v0.10.0", "brotli v8.0.4", "brotli-decompressor v5.0.1", "bson v3.1.0", "built v0.8.1", "bytemuck v1.25.0", "byteorder v1.5.0", "byteorder-lite v0.1.0", "bytes v1.12.1", "cbc v0.1.2", "cbc v0.2.1", "cc v1.4.4", "cexpr v0.6.0", "cfg-if v1.0.4", "chacha20 v0.10.0", "chacha20 v0.9.1", "chacha20poly1305 v0.10.1", "chrono v0.4.45", "chrono-tz v0.10.4", "cipher v0.4.4", "cipher v0.5.2", "clang-sys v1.8.1", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "cmake v0.1.58", "cmov v0.5.4", "color_quant v1.1.0", "colorchoice v1.0.5", "combine v4.6.7", "concurrent-queue v2.5.0", "const-oid v0.10.2", "const-oid v0.9.6", "const-random v0.1.18", "const-random-macro v0.1.16", "convert_case v0.10.0", "cpubits v0.1.1", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "crc v3.4.0", "crc-catalog v2.5.0", "crc32fast v1.5.0", "critical-section v1.2.0", "cron v0.17.0", "croner v3.0.1", "crossbeam-channel v0.5.15", "crossbeam-deque v0.8.6", "crossbeam-epoch v0.9.20", "crossbeam-queue v0.3.12", "crossbeam-utils v0.8.21", "crunchy v0.2.4", "crypto-bigint v0.5.5", "crypto-bigint v0.7.5", "crypto-common v0.1.7", "crypto-common v0.2.2", "cssparser v0.37.0", "cssparser-macros v0.7.0", "ctr v0.9.2", "ctutils v0.4.2", "curve25519-dalek v4.1.3", "curve25519-dalek-derive v0.1.1", "darling v0.20.11", "darling v0.23.0", "darling_core v0.20.11", "darling_core v0.23.0", "darling_macro v0.20.11", "darling_macro v0.23.0", "dashmap v6.2.1", "data-encoding v2.11.0", "der v0.7.10", "der v0.8.1", "der_derive v0.8.0", "deranged v0.5.8", "derive-syn-parse v0.2.0", "derive-where v1.6.1", "derive_builder v0.20.2", "derive_builder_core v0.20.2", "derive_builder_macro v0.20.2", "derive_more v2.1.1", "derive_more-impl v2.1.1", "digest v0.10.7", "digest v0.11.3", "displaydoc v0.2.6", "dotenvy v0.15.7", "dtoa v1.0.11", "dtoa-short v0.3.5", "dunce v1.0.5", "ecb v0.2.1", "ecdsa v0.16.9", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "ed448 v0.5.0", "ed448-goldilocks v0.14.0-pre.15", "ego-tree v0.11.0", "either v1.16.0", "elliptic-curve v0.13.8", "elliptic-curve v0.14.0", "email-encoding v0.4.1", "email_address v0.2.9", "encoding_rs v0.8.35", "equator v0.4.2", "equator-macro v0.4.2", "equivalent v1.0.2", "etcetera v0.11.0", "event-listener v5.4.1", "event-listener-strategy v0.5.4", "exr v1.74.0", "fallible-iterator v0.3.0", "fallible-streaming-iterator v0.1.9", "fastrand v2.4.1", "fax v0.2.7", "fdeflate v0.3.7", "ff v0.13.1", "ff v0.14.0", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "flate2 v1.1.10", "fnv v1.0.7", "foldhash v0.2.0", "form_urlencoded v1.2.2", "fs_extra v1.3.0", "funty v2.0.0", "futures-channel v0.3.32", "futures-core v0.3.34", "futures-intrusive v0.5.0", "futures-io v0.3.34", "futures-macro v0.3.34", "futures-sink v0.3.34", "futures-task v0.3.34", "futures-timer v3.0.4", "futures-util v0.3.34", "generic-array v0.14.7", "getopts v0.2.24", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "ghash v0.5.1", "ghash v0.6.0", "gif v0.14.2", "gimli v0.34.0", "glob v0.3.3", "governor v0.10.4", "group v0.13.0", "group v0.14.0", "h2 v0.4.19", "half v2.7.1", "hash2curve v0.14.0", "hashbrown v0.14.5", "hashbrown v0.16.1", "hashbrown v0.17.1", "hashlink v0.11.1", "heck v0.5.0", "hex v0.4.3", "hickory-net v0.26.1", "hickory-proto v0.26.1", "hickory-resolver v0.26.1", "hkdf v0.12.4", "hkdf v0.13.0", "hmac v0.12.1", "hmac v0.13.0", "hostname v0.4.2", "html5ever v0.39.0", "http v1.4.1", "http-body v1.0.1", "http-body-util v0.1.5", "httparse v1.10.1", "httpdate v1.0.3", "hybrid-array v0.4.12", "hyper v1.11.1", "hyper-rustls v0.27.9", "hyper-util v0.1.20", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "ident_case v1.0.1", "idna v1.1.0", "idna_adapter v1.2.2", "image v0.25.10", "image-webp v0.2.4", "imgref v1.12.3", "indexmap v2.14.1", "inout v0.1.4", "inout v0.2.2", "ipconfig v0.3.4", "ipnet v2.12.0", "is_terminal_polyfill v1.70.2", "itertools v0.12.1", "itertools v0.14.0", "itoa v1.0.18", "jobserver v0.1.34", "jsonwebtoken v11.0.0", "keccak v0.1.6", "keccak v0.2.0", "kem v0.3.0", "lazy_static v1.5.0", "lebe v0.5.3", "lettre v0.11.23", "libc v0.2.189", "libloading v0.8.9", "libm v0.2.16", "libsqlite3-sys v0.37.0", "litemap v0.8.2", "lock_api v0.4.14", "log v0.4.34", "loop9 v0.1.5", "lru v0.18.3", "macro_magic v0.5.1", "macro_magic_core v0.5.1", "macro_magic_core_macros v0.5.1", "macro_magic_macros v0.5.1", "markup5ever v0.39.0", "maybe-rayon v0.1.1", "md-5 v0.10.6", "md-5 v0.11.0", "memchr v2.8.1", "mime v0.3.17", "minimal-lexical v0.2.1", "miniz_oxide v0.8.9", "miniz_oxide v0.9.1", "mio v1.2.1", "ml-kem v0.3.2", "module-lattice v0.2.3", "moka v0.12.15", "mongodb v3.8.2", "mongodb-internal-macros v3.8.2", "moxcms v0.8.1", "nanoid v0.5.0", "new_debug_unreachable v1.0.6", "no_std_io2 v0.9.4", "nom v7.1.3", "nom v8.0.0", "nonzero_ext v0.3.0", "noop_proc_macro v0.3.0", "notify v6.1.1", "num-bigint v0.4.6", "num-bigint v0.5.1", "num-bigint-dig v0.8.6", "num-conv v0.2.2", "num-derive v0.4.2", "num-integer v0.1.46", "num-iter v0.1.45", "num-rational v0.4.2", "num-traits v0.2.19", "once_cell v1.21.4", "once_cell_polyfill v1.70.2", "opaque-debug v0.3.1", "p256 v0.13.2", "p384 v0.13.1", "p521 v0.13.3", "parking v2.2.1", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "password-hash v0.5.0", "paste v1.0.15", "pastey v0.1.1", "pbkdf2 v0.12.2", "pbkdf2 v0.13.0", "pem v3.0.6", "pem-rfc7468 v0.7.0", "pem-rfc7468 v1.0.0", "percent-encoding v2.3.2", "phf v0.11.3", "phf v0.12.1", "phf v0.13.1", "phf_codegen v0.13.1", "phf_generator v0.11.3", "phf_generator v0.13.1", "phf_macros v0.11.3", "phf_macros v0.13.1", "phf_shared v0.11.3", "phf_shared v0.12.1", "phf_shared v0.13.1", "pin-project-lite v0.2.17", "pkcs1 v0.7.5", "pkcs5 v0.7.1", "pkcs8 v0.10.2", "pkcs8 v0.11.0", "pkg-config v0.3.33", "png v0.18.1", "poly1305 v0.8.0", "polyval v0.6.2", "polyval v0.7.3", "portable-atomic v1.13.1", "potential_utf v0.1.5", "powerfmt v0.2.0", "ppv-lite86 v0.2.21", "precomputed-hash v0.1.1", "prefix-trie v0.8.4", "primeorder v0.13.6", "proc-macro2 v1.0.106", "profiling v1.0.18", "profiling-procmacros v1.0.18", "pxfm v0.1.29", "qoi v0.4.1", "quanta v0.12.6", "quick-error v2.0.1", "quote v1.0.45", "quoted_printable v0.5.2", "radium v0.7.0", "rand v0.10.2", "rand v0.8.7", "rand v0.9.4", "rand_chacha v0.3.1", "rand_chacha v0.9.0", "rand_core v0.10.1", "rand_core v0.6.4", "rand_core v0.9.5", "rav1e v0.8.1", "ravif v0.13.0", "raw-cpuid v11.6.0", "rayon v1.12.0", "rayon-core v1.13.0", "redis v1.6.0", "regex v1.13.1", "regex-automata v0.4.18", "regex-syntax v0.8.11", "reqwest v0.12.28", "resolv-conf v0.7.6", "rfc6979 v0.4.0", "rgb v0.8.53", "ring v0.17.14", "rsa v0.9.10", "rusqlite v0.39.0", "rust_decimal v1.43.0", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "rustc_version v0.4.1", "rustc_version_runtime v0.3.0", "rustls v0.23.43", "rustls-native-certs v0.8.4", "rustls-pemfile v2.2.0", "rustls-pki-types v1.14.1", "rustls-webpki v0.103.13", "rustversion v1.0.22", "ryu v1.0.23", "ryu-js v1.0.3", "salsa20 v0.10.2", "same-file v1.0.6", "schannel v0.1.29", "scopeguard v1.2.0", "scraper v0.27.0", "scrypt v0.11.0", "sec1 v0.7.3", "sec1 v0.8.1", "selectors v0.38.0", "semver v1.0.28", "serde v1.0.229", "serde_bytes v0.11.19", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_urlencoded v0.7.1", "serde_with v3.21.0", "serde_with_macros v3.21.0", "servo_arc v0.4.3", "sha1 v0.10.6", "sha1 v0.11.0", "sha1_smol v1.0.1", "sha2 v0.10.9", "sha2 v0.11.0", "sha3 v0.10.9", "sha3 v0.11.0", "sha3 v0.12.0", "sha3-utils v0.5.0", "shake v0.1.0", "shlex v1.3.0", "shlex v2.0.1", "signature v2.2.0", "signature v3.0.0", "simd-adler32 v0.3.9", "simd_helpers v0.1.0", "simdutf8 v0.1.5", "simple_asn1 v0.6.4", "siphasher v1.0.3", "slab v0.4.12", "slotmap v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "spin v0.9.8", "spinning_top v0.3.0", "spki v0.7.3", "spki v0.8.0", "sponge-cursor v0.1.0", "sqlx v0.9.0", "sqlx-core v0.9.0", "sqlx-mysql v0.9.0", "sqlx-postgres v0.9.0", "stable_deref_trait v1.2.1", "string_cache v0.9.0", "string_cache_codegen v0.6.1", "stringprep v0.1.5", "strsim v0.11.1", "strum v0.27.2", "strum_macros v0.27.2", "subtle v2.6.1", "syn v2.0.117", "syn v3.0.3", "sync_wrapper v1.0.2", "synstructure v0.13.2", "taffy v0.13.0", "tagptr v0.2.0", "take_mut v0.2.2", "tap v1.0.1", "tendril v0.5.0", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "tiff v0.11.3", "time v0.3.55", "time-core v0.1.9", "time-macros v0.2.32", "tiny-keccak v2.0.2", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tokio v1.53.1", "tokio-cron-scheduler v0.15.1", "tokio-macros v2.7.0", "tokio-rustls v0.26.4", "tokio-stream v0.1.18", "tokio-tungstenite v0.29.0", "tokio-util v0.7.18", "tower v0.5.3", "tower-http v0.6.11", "tower-layer v0.3.3", "tower-service v0.3.3", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "try-lock v0.2.5", "tungstenite v0.29.0", "typed-builder v0.22.0", "typed-builder-macro v0.22.0", "typenum v1.20.1", "unicode-bidi v0.3.18", "unicode-ident v1.0.24", "unicode-normalization v0.1.25", "unicode-properties v0.1.4", "unicode-segmentation v1.13.3", "unicode-width v0.2.2", "unicode-xid v0.2.6", "universal-hash v0.5.1", "universal-hash v0.6.1", "untrusted v0.9.0", "url v2.5.8", "utf-8 v0.7.6", "utf8_iter v1.0.4", "utf8parse v0.2.2", "uuid v1.26.0", "v_frame v0.3.9", "vcpkg v0.2.15", "version_check v0.9.5", "walkdir v2.5.0", "want v0.3.1", "web-time v1.1.0", "web_atoms v0.2.4", "webpki-roots v0.26.11", "webpki-roots v1.0.9", "weezl v0.1.12", "whoami v2.1.2", "widestring v1.2.1", "winapi v0.3.9", "winapi-util v0.1.11", "windows-link v0.2.1", "windows-registry v0.6.1", "windows-result v0.4.1", "windows-strings v0.5.1", "windows-sys v0.48.0", "windows-sys v0.61.2", "windows-targets v0.48.5", "windows_x86_64_msvc v0.48.5", "winnow v0.7.15", "writeable v0.6.4", "wyz v0.5.1", "x25519-dalek v2.0.1", "x448 v0.14.0-pre.12", "x509-cert v0.3.0", "xxhash-rust v0.8.18", "y4m v0.8.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerocopy-derive v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zeroize_derive v1.4.3", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7", "zune-core v0.5.1", "zune-inflate v0.2.54", "zune-jpeg v0.5.15"]}, -{"configuration": "Stdlib minimal", "target": "x86_64-pc-windows-msvc", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-stdlib", "--no-default-features", "-e", "normal,build", "--target", "x86_64-pc-windows-msvc", "--prefix", "none", "--format", "{p}"], "external_package_versions": 149, "packages": ["ahash v0.8.12", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anstyle-wincon v3.0.11", "anyhow v1.0.104", "arrayvec v0.7.6", "autocfg v1.5.1", "base64 v0.22.1", "block-buffer v0.10.4", "block-buffer v0.12.0", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "chrono v0.4.45", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "colorchoice v1.0.5", "const-oid v0.10.2", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-utils v0.8.21", "crypto-common v0.1.7", "crypto-common v0.2.2", "curve25519-dalek v4.1.3", "curve25519-dalek-derive v0.1.1", "dashmap v6.2.1", "data-encoding v2.11.0", "der v0.8.1", "der_derive v0.8.0", "digest v0.10.7", "digest v0.11.3", "displaydoc v0.2.6", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "encoding_rs v0.8.35", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "form_urlencoded v1.2.2", "generic-array v0.14.7", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "hashbrown v0.14.5", "heck v0.5.0", "hex v0.4.3", "hickory-proto v0.26.1", "hybrid-array v0.4.12", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "ipnet v2.12.0", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "lazy_static v1.5.0", "libc v0.2.189", "litemap v0.8.2", "lock_api v0.4.14", "log v0.4.34", "memchr v2.8.1", "notify v6.1.1", "num-traits v0.2.19", "once_cell v1.21.4", "once_cell_polyfill v1.70.2", "parking_lot_core v0.9.12", "percent-encoding v2.3.2", "pin-project-lite v0.2.17", "portable-atomic v1.13.1", "potential_utf v0.1.5", "proc-macro2 v1.0.106", "quote v1.0.45", "rand v0.10.2", "rand_core v0.10.1", "rand_core v0.6.4", "resolv-conf v0.7.6", "rustc-demangle v0.1.28", "rustc_version v0.4.1", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scopeguard v1.2.0", "semver v1.0.28", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "sha2 v0.10.9", "sha2 v0.11.0", "shlex v2.0.1", "signature v2.2.0", "simdutf8 v0.1.5", "slotmap v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "spki v0.8.0", "stable_deref_trait v1.2.1", "strsim v0.11.1", "subtle v2.6.1", "syn v2.0.117", "syn v3.0.3", "synstructure v0.13.2", "taffy v0.13.0", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tracing v0.1.44", "tracing-core v0.1.36", "typenum v1.20.1", "unicode-ident v1.0.24", "url v2.5.8", "utf8_iter v1.0.4", "utf8parse v0.2.2", "version_check v0.9.5", "walkdir v2.5.0", "winapi-util v0.1.11", "windows-link v0.2.1", "windows-sys v0.48.0", "windows-sys v0.61.2", "windows-targets v0.48.5", "windows_x86_64_msvc v0.48.5", "writeable v0.6.4", "x509-cert v0.3.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21"]}, -{"configuration": "Compose", "target": "x86_64-pc-windows-msvc", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-container-compose", "-e", "normal,build", "--target", "x86_64-pc-windows-msvc", "--prefix", "none", "--format", "{p}"], "external_package_versions": 98, "packages": ["anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anstyle-wincon v3.0.11", "anyhow v1.0.104", "async-trait v0.1.92", "atty v0.2.14", "block-buffer v0.12.0", "bytes v1.12.1", "cfg-if v1.0.4", "chacha20 v0.10.0", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "colorchoice v1.0.5", "console v0.15.11", "console v0.16.4", "const-oid v0.10.2", "cpufeatures v0.3.0", "crossbeam-utils v0.8.21", "crypto-common v0.2.2", "dashmap v6.2.1", "dialoguer v0.11.0", "digest v0.11.3", "dotenvy v0.15.7", "encode_unicode v1.0.0", "equivalent v1.0.2", "fastrand v2.4.1", "getrandom v0.4.2", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hex v0.4.3", "hybrid-array v0.4.12", "indexmap v2.14.1", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "lazy_static v1.5.0", "libc v0.2.189", "lock_api v0.4.14", "log v0.4.34", "matchers v0.2.0", "md-5 v0.11.0", "memchr v2.8.1", "mio v1.2.1", "nu-ansi-term v0.50.3", "once_cell v1.21.4", "once_cell_polyfill v1.70.2", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "pin-project-lite v0.2.17", "proc-macro2 v1.0.106", "quote v1.0.45", "rand v0.10.2", "rand_core v0.10.1", "regex-automata v0.4.18", "regex-syntax v0.8.11", "ryu v1.0.23", "scopeguard v1.2.0", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_yaml v0.9.34+deprecated", "sharded-slab v0.1.7", "shell-words v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "strsim v0.11.1", "syn v2.0.117", "syn v3.0.3", "tempfile v3.27.0", "thiserror v1.0.69", "thiserror-impl v1.0.69", "thread_local v1.1.9", "tokio v1.53.1", "tokio-macros v2.7.0", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "tracing-log v0.2.0", "tracing-subscriber v0.3.23", "typenum v1.20.1", "unicode-ident v1.0.24", "unicode-width v0.2.2", "unsafe-libyaml v0.2.11", "utf8parse v0.2.2", "which v8.0.6", "winapi v0.3.9", "windows-link v0.2.1", "windows-sys v0.59.0", "windows-sys v0.61.2", "windows-targets v0.52.6", "windows_x86_64_msvc v0.52.6", "zeroize v1.8.2", "zmij v1.0.21"]}, -{"configuration": "CLI default", "target": "x86_64-unknown-linux-gnu", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry", "-e", "normal,build", "--target", "x86_64-unknown-linux-gnu", "--prefix", "none", "--format", "{p}"], "external_package_versions": 352, "packages": ["adler2 v2.0.1", "aes v0.9.1", "ahash v0.8.12", "aho-corasick v1.1.4", "allocator-api2 v0.2.21", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "ar_archive_writer v0.5.1", "arrayvec v0.7.6", "ast_node v5.0.0", "atomic-waker v1.1.2", "autocfg v1.5.1", "base16ct v0.2.0", "base64 v0.22.1", "base64ct v1.8.3", "better_scoped_tls v1.0.1", "bitflags v1.3.2", "bitflags v2.12.1", "block-buffer v0.10.4", "block-buffer v0.12.0", "bumpalo v3.20.3", "bytes v1.12.1", "bytes-str v0.2.7", "bzip2 v0.6.1", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "chrono v0.4.45", "cipher v0.5.2", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "cmov v0.5.4", "colorchoice v1.0.5", "console v0.16.4", "const-oid v0.10.2", "const-oid v0.9.6", "constant_time_eq v0.4.2", "cpubits v0.1.1", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "crc32fast v1.5.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-deque v0.8.6", "crossbeam-epoch v0.9.20", "crossbeam-utils v0.8.21", "crypto-bigint v0.5.5", "crypto-common v0.1.7", "crypto-common v0.2.2", "ctutils v0.4.2", "curve25519-dalek v4.1.3", "curve25519-dalek-derive v0.1.1", "data-encoding v2.11.0", "deflate64 v0.1.12", "der v0.7.10", "der v0.8.1", "der_derive v0.8.0", "deranged v0.5.8", "dialoguer v0.12.0", "digest v0.10.7", "digest v0.11.3", "dirs v6.0.0", "dirs-sys v0.5.0", "displaydoc v0.2.6", "dotenvy v0.15.7", "ecdsa v0.16.9", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "either v1.16.0", "elliptic-curve v0.13.8", "encoding_rs v0.8.35", "env_logger v0.10.2", "equivalent v1.0.2", "errno v0.3.14", "fastrand v2.4.1", "ff v0.13.1", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "flate2 v1.1.10", "form_urlencoded v1.2.2", "from_variant v3.0.0", "fslock v0.2.1", "futures-channel v0.3.32", "futures-core v0.3.34", "futures-io v0.3.34", "futures-macro v0.3.34", "futures-sink v0.3.34", "futures-task v0.3.34", "futures-util v0.3.34", "generic-array v0.14.7", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "group v0.13.0", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hex v0.4.3", "hickory-proto v0.26.1", "hkdf v0.12.4", "hmac v0.12.1", "hmac v0.13.0", "hstr v3.0.6", "http v1.4.1", "http-body v1.0.1", "http-body-util v0.1.5", "httparse v1.10.1", "humantime v2.3.0", "hybrid-array v0.4.12", "hyper v1.11.1", "hyper-rustls v0.27.9", "hyper-util v0.1.20", "iana-time-zone v0.1.65", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "indexmap v2.14.1", "indicatif v0.18.6", "inkwell v0.9.0", "inkwell_internals v0.14.0", "inotify v0.9.6", "inotify-sys v0.1.5", "inout v0.2.2", "ipnet v2.12.0", "is-macro v0.3.7", "is-terminal v0.4.17", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "jobserver v0.1.34", "jsonwebtoken v11.0.0", "lazy_static v1.5.0", "leb128fmt v0.1.0", "libbz2-rs-sys v0.2.5", "libc v0.2.189", "libm v0.2.16", "linux-raw-sys v0.12.1", "litemap v0.8.2", "llvm-sys v221.0.1", "lock_api v0.4.14", "log v0.4.34", "lzma-rust2 v0.16.4", "memchr v2.8.1", "mime v0.3.17", "mime_guess v2.0.5", "miniz_oxide v0.9.1", "mio v0.8.11", "mio v1.2.1", "new_debug_unreachable v1.0.6", "notify v6.1.1", "num-bigint v0.4.6", "num-bigint-dig v0.8.6", "num-conv v0.2.2", "num-integer v0.1.46", "num-iter v0.1.45", "num-traits v0.2.19", "num_cpus v1.17.0", "object v0.37.3", "once_cell v1.21.4", "option-ext v0.2.0", "p256 v0.13.2", "p384 v0.13.1", "par-core v2.0.0", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "pbkdf2 v0.13.0", "pem v3.0.6", "pem-rfc7468 v0.7.0", "percent-encoding v2.3.2", "perex v0.1.4", "phf v0.11.3", "phf_generator v0.11.3", "phf_macros v0.11.3", "phf_shared v0.11.3", "pin-project-lite v0.2.17", "pkcs1 v0.7.5", "pkcs8 v0.10.2", "pkg-config v0.3.33", "portable-atomic v1.13.1", "potential_utf v0.1.5", "powerfmt v0.2.0", "ppmd-rust v1.4.0", "ppv-lite86 v0.2.21", "primeorder v0.13.6", "proc-macro2 v1.0.106", "psm v0.1.32", "quote v1.0.45", "rand v0.10.2", "rand v0.8.7", "rand v0.9.4", "rand_chacha v0.3.1", "rand_chacha v0.9.0", "rand_core v0.10.1", "rand_core v0.6.4", "rand_core v0.9.5", "rayon v1.12.0", "rayon-core v1.13.0", "regex v1.13.1", "regex-automata v0.4.18", "regex-lite v0.1.9", "regex-syntax v0.8.11", "reqwest v0.12.28", "resolv-conf v0.7.6", "rfc6979 v0.4.0", "ring v0.17.14", "rsa v0.9.10", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "rustc_version v0.4.1", "rustix v1.1.4", "rustls v0.23.43", "rustls-pki-types v1.14.1", "rustls-webpki v0.103.13", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scoped-tls v1.0.1", "scopeguard v1.2.0", "sec1 v0.7.3", "semver v1.0.28", "seq-macro v0.3.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_spanned v1.1.1", "serde_urlencoded v0.7.1", "sha1 v0.10.6", "sha1 v0.11.0", "sha2 v0.10.9", "sha2 v0.11.0", "shell-words v1.1.1", "shlex v2.0.1", "signal-hook-registry v1.4.8", "signature v2.2.0", "simd-adler32 v0.3.9", "simdutf8 v0.1.5", "simple_asn1 v0.6.4", "siphasher v0.3.11", "siphasher v1.0.3", "slab v0.4.12", "slotmap v1.1.1", "smallvec v1.15.1", "smartstring v1.0.1", "socket2 v0.6.5", "spin v0.9.8", "spki v0.7.3", "spki v0.8.0", "stable_deref_trait v1.2.1", "stacker v0.1.25", "static_assertions v1.1.0", "string_enum v1.0.2", "strsim v0.11.1", "subtle v2.6.1", "swc_atoms v9.0.3", "swc_common v18.0.1", "swc_ecma_ast v19.0.0", "swc_ecma_parser v29.0.2", "swc_ecma_parser v32.0.0", "swc_ecma_transforms_base v32.0.0", "swc_ecma_utils v25.0.0", "swc_ecma_visit v19.0.0", "swc_eq_ignore_macros v1.0.1", "swc_macros_common v1.0.1", "swc_visit v2.0.1", "syn v2.0.117", "syn v3.0.3", "sync_wrapper v1.0.2", "synstructure v0.13.2", "taffy v0.13.0", "tar v0.4.46", "tempfile v3.27.0", "termcolor v1.4.1", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "time v0.3.55", "time-core v0.1.9", "time-macros v0.2.32", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tokio v1.53.1", "tokio-macros v2.7.0", "tokio-rustls v0.26.4", "tokio-tungstenite v0.29.0", "toml v1.1.4+spec-1.1.0", "toml_datetime v1.1.1+spec-1.1.0", "toml_parser v1.1.3+spec-1.1.0", "toml_writer v1.1.2+spec-1.1.0", "tower v0.5.3", "tower-http v0.6.11", "tower-layer v0.3.3", "tower-service v0.3.3", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "triomphe v0.1.15", "try-lock v0.2.5", "tungstenite v0.29.0", "typed-path v0.12.3", "typenum v1.20.1", "unicase v2.9.0", "unicode-id-start v1.4.0", "unicode-ident v1.0.24", "unicode-width v0.2.2", "unit-prefix v0.5.2", "untrusted v0.9.0", "url v2.5.8", "utf8_iter v1.0.4", "utf8parse v0.2.2", "version_check v0.9.5", "walkdir v2.5.0", "want v0.3.1", "wasm-encoder v0.258.0", "webpki-roots v0.26.11", "webpki-roots v1.0.9", "winnow v1.0.3", "winresource v0.1.31", "writeable v0.6.4", "x509-cert v0.3.0", "xattr v1.6.1", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zeroize_derive v1.4.3", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zip v8.6.0", "zlib-rs v0.6.4", "zmij v1.0.21", "zopfli v0.8.3", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7"]}, -{"configuration": "CLI dev", "target": "x86_64-unknown-linux-gnu", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry", "--no-default-features", "--features", "dev-cli", "-e", "normal,build", "--target", "x86_64-unknown-linux-gnu", "--prefix", "none", "--format", "{p}"], "external_package_versions": 350, "packages": ["adler2 v2.0.1", "aes v0.9.1", "ahash v0.8.12", "aho-corasick v1.1.4", "allocator-api2 v0.2.21", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "ar_archive_writer v0.5.1", "arrayvec v0.7.6", "ast_node v5.0.0", "atomic-waker v1.1.2", "autocfg v1.5.1", "base16ct v0.2.0", "base64 v0.22.1", "base64ct v1.8.3", "better_scoped_tls v1.0.1", "bitflags v1.3.2", "bitflags v2.12.1", "block-buffer v0.10.4", "block-buffer v0.12.0", "bumpalo v3.20.3", "bytes v1.12.1", "bytes-str v0.2.7", "bzip2 v0.6.1", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "chrono v0.4.45", "cipher v0.5.2", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "cmov v0.5.4", "colorchoice v1.0.5", "console v0.16.4", "const-oid v0.10.2", "const-oid v0.9.6", "constant_time_eq v0.4.2", "cpubits v0.1.1", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "crc32fast v1.5.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-deque v0.8.6", "crossbeam-epoch v0.9.20", "crossbeam-utils v0.8.21", "crypto-bigint v0.5.5", "crypto-common v0.1.7", "crypto-common v0.2.2", "ctutils v0.4.2", "curve25519-dalek v4.1.3", "curve25519-dalek-derive v0.1.1", "data-encoding v2.11.0", "deflate64 v0.1.12", "der v0.7.10", "der v0.8.1", "der_derive v0.8.0", "deranged v0.5.8", "dialoguer v0.12.0", "digest v0.10.7", "digest v0.11.3", "dirs v6.0.0", "dirs-sys v0.5.0", "displaydoc v0.2.6", "dotenvy v0.15.7", "ecdsa v0.16.9", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "either v1.16.0", "elliptic-curve v0.13.8", "encoding_rs v0.8.35", "env_logger v0.10.2", "equivalent v1.0.2", "errno v0.3.14", "fastrand v2.4.1", "ff v0.13.1", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "flate2 v1.1.10", "form_urlencoded v1.2.2", "from_variant v3.0.0", "fslock v0.2.1", "futures-channel v0.3.32", "futures-core v0.3.34", "futures-io v0.3.34", "futures-macro v0.3.34", "futures-sink v0.3.34", "futures-task v0.3.34", "futures-util v0.3.34", "generic-array v0.14.7", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "group v0.13.0", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hex v0.4.3", "hickory-proto v0.26.1", "hkdf v0.12.4", "hmac v0.12.1", "hmac v0.13.0", "hstr v3.0.6", "http v1.4.1", "http-body v1.0.1", "http-body-util v0.1.5", "httparse v1.10.1", "humantime v2.3.0", "hybrid-array v0.4.12", "hyper v1.11.1", "hyper-rustls v0.27.9", "hyper-util v0.1.20", "iana-time-zone v0.1.65", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "indexmap v2.14.1", "indicatif v0.18.6", "inkwell v0.9.0", "inkwell_internals v0.14.0", "inotify v0.9.6", "inotify-sys v0.1.5", "inout v0.2.2", "ipnet v2.12.0", "is-macro v0.3.7", "is-terminal v0.4.17", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "jobserver v0.1.34", "jsonwebtoken v11.0.0", "lazy_static v1.5.0", "libbz2-rs-sys v0.2.5", "libc v0.2.189", "libm v0.2.16", "linux-raw-sys v0.12.1", "litemap v0.8.2", "llvm-sys v221.0.1", "lock_api v0.4.14", "log v0.4.34", "lzma-rust2 v0.16.4", "memchr v2.8.1", "mime v0.3.17", "mime_guess v2.0.5", "miniz_oxide v0.9.1", "mio v0.8.11", "mio v1.2.1", "new_debug_unreachable v1.0.6", "notify v6.1.1", "num-bigint v0.4.6", "num-bigint-dig v0.8.6", "num-conv v0.2.2", "num-integer v0.1.46", "num-iter v0.1.45", "num-traits v0.2.19", "num_cpus v1.17.0", "object v0.37.3", "once_cell v1.21.4", "option-ext v0.2.0", "p256 v0.13.2", "p384 v0.13.1", "par-core v2.0.0", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "pbkdf2 v0.13.0", "pem v3.0.6", "pem-rfc7468 v0.7.0", "percent-encoding v2.3.2", "perex v0.1.4", "phf v0.11.3", "phf_generator v0.11.3", "phf_macros v0.11.3", "phf_shared v0.11.3", "pin-project-lite v0.2.17", "pkcs1 v0.7.5", "pkcs8 v0.10.2", "pkg-config v0.3.33", "portable-atomic v1.13.1", "potential_utf v0.1.5", "powerfmt v0.2.0", "ppmd-rust v1.4.0", "ppv-lite86 v0.2.21", "primeorder v0.13.6", "proc-macro2 v1.0.106", "psm v0.1.32", "quote v1.0.45", "rand v0.10.2", "rand v0.8.7", "rand v0.9.4", "rand_chacha v0.3.1", "rand_chacha v0.9.0", "rand_core v0.10.1", "rand_core v0.6.4", "rand_core v0.9.5", "rayon v1.12.0", "rayon-core v1.13.0", "regex v1.13.1", "regex-automata v0.4.18", "regex-lite v0.1.9", "regex-syntax v0.8.11", "reqwest v0.12.28", "resolv-conf v0.7.6", "rfc6979 v0.4.0", "ring v0.17.14", "rsa v0.9.10", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "rustc_version v0.4.1", "rustix v1.1.4", "rustls v0.23.43", "rustls-pki-types v1.14.1", "rustls-webpki v0.103.13", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scoped-tls v1.0.1", "scopeguard v1.2.0", "sec1 v0.7.3", "semver v1.0.28", "seq-macro v0.3.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_spanned v1.1.1", "serde_urlencoded v0.7.1", "sha1 v0.10.6", "sha1 v0.11.0", "sha2 v0.10.9", "sha2 v0.11.0", "shell-words v1.1.1", "shlex v2.0.1", "signal-hook-registry v1.4.8", "signature v2.2.0", "simd-adler32 v0.3.9", "simdutf8 v0.1.5", "simple_asn1 v0.6.4", "siphasher v0.3.11", "siphasher v1.0.3", "slab v0.4.12", "slotmap v1.1.1", "smallvec v1.15.1", "smartstring v1.0.1", "socket2 v0.6.5", "spin v0.9.8", "spki v0.7.3", "spki v0.8.0", "stable_deref_trait v1.2.1", "stacker v0.1.25", "static_assertions v1.1.0", "string_enum v1.0.2", "strsim v0.11.1", "subtle v2.6.1", "swc_atoms v9.0.3", "swc_common v18.0.1", "swc_ecma_ast v19.0.0", "swc_ecma_parser v29.0.2", "swc_ecma_parser v32.0.0", "swc_ecma_transforms_base v32.0.0", "swc_ecma_utils v25.0.0", "swc_ecma_visit v19.0.0", "swc_eq_ignore_macros v1.0.1", "swc_macros_common v1.0.1", "swc_visit v2.0.1", "syn v2.0.117", "syn v3.0.3", "sync_wrapper v1.0.2", "synstructure v0.13.2", "taffy v0.13.0", "tar v0.4.46", "tempfile v3.27.0", "termcolor v1.4.1", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "time v0.3.55", "time-core v0.1.9", "time-macros v0.2.32", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tokio v1.53.1", "tokio-macros v2.7.0", "tokio-rustls v0.26.4", "tokio-tungstenite v0.29.0", "toml v1.1.4+spec-1.1.0", "toml_datetime v1.1.1+spec-1.1.0", "toml_parser v1.1.3+spec-1.1.0", "toml_writer v1.1.2+spec-1.1.0", "tower v0.5.3", "tower-http v0.6.11", "tower-layer v0.3.3", "tower-service v0.3.3", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "triomphe v0.1.15", "try-lock v0.2.5", "tungstenite v0.29.0", "typed-path v0.12.3", "typenum v1.20.1", "unicase v2.9.0", "unicode-id-start v1.4.0", "unicode-ident v1.0.24", "unicode-width v0.2.2", "unit-prefix v0.5.2", "untrusted v0.9.0", "url v2.5.8", "utf8_iter v1.0.4", "utf8parse v0.2.2", "version_check v0.9.5", "walkdir v2.5.0", "want v0.3.1", "webpki-roots v0.26.11", "webpki-roots v1.0.9", "winnow v1.0.3", "winresource v0.1.31", "writeable v0.6.4", "x509-cert v0.3.0", "xattr v1.6.1", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zeroize_derive v1.4.3", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zip v8.6.0", "zlib-rs v0.6.4", "zmij v1.0.21", "zopfli v0.8.3", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7"]}, -{"configuration": "Runtime default", "target": "x86_64-unknown-linux-gnu", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-runtime", "-e", "normal,build", "--target", "x86_64-unknown-linux-gnu", "--prefix", "none", "--format", "{p}"], "external_package_versions": 216, "packages": ["ahash v0.8.12", "allocator-api2 v0.2.21", "anyhow v1.0.104", "ar_archive_writer v0.5.1", "arrayvec v0.7.6", "ast_node v5.0.0", "autocfg v1.5.1", "base64 v0.22.1", "better_scoped_tls v1.0.1", "bitflags v1.3.2", "bitflags v2.12.1", "block-buffer v0.12.0", "bytecount v0.6.9", "bytes v1.12.1", "bytes-str v0.2.7", "calendrical_calculations v0.2.4", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "combine v4.6.7", "const-oid v0.10.2", "core_maths v0.1.1", "cpufeatures v0.3.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-utils v0.8.21", "crypto-common v0.2.2", "cty v0.2.2", "data-encoding v2.11.0", "der v0.8.1", "der_derive v0.8.0", "digest v0.11.3", "dirs v6.0.0", "dirs-sys v0.5.0", "displaydoc v0.2.6", "either v1.16.0", "encoding_rs v0.8.35", "equivalent v1.0.2", "filetime v0.2.29", "find-msvc-tools v0.1.11", "fixed_decimal v0.7.2", "flagset v0.4.7", "form_urlencoded v1.2.2", "from_variant v3.0.0", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hickory-proto v0.26.1", "hostname v0.4.2", "hstr v3.0.6", "hybrid-array v0.4.12", "icu_calendar v2.3.0", "icu_calendar_data v2.3.0", "icu_collections v2.2.0", "icu_datetime v2.3.0", "icu_datetime_data v2.3.0", "icu_decimal v2.3.0", "icu_decimal_data v2.3.0", "icu_locale v2.2.0", "icu_locale_core v2.3.0", "icu_locale_data v2.2.0", "icu_locale_fallback v2.3.0", "icu_locale_fallback_data v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_pattern v0.5.0", "icu_plurals v2.3.0", "icu_plurals_data v2.3.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "icu_time v2.3.0", "icu_time_data v2.3.0", "idna v1.1.0", "idna_adapter v1.2.2", "indexmap v2.14.1", "inotify v0.9.6", "inotify-sys v0.1.5", "ipnet v2.12.0", "is-macro v0.3.7", "itoa v1.0.18", "ixdtf v0.6.5", "jiff-tzdb v0.1.6", "jobserver v0.1.34", "lazy_static v1.5.0", "libc v0.2.189", "libm v0.2.16", "libmimalloc-sys v0.1.49", "litemap v0.8.2", "log v0.4.34", "memchr v2.8.1", "miette v7.6.0", "miette-derive v7.6.0", "mimalloc v0.1.52", "minimal-lexical v0.2.1", "mio v0.8.11", "new_debug_unreachable v1.0.6", "node-semver v2.2.0", "nom v7.1.3", "notify v6.1.1", "num-bigint v0.4.6", "num-integer v0.1.46", "num-traits v0.2.19", "num_cpus v1.17.0", "object v0.37.3", "once_cell v1.21.4", "option-ext v0.2.0", "par-core v2.0.0", "percent-encoding v2.3.2", "perex v0.1.4", "phf v0.11.3", "phf_generator v0.11.3", "phf_macros v0.11.3", "phf_shared v0.11.3", "pin-project-lite v0.2.17", "pkg-config v0.3.33", "portable-atomic v1.13.1", "potential_utf v0.1.5", "proc-macro2 v1.0.106", "psm v0.1.32", "quote v1.0.45", "rand v0.10.2", "rand v0.8.7", "rand_core v0.10.1", "rand_core v0.6.4", "resolv-conf v0.7.6", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scoped-tls v1.0.1", "seq-macro v0.3.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_spanned v1.1.1", "sha2 v0.11.0", "shlex v2.0.1", "simdutf8 v0.1.5", "siphasher v0.3.11", "siphasher v1.0.3", "slotmap v1.1.1", "smallvec v1.15.1", "smartstring v1.0.1", "socket2 v0.6.5", "spki v0.8.0", "stable_deref_trait v1.2.1", "stacker v0.1.25", "static_assertions v1.1.0", "string_enum v1.0.2", "swc_atoms v9.0.3", "swc_common v18.0.1", "swc_ecma_ast v19.0.0", "swc_ecma_parser v29.0.2", "swc_ecma_parser v32.0.0", "swc_ecma_transforms_base v32.0.0", "swc_ecma_utils v25.0.0", "swc_ecma_visit v19.0.0", "swc_eq_ignore_macros v1.0.1", "swc_macros_common v1.0.1", "swc_visit v2.0.1", "syn v2.0.117", "syn v3.0.3", "synstructure v0.13.2", "taffy v0.13.0", "temporal_rs v0.2.6", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "timezone_provider v0.2.6", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "toml v1.1.4+spec-1.1.0", "toml_datetime v1.1.1+spec-1.1.0", "toml_parser v1.1.3+spec-1.1.0", "toml_writer v1.1.2+spec-1.1.0", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "triomphe v0.1.15", "typenum v1.20.1", "tzif v0.4.1", "unicode-id-start v1.4.0", "unicode-ident v1.0.24", "unicode-normalization v0.1.25", "unicode-segmentation v1.13.3", "unicode-width v0.1.14", "unicode-width v0.2.2", "unsafe-libyaml v0.2.11", "url v2.5.8", "utf8_iter v1.0.4", "version_check v0.9.5", "walkdir v2.5.0", "winnow v1.0.3", "writeable v0.6.4", "x509-cert v0.3.0", "xxhash-rust v0.8.18", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7"]}, -{"configuration": "Runtime minimal", "target": "x86_64-unknown-linux-gnu", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-runtime", "--no-default-features", "-e", "normal,build", "--target", "x86_64-unknown-linux-gnu", "--prefix", "none", "--format", "{p}"], "external_package_versions": 106, "packages": ["ahash v0.8.12", "anyhow v1.0.104", "arrayvec v0.7.6", "base64 v0.22.1", "bitflags v1.3.2", "block-buffer v0.12.0", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "const-oid v0.10.2", "cpufeatures v0.3.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-utils v0.8.21", "crypto-common v0.2.2", "data-encoding v2.11.0", "der v0.8.1", "der_derive v0.8.0", "digest v0.11.3", "displaydoc v0.2.6", "encoding_rs v0.8.35", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "form_urlencoded v1.2.2", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "hickory-proto v0.26.1", "hybrid-array v0.4.12", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "inotify v0.9.6", "inotify-sys v0.1.5", "ipnet v2.12.0", "itoa v1.0.18", "lazy_static v1.5.0", "libc v0.2.189", "litemap v0.8.2", "log v0.4.34", "memchr v2.8.1", "mio v0.8.11", "notify v6.1.1", "once_cell v1.21.4", "percent-encoding v2.3.2", "pin-project-lite v0.2.17", "portable-atomic v1.13.1", "potential_utf v0.1.5", "proc-macro2 v1.0.106", "quote v1.0.45", "rand v0.10.2", "rand_core v0.10.1", "resolv-conf v0.7.6", "rustc-demangle v0.1.28", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "sha2 v0.11.0", "shlex v2.0.1", "simdutf8 v0.1.5", "slotmap v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "spki v0.8.0", "stable_deref_trait v1.2.1", "syn v2.0.117", "syn v3.0.3", "synstructure v0.13.2", "taffy v0.13.0", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tracing v0.1.44", "tracing-core v0.1.36", "typenum v1.20.1", "unicode-ident v1.0.24", "url v2.5.8", "utf8_iter v1.0.4", "version_check v0.9.5", "walkdir v2.5.0", "writeable v0.6.4", "x509-cert v0.3.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21"]}, -{"configuration": "Stdlib default", "target": "x86_64-unknown-linux-gnu", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-stdlib", "-e", "normal,build", "--target", "x86_64-unknown-linux-gnu", "--prefix", "none", "--format", "{p}"], "external_package_versions": 549, "packages": ["adler2 v2.0.1", "aead v0.5.2", "aes v0.8.4", "aes v0.9.1", "aes-gcm v0.10.3", "aes-kw v0.3.1", "ahash v0.8.12", "aligned v0.4.3", "aligned-vec v0.6.4", "alloc-no-stdlib v2.0.4", "alloc-stdlib v0.2.2", "allocator-api2 v0.2.21", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "arc-swap v1.9.1", "arcstr v1.2.0", "arg_enum_proc_macro v0.3.4", "argon2 v0.5.3", "arrayvec v0.7.6", "as-slice v0.2.1", "async-lock v3.4.2", "async-trait v0.1.92", "atoi v2.0.0", "atomic v0.6.1", "atomic-waker v1.1.2", "autocfg v1.5.1", "av-scenechange v0.14.1", "av1-grain v0.2.5", "avif-serialize v0.8.9", "aws-lc-rs v1.17.0", "aws-lc-sys v0.41.0", "backon v1.6.0", "base16ct v0.2.0", "base16ct v1.0.0", "base64 v0.22.1", "base64 v0.23.1", "base64ct v1.8.3", "bcrypt v0.19.3", "bindgen v0.72.1", "bit_field v0.10.3", "bitflags v1.3.2", "bitflags v2.12.1", "bitstream-io v4.10.0", "bitvec v1.0.1", "blake2 v0.10.6", "block-buffer v0.10.4", "block-buffer v0.12.0", "block-padding v0.3.3", "block-padding v0.4.2", "blowfish v0.10.0", "brotli v8.0.4", "brotli-decompressor v5.0.1", "bson v3.1.0", "built v0.8.1", "bytemuck v1.25.0", "byteorder v1.5.0", "byteorder-lite v0.1.0", "bytes v1.12.1", "cbc v0.1.2", "cbc v0.2.1", "cc v1.4.4", "cexpr v0.6.0", "cfg-if v1.0.4", "chacha20 v0.10.0", "chacha20 v0.9.1", "chacha20poly1305 v0.10.1", "chrono v0.4.45", "chrono-tz v0.10.4", "cipher v0.4.4", "cipher v0.5.2", "clang-sys v1.8.1", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "cmake v0.1.58", "cmov v0.5.4", "color_quant v1.1.0", "colorchoice v1.0.5", "combine v4.6.7", "concurrent-queue v2.5.0", "const-oid v0.10.2", "const-oid v0.9.6", "const-random v0.1.18", "const-random-macro v0.1.16", "convert_case v0.10.0", "cpubits v0.1.1", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "crc v3.4.0", "crc-catalog v2.5.0", "crc32fast v1.5.0", "critical-section v1.2.0", "cron v0.17.0", "croner v3.0.1", "crossbeam-channel v0.5.15", "crossbeam-deque v0.8.6", "crossbeam-epoch v0.9.20", "crossbeam-queue v0.3.12", "crossbeam-utils v0.8.21", "crunchy v0.2.4", "crypto-bigint v0.5.5", "crypto-bigint v0.7.5", "crypto-common v0.1.7", "crypto-common v0.2.2", "cssparser v0.37.0", "cssparser-macros v0.7.0", "ctr v0.9.2", "ctutils v0.4.2", "curve25519-dalek v4.1.3", "curve25519-dalek-derive v0.1.1", "darling v0.20.11", "darling v0.23.0", "darling_core v0.20.11", "darling_core v0.23.0", "darling_macro v0.20.11", "darling_macro v0.23.0", "dashmap v6.2.1", "data-encoding v2.11.0", "der v0.7.10", "der v0.8.1", "der_derive v0.8.0", "deranged v0.5.8", "derive-syn-parse v0.2.0", "derive-where v1.6.1", "derive_builder v0.20.2", "derive_builder_core v0.20.2", "derive_builder_macro v0.20.2", "derive_more v2.1.1", "derive_more-impl v2.1.1", "digest v0.10.7", "digest v0.11.3", "displaydoc v0.2.6", "dotenvy v0.15.7", "dtoa v1.0.11", "dtoa-short v0.3.5", "dunce v1.0.5", "ecb v0.2.1", "ecdsa v0.16.9", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "ed448 v0.5.0", "ed448-goldilocks v0.14.0-pre.15", "ego-tree v0.11.0", "either v1.16.0", "elliptic-curve v0.13.8", "elliptic-curve v0.14.0", "email-encoding v0.4.1", "email_address v0.2.9", "encoding_rs v0.8.35", "equator v0.4.2", "equator-macro v0.4.2", "equivalent v1.0.2", "errno v0.3.14", "event-listener v5.4.1", "event-listener-strategy v0.5.4", "exr v1.74.0", "fallible-iterator v0.3.0", "fallible-streaming-iterator v0.1.9", "fastrand v2.4.1", "fax v0.2.7", "fdeflate v0.3.7", "ff v0.13.1", "ff v0.14.0", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "flate2 v1.1.10", "fnv v1.0.7", "foldhash v0.2.0", "form_urlencoded v1.2.2", "fs_extra v1.3.0", "funty v2.0.0", "futures-channel v0.3.32", "futures-core v0.3.34", "futures-intrusive v0.5.0", "futures-io v0.3.34", "futures-macro v0.3.34", "futures-sink v0.3.34", "futures-task v0.3.34", "futures-timer v3.0.4", "futures-util v0.3.34", "generic-array v0.14.7", "getopts v0.2.24", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "ghash v0.5.1", "ghash v0.6.0", "gif v0.14.2", "gimli v0.34.0", "glob v0.3.3", "governor v0.10.4", "group v0.13.0", "group v0.14.0", "h2 v0.4.19", "half v2.7.1", "hash2curve v0.14.0", "hashbrown v0.14.5", "hashbrown v0.16.1", "hashbrown v0.17.1", "hashlink v0.11.1", "heck v0.5.0", "hex v0.4.3", "hickory-net v0.26.1", "hickory-proto v0.26.1", "hickory-resolver v0.26.1", "hkdf v0.12.4", "hkdf v0.13.0", "hmac v0.12.1", "hmac v0.13.0", "hostname v0.4.2", "html5ever v0.39.0", "http v1.4.1", "http-body v1.0.1", "http-body-util v0.1.5", "httparse v1.10.1", "httpdate v1.0.3", "hybrid-array v0.4.12", "hyper v1.11.1", "hyper-rustls v0.27.9", "hyper-util v0.1.20", "iana-time-zone v0.1.65", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "ident_case v1.0.1", "idna v1.1.0", "idna_adapter v1.2.2", "image v0.25.10", "image-webp v0.2.4", "imgref v1.12.3", "indexmap v2.14.1", "inotify v0.9.6", "inotify-sys v0.1.5", "inout v0.1.4", "inout v0.2.2", "ipnet v2.12.0", "is_terminal_polyfill v1.70.2", "itertools v0.12.1", "itertools v0.14.0", "itoa v1.0.18", "jobserver v0.1.34", "jsonwebtoken v11.0.0", "keccak v0.1.6", "keccak v0.2.0", "kem v0.3.0", "lazy_static v1.5.0", "lebe v0.5.3", "lettre v0.11.23", "libc v0.2.189", "libloading v0.8.9", "libm v0.2.16", "libsqlite3-sys v0.37.0", "litemap v0.8.2", "lock_api v0.4.14", "log v0.4.34", "loop9 v0.1.5", "lru v0.18.3", "macro_magic v0.5.1", "macro_magic_core v0.5.1", "macro_magic_core_macros v0.5.1", "macro_magic_macros v0.5.1", "markup5ever v0.39.0", "maybe-rayon v0.1.1", "md-5 v0.10.6", "md-5 v0.11.0", "memchr v2.8.1", "mime v0.3.17", "minimal-lexical v0.2.1", "miniz_oxide v0.8.9", "miniz_oxide v0.9.1", "mio v0.8.11", "mio v1.2.1", "ml-kem v0.3.2", "module-lattice v0.2.3", "moka v0.12.15", "mongodb v3.8.2", "mongodb-internal-macros v3.8.2", "moxcms v0.8.1", "nanoid v0.5.0", "new_debug_unreachable v1.0.6", "no_std_io2 v0.9.4", "nom v7.1.3", "nom v8.0.0", "nonzero_ext v0.3.0", "noop_proc_macro v0.3.0", "notify v6.1.1", "num-bigint v0.4.6", "num-bigint v0.5.1", "num-bigint-dig v0.8.6", "num-conv v0.2.2", "num-derive v0.4.2", "num-integer v0.1.46", "num-iter v0.1.45", "num-rational v0.4.2", "num-traits v0.2.19", "once_cell v1.21.4", "opaque-debug v0.3.1", "openssl-probe v0.2.1", "p256 v0.13.2", "p384 v0.13.1", "p521 v0.13.3", "parking v2.2.1", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "password-hash v0.5.0", "paste v1.0.15", "pastey v0.1.1", "pbkdf2 v0.12.2", "pbkdf2 v0.13.0", "pem v3.0.6", "pem-rfc7468 v0.7.0", "pem-rfc7468 v1.0.0", "percent-encoding v2.3.2", "phf v0.11.3", "phf v0.12.1", "phf v0.13.1", "phf_codegen v0.13.1", "phf_generator v0.11.3", "phf_generator v0.13.1", "phf_macros v0.11.3", "phf_macros v0.13.1", "phf_shared v0.11.3", "phf_shared v0.12.1", "phf_shared v0.13.1", "pin-project-lite v0.2.17", "pkcs1 v0.7.5", "pkcs5 v0.7.1", "pkcs8 v0.10.2", "pkcs8 v0.11.0", "pkg-config v0.3.33", "png v0.18.1", "poly1305 v0.8.0", "polyval v0.6.2", "polyval v0.7.3", "portable-atomic v1.13.1", "potential_utf v0.1.5", "powerfmt v0.2.0", "ppv-lite86 v0.2.21", "precomputed-hash v0.1.1", "prefix-trie v0.8.4", "primeorder v0.13.6", "proc-macro2 v1.0.106", "profiling v1.0.18", "profiling-procmacros v1.0.18", "pxfm v0.1.29", "qoi v0.4.1", "quanta v0.12.6", "quick-error v2.0.1", "quote v1.0.45", "quoted_printable v0.5.2", "radium v0.7.0", "rand v0.10.2", "rand v0.8.7", "rand v0.9.4", "rand_chacha v0.3.1", "rand_chacha v0.9.0", "rand_core v0.10.1", "rand_core v0.6.4", "rand_core v0.9.5", "rav1e v0.8.1", "ravif v0.13.0", "raw-cpuid v11.6.0", "rayon v1.12.0", "rayon-core v1.13.0", "redis v1.6.0", "regex v1.13.1", "regex-automata v0.4.18", "regex-syntax v0.8.11", "reqwest v0.12.28", "resolv-conf v0.7.6", "rfc6979 v0.4.0", "rgb v0.8.53", "ring v0.17.14", "rsa v0.9.10", "rusqlite v0.39.0", "rust_decimal v1.43.0", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "rustc_version v0.4.1", "rustc_version_runtime v0.3.0", "rustls v0.23.43", "rustls-native-certs v0.8.4", "rustls-pemfile v2.2.0", "rustls-pki-types v1.14.1", "rustls-webpki v0.103.13", "rustversion v1.0.22", "ryu v1.0.23", "ryu-js v1.0.3", "salsa20 v0.10.2", "same-file v1.0.6", "scopeguard v1.2.0", "scraper v0.27.0", "scrypt v0.11.0", "sec1 v0.7.3", "sec1 v0.8.1", "selectors v0.38.0", "semver v1.0.28", "serde v1.0.229", "serde_bytes v0.11.19", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_urlencoded v0.7.1", "serde_with v3.21.0", "serde_with_macros v3.21.0", "servo_arc v0.4.3", "sha1 v0.10.6", "sha1 v0.11.0", "sha1_smol v1.0.1", "sha2 v0.10.9", "sha2 v0.11.0", "sha3 v0.10.9", "sha3 v0.11.0", "sha3 v0.12.0", "sha3-utils v0.5.0", "shake v0.1.0", "shlex v1.3.0", "shlex v2.0.1", "signal-hook-registry v1.4.8", "signature v2.2.0", "signature v3.0.0", "simd-adler32 v0.3.9", "simd_helpers v0.1.0", "simdutf8 v0.1.5", "simple_asn1 v0.6.4", "siphasher v1.0.3", "slab v0.4.12", "slotmap v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "spin v0.9.8", "spinning_top v0.3.0", "spki v0.7.3", "spki v0.8.0", "sponge-cursor v0.1.0", "sqlx v0.9.0", "sqlx-core v0.9.0", "sqlx-mysql v0.9.0", "sqlx-postgres v0.9.0", "stable_deref_trait v1.2.1", "string_cache v0.9.0", "string_cache_codegen v0.6.1", "stringprep v0.1.5", "strsim v0.11.1", "strum v0.27.2", "strum_macros v0.27.2", "subtle v2.6.1", "syn v2.0.117", "syn v3.0.3", "sync_wrapper v1.0.2", "synstructure v0.13.2", "taffy v0.13.0", "tagptr v0.2.0", "take_mut v0.2.2", "tap v1.0.1", "tendril v0.5.0", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "tiff v0.11.3", "time v0.3.55", "time-core v0.1.9", "time-macros v0.2.32", "tiny-keccak v2.0.2", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tokio v1.53.1", "tokio-cron-scheduler v0.15.1", "tokio-macros v2.7.0", "tokio-rustls v0.26.4", "tokio-stream v0.1.18", "tokio-tungstenite v0.29.0", "tokio-util v0.7.18", "tower v0.5.3", "tower-http v0.6.11", "tower-layer v0.3.3", "tower-service v0.3.3", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "try-lock v0.2.5", "tungstenite v0.29.0", "typed-builder v0.22.0", "typed-builder-macro v0.22.0", "typenum v1.20.1", "unicode-bidi v0.3.18", "unicode-ident v1.0.24", "unicode-normalization v0.1.25", "unicode-properties v0.1.4", "unicode-segmentation v1.13.3", "unicode-width v0.2.2", "unicode-xid v0.2.6", "universal-hash v0.5.1", "universal-hash v0.6.1", "untrusted v0.9.0", "url v2.5.8", "utf-8 v0.7.6", "utf8_iter v1.0.4", "utf8parse v0.2.2", "uuid v1.26.0", "v_frame v0.3.9", "vcpkg v0.2.15", "version_check v0.9.5", "walkdir v2.5.0", "want v0.3.1", "web-time v1.1.0", "web_atoms v0.2.4", "webpki-roots v0.26.11", "webpki-roots v1.0.9", "weezl v0.1.12", "whoami v2.1.2", "windows-link v0.2.1", "winnow v0.7.15", "writeable v0.6.4", "wyz v0.5.1", "x25519-dalek v2.0.1", "x448 v0.14.0-pre.12", "x509-cert v0.3.0", "xxhash-rust v0.8.18", "y4m v0.8.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerocopy-derive v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zeroize_derive v1.4.3", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7", "zune-core v0.5.1", "zune-inflate v0.2.54", "zune-jpeg v0.5.15"]}, -{"configuration": "Stdlib minimal", "target": "x86_64-unknown-linux-gnu", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-stdlib", "--no-default-features", "-e", "normal,build", "--target", "x86_64-unknown-linux-gnu", "--prefix", "none", "--format", "{p}"], "external_package_versions": 146, "packages": ["ahash v0.8.12", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "arrayvec v0.7.6", "autocfg v1.5.1", "base64 v0.22.1", "bitflags v1.3.2", "block-buffer v0.10.4", "block-buffer v0.12.0", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "chrono v0.4.45", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "colorchoice v1.0.5", "const-oid v0.10.2", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-utils v0.8.21", "crypto-common v0.1.7", "crypto-common v0.2.2", "curve25519-dalek v4.1.3", "curve25519-dalek-derive v0.1.1", "dashmap v6.2.1", "data-encoding v2.11.0", "der v0.8.1", "der_derive v0.8.0", "digest v0.10.7", "digest v0.11.3", "displaydoc v0.2.6", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "encoding_rs v0.8.35", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "form_urlencoded v1.2.2", "generic-array v0.14.7", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "hashbrown v0.14.5", "heck v0.5.0", "hex v0.4.3", "hickory-proto v0.26.1", "hybrid-array v0.4.12", "iana-time-zone v0.1.65", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "inotify v0.9.6", "inotify-sys v0.1.5", "ipnet v2.12.0", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "lazy_static v1.5.0", "libc v0.2.189", "litemap v0.8.2", "lock_api v0.4.14", "log v0.4.34", "memchr v2.8.1", "mio v0.8.11", "notify v6.1.1", "num-traits v0.2.19", "once_cell v1.21.4", "parking_lot_core v0.9.12", "percent-encoding v2.3.2", "pin-project-lite v0.2.17", "portable-atomic v1.13.1", "potential_utf v0.1.5", "proc-macro2 v1.0.106", "quote v1.0.45", "rand v0.10.2", "rand_core v0.10.1", "rand_core v0.6.4", "resolv-conf v0.7.6", "rustc-demangle v0.1.28", "rustc_version v0.4.1", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scopeguard v1.2.0", "semver v1.0.28", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "sha2 v0.10.9", "sha2 v0.11.0", "shlex v2.0.1", "signature v2.2.0", "simdutf8 v0.1.5", "slotmap v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "spki v0.8.0", "stable_deref_trait v1.2.1", "strsim v0.11.1", "subtle v2.6.1", "syn v2.0.117", "syn v3.0.3", "synstructure v0.13.2", "taffy v0.13.0", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tracing v0.1.44", "tracing-core v0.1.36", "typenum v1.20.1", "unicode-ident v1.0.24", "url v2.5.8", "utf8_iter v1.0.4", "utf8parse v0.2.2", "version_check v0.9.5", "walkdir v2.5.0", "writeable v0.6.4", "x509-cert v0.3.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21"]}, -{"configuration": "Compose", "target": "x86_64-unknown-linux-gnu", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-container-compose", "-e", "normal,build", "--target", "x86_64-unknown-linux-gnu", "--prefix", "none", "--format", "{p}"], "external_package_versions": 94, "packages": ["anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "async-trait v0.1.92", "atty v0.2.14", "bitflags v2.12.1", "block-buffer v0.12.0", "bytes v1.12.1", "cfg-if v1.0.4", "chacha20 v0.10.0", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "colorchoice v1.0.5", "console v0.15.11", "console v0.16.4", "const-oid v0.10.2", "cpufeatures v0.3.0", "crossbeam-utils v0.8.21", "crypto-common v0.2.2", "dashmap v6.2.1", "dialoguer v0.11.0", "digest v0.11.3", "dotenvy v0.15.7", "equivalent v1.0.2", "errno v0.3.14", "fastrand v2.4.1", "getrandom v0.4.2", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hex v0.4.3", "hybrid-array v0.4.12", "indexmap v2.14.1", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "lazy_static v1.5.0", "libc v0.2.189", "linux-raw-sys v0.12.1", "lock_api v0.4.14", "log v0.4.34", "matchers v0.2.0", "md-5 v0.11.0", "memchr v2.8.1", "mio v1.2.1", "nu-ansi-term v0.50.3", "once_cell v1.21.4", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "pin-project-lite v0.2.17", "proc-macro2 v1.0.106", "quote v1.0.45", "rand v0.10.2", "rand_core v0.10.1", "regex-automata v0.4.18", "regex-syntax v0.8.11", "rustix v1.1.4", "ryu v1.0.23", "scopeguard v1.2.0", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_yaml v0.9.34+deprecated", "sharded-slab v0.1.7", "shell-words v1.1.1", "signal-hook-registry v1.4.8", "smallvec v1.15.1", "socket2 v0.6.5", "strsim v0.11.1", "syn v2.0.117", "syn v3.0.3", "tempfile v3.27.0", "thiserror v1.0.69", "thiserror-impl v1.0.69", "thread_local v1.1.9", "tokio v1.53.1", "tokio-macros v2.7.0", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "tracing-log v0.2.0", "tracing-subscriber v0.3.23", "typenum v1.20.1", "unicode-ident v1.0.24", "unicode-width v0.2.2", "unsafe-libyaml v0.2.11", "utf8parse v0.2.2", "which v8.0.6", "zeroize v1.8.2", "zmij v1.0.21"]}, -{"configuration": "CLI default", "target": "aarch64-apple-darwin", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry", "-e", "normal,build", "--target", "aarch64-apple-darwin", "--prefix", "none", "--format", "{p}"], "external_package_versions": 349, "packages": ["adler2 v2.0.1", "aes v0.9.1", "ahash v0.8.12", "aho-corasick v1.1.4", "allocator-api2 v0.2.21", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "ar_archive_writer v0.5.1", "arrayvec v0.7.6", "ast_node v5.0.0", "atomic-waker v1.1.2", "autocfg v1.5.1", "base16ct v0.2.0", "base64 v0.22.1", "base64ct v1.8.3", "better_scoped_tls v1.0.1", "bitflags v2.12.1", "block-buffer v0.10.4", "block-buffer v0.12.0", "bumpalo v3.20.3", "bytes v1.12.1", "bytes-str v0.2.7", "bzip2 v0.6.1", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "chrono v0.4.45", "cipher v0.5.2", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "cmov v0.5.4", "colorchoice v1.0.5", "console v0.16.4", "const-oid v0.10.2", "const-oid v0.9.6", "constant_time_eq v0.4.2", "core-foundation-sys v0.8.7", "cpubits v0.1.1", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "crc32fast v1.5.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-deque v0.8.6", "crossbeam-epoch v0.9.20", "crossbeam-utils v0.8.21", "crypto-bigint v0.5.5", "crypto-common v0.1.7", "crypto-common v0.2.2", "ctutils v0.4.2", "curve25519-dalek v4.1.3", "data-encoding v2.11.0", "deflate64 v0.1.12", "der v0.7.10", "der v0.8.1", "der_derive v0.8.0", "deranged v0.5.8", "dialoguer v0.12.0", "digest v0.10.7", "digest v0.11.3", "dirs v6.0.0", "dirs-sys v0.5.0", "displaydoc v0.2.6", "dotenvy v0.15.7", "ecdsa v0.16.9", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "either v1.16.0", "elliptic-curve v0.13.8", "encoding_rs v0.8.35", "env_logger v0.10.2", "equivalent v1.0.2", "errno v0.3.14", "fastrand v2.4.1", "ff v0.13.1", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "flate2 v1.1.10", "form_urlencoded v1.2.2", "from_variant v3.0.0", "fsevent-sys v4.1.0", "fslock v0.2.1", "futures-channel v0.3.32", "futures-core v0.3.34", "futures-io v0.3.34", "futures-macro v0.3.34", "futures-sink v0.3.34", "futures-task v0.3.34", "futures-util v0.3.34", "generic-array v0.14.7", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "group v0.13.0", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hex v0.4.3", "hickory-proto v0.26.1", "hkdf v0.12.4", "hmac v0.12.1", "hmac v0.13.0", "hstr v3.0.6", "http v1.4.1", "http-body v1.0.1", "http-body-util v0.1.5", "httparse v1.10.1", "humantime v2.3.0", "hybrid-array v0.4.12", "hyper v1.11.1", "hyper-rustls v0.27.9", "hyper-util v0.1.20", "iana-time-zone v0.1.65", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "indexmap v2.14.1", "indicatif v0.18.6", "inkwell v0.9.0", "inkwell_internals v0.14.0", "inout v0.2.2", "ipnet v2.12.0", "is-macro v0.3.7", "is-terminal v0.4.17", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "jobserver v0.1.34", "jsonwebtoken v11.0.0", "lazy_static v1.5.0", "leb128fmt v0.1.0", "libbz2-rs-sys v0.2.5", "libc v0.2.189", "libm v0.2.16", "litemap v0.8.2", "llvm-sys v221.0.1", "lock_api v0.4.14", "log v0.4.34", "lzma-rust2 v0.16.4", "mach2 v0.6.0", "memchr v2.8.1", "mime v0.3.17", "mime_guess v2.0.5", "miniz_oxide v0.9.1", "mio v1.2.1", "new_debug_unreachable v1.0.6", "notify v6.1.1", "num-bigint v0.4.6", "num-bigint-dig v0.8.6", "num-conv v0.2.2", "num-integer v0.1.46", "num-iter v0.1.45", "num-traits v0.2.19", "num_cpus v1.17.0", "object v0.37.3", "once_cell v1.21.4", "option-ext v0.2.0", "p256 v0.13.2", "p384 v0.13.1", "par-core v2.0.0", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "pbkdf2 v0.13.0", "pem v3.0.6", "pem-rfc7468 v0.7.0", "percent-encoding v2.3.2", "perex v0.1.4", "phf v0.11.3", "phf_generator v0.11.3", "phf_macros v0.11.3", "phf_shared v0.11.3", "pin-project-lite v0.2.17", "pkcs1 v0.7.5", "pkcs8 v0.10.2", "pkg-config v0.3.33", "portable-atomic v1.13.1", "potential_utf v0.1.5", "powerfmt v0.2.0", "ppmd-rust v1.4.0", "ppv-lite86 v0.2.21", "primeorder v0.13.6", "proc-macro2 v1.0.106", "psm v0.1.32", "quote v1.0.45", "rand v0.10.2", "rand v0.8.7", "rand v0.9.4", "rand_chacha v0.3.1", "rand_chacha v0.9.0", "rand_core v0.10.1", "rand_core v0.6.4", "rand_core v0.9.5", "rayon v1.12.0", "rayon-core v1.13.0", "regex v1.13.1", "regex-automata v0.4.18", "regex-lite v0.1.9", "regex-syntax v0.8.11", "reqwest v0.12.28", "resolv-conf v0.7.6", "rfc6979 v0.4.0", "ring v0.17.14", "rsa v0.9.10", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "rustc_version v0.4.1", "rustix v1.1.4", "rustls v0.23.43", "rustls-pki-types v1.14.1", "rustls-webpki v0.103.13", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scoped-tls v1.0.1", "scopeguard v1.2.0", "sec1 v0.7.3", "semver v1.0.28", "seq-macro v0.3.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_spanned v1.1.1", "serde_urlencoded v0.7.1", "sha1 v0.10.6", "sha1 v0.11.0", "sha2 v0.10.9", "sha2 v0.11.0", "shell-words v1.1.1", "shlex v2.0.1", "signal-hook-registry v1.4.8", "signature v2.2.0", "simd-adler32 v0.3.9", "simdutf8 v0.1.5", "simple_asn1 v0.6.4", "siphasher v0.3.11", "siphasher v1.0.3", "slab v0.4.12", "slotmap v1.1.1", "smallvec v1.15.1", "smartstring v1.0.1", "socket2 v0.6.5", "spin v0.9.8", "spki v0.7.3", "spki v0.8.0", "stable_deref_trait v1.2.1", "stacker v0.1.25", "static_assertions v1.1.0", "string_enum v1.0.2", "strsim v0.11.1", "subtle v2.6.1", "swc_atoms v9.0.3", "swc_common v18.0.1", "swc_ecma_ast v19.0.0", "swc_ecma_parser v29.0.2", "swc_ecma_parser v32.0.0", "swc_ecma_transforms_base v32.0.0", "swc_ecma_utils v25.0.0", "swc_ecma_visit v19.0.0", "swc_eq_ignore_macros v1.0.1", "swc_macros_common v1.0.1", "swc_visit v2.0.1", "syn v2.0.117", "syn v3.0.3", "sync_wrapper v1.0.2", "synstructure v0.13.2", "taffy v0.13.0", "tar v0.4.46", "tempfile v3.27.0", "termcolor v1.4.1", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "time v0.3.55", "time-core v0.1.9", "time-macros v0.2.32", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tokio v1.53.1", "tokio-macros v2.7.0", "tokio-rustls v0.26.4", "tokio-tungstenite v0.29.0", "toml v1.1.4+spec-1.1.0", "toml_datetime v1.1.1+spec-1.1.0", "toml_parser v1.1.3+spec-1.1.0", "toml_writer v1.1.2+spec-1.1.0", "tower v0.5.3", "tower-http v0.6.11", "tower-layer v0.3.3", "tower-service v0.3.3", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "triomphe v0.1.15", "try-lock v0.2.5", "tungstenite v0.29.0", "typed-path v0.12.3", "typenum v1.20.1", "unicase v2.9.0", "unicode-id-start v1.4.0", "unicode-ident v1.0.24", "unicode-width v0.2.2", "unit-prefix v0.5.2", "untrusted v0.9.0", "url v2.5.8", "utf8_iter v1.0.4", "utf8parse v0.2.2", "version_check v0.9.5", "walkdir v2.5.0", "want v0.3.1", "wasm-encoder v0.258.0", "webpki-roots v0.26.11", "webpki-roots v1.0.9", "winnow v1.0.3", "winresource v0.1.31", "writeable v0.6.4", "x509-cert v0.3.0", "xattr v1.6.1", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zeroize_derive v1.4.3", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zip v8.6.0", "zlib-rs v0.6.4", "zmij v1.0.21", "zopfli v0.8.3", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7"]}, -{"configuration": "CLI dev", "target": "aarch64-apple-darwin", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry", "--no-default-features", "--features", "dev-cli", "-e", "normal,build", "--target", "aarch64-apple-darwin", "--prefix", "none", "--format", "{p}"], "external_package_versions": 347, "packages": ["adler2 v2.0.1", "aes v0.9.1", "ahash v0.8.12", "aho-corasick v1.1.4", "allocator-api2 v0.2.21", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "ar_archive_writer v0.5.1", "arrayvec v0.7.6", "ast_node v5.0.0", "atomic-waker v1.1.2", "autocfg v1.5.1", "base16ct v0.2.0", "base64 v0.22.1", "base64ct v1.8.3", "better_scoped_tls v1.0.1", "bitflags v2.12.1", "block-buffer v0.10.4", "block-buffer v0.12.0", "bumpalo v3.20.3", "bytes v1.12.1", "bytes-str v0.2.7", "bzip2 v0.6.1", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "chrono v0.4.45", "cipher v0.5.2", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "cmov v0.5.4", "colorchoice v1.0.5", "console v0.16.4", "const-oid v0.10.2", "const-oid v0.9.6", "constant_time_eq v0.4.2", "core-foundation-sys v0.8.7", "cpubits v0.1.1", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "crc32fast v1.5.0", "critical-section v1.2.0", "crossbeam-channel v0.5.15", "crossbeam-deque v0.8.6", "crossbeam-epoch v0.9.20", "crossbeam-utils v0.8.21", "crypto-bigint v0.5.5", "crypto-common v0.1.7", "crypto-common v0.2.2", "ctutils v0.4.2", "curve25519-dalek v4.1.3", "data-encoding v2.11.0", "deflate64 v0.1.12", "der v0.7.10", "der v0.8.1", "der_derive v0.8.0", "deranged v0.5.8", "dialoguer v0.12.0", "digest v0.10.7", "digest v0.11.3", "dirs v6.0.0", "dirs-sys v0.5.0", "displaydoc v0.2.6", "dotenvy v0.15.7", "ecdsa v0.16.9", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "either v1.16.0", "elliptic-curve v0.13.8", "encoding_rs v0.8.35", "env_logger v0.10.2", "equivalent v1.0.2", "errno v0.3.14", "fastrand v2.4.1", "ff v0.13.1", "filetime v0.2.29", "find-msvc-tools v0.1.11", "flagset v0.4.7", "flate2 v1.1.10", "form_urlencoded v1.2.2", "from_variant v3.0.0", "fsevent-sys v4.1.0", "fslock v0.2.1", "futures-channel v0.3.32", "futures-core v0.3.34", "futures-io v0.3.34", "futures-macro v0.3.34", "futures-sink v0.3.34", "futures-task v0.3.34", "futures-util v0.3.34", "generic-array v0.14.7", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "group v0.13.0", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hex v0.4.3", "hickory-proto v0.26.1", "hkdf v0.12.4", "hmac v0.12.1", "hmac v0.13.0", "hstr v3.0.6", "http v1.4.1", "http-body v1.0.1", "http-body-util v0.1.5", "httparse v1.10.1", "humantime v2.3.0", "hybrid-array v0.4.12", "hyper v1.11.1", "hyper-rustls v0.27.9", "hyper-util v0.1.20", "iana-time-zone v0.1.65", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "indexmap v2.14.1", "indicatif v0.18.6", "inkwell v0.9.0", "inkwell_internals v0.14.0", "inout v0.2.2", "ipnet v2.12.0", "is-macro v0.3.7", "is-terminal v0.4.17", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "jobserver v0.1.34", "jsonwebtoken v11.0.0", "lazy_static v1.5.0", "libbz2-rs-sys v0.2.5", "libc v0.2.189", "libm v0.2.16", "litemap v0.8.2", "llvm-sys v221.0.1", "lock_api v0.4.14", "log v0.4.34", "lzma-rust2 v0.16.4", "mach2 v0.6.0", "memchr v2.8.1", "mime v0.3.17", "mime_guess v2.0.5", "miniz_oxide v0.9.1", "mio v1.2.1", "new_debug_unreachable v1.0.6", "notify v6.1.1", "num-bigint v0.4.6", "num-bigint-dig v0.8.6", "num-conv v0.2.2", "num-integer v0.1.46", "num-iter v0.1.45", "num-traits v0.2.19", "num_cpus v1.17.0", "object v0.37.3", "once_cell v1.21.4", "option-ext v0.2.0", "p256 v0.13.2", "p384 v0.13.1", "par-core v2.0.0", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "pbkdf2 v0.13.0", "pem v3.0.6", "pem-rfc7468 v0.7.0", "percent-encoding v2.3.2", "perex v0.1.4", "phf v0.11.3", "phf_generator v0.11.3", "phf_macros v0.11.3", "phf_shared v0.11.3", "pin-project-lite v0.2.17", "pkcs1 v0.7.5", "pkcs8 v0.10.2", "pkg-config v0.3.33", "portable-atomic v1.13.1", "potential_utf v0.1.5", "powerfmt v0.2.0", "ppmd-rust v1.4.0", "ppv-lite86 v0.2.21", "primeorder v0.13.6", "proc-macro2 v1.0.106", "psm v0.1.32", "quote v1.0.45", "rand v0.10.2", "rand v0.8.7", "rand v0.9.4", "rand_chacha v0.3.1", "rand_chacha v0.9.0", "rand_core v0.10.1", "rand_core v0.6.4", "rand_core v0.9.5", "rayon v1.12.0", "rayon-core v1.13.0", "regex v1.13.1", "regex-automata v0.4.18", "regex-lite v0.1.9", "regex-syntax v0.8.11", "reqwest v0.12.28", "resolv-conf v0.7.6", "rfc6979 v0.4.0", "ring v0.17.14", "rsa v0.9.10", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "rustc_version v0.4.1", "rustix v1.1.4", "rustls v0.23.43", "rustls-pki-types v1.14.1", "rustls-webpki v0.103.13", "ryu v1.0.23", "ryu-js v1.0.3", "same-file v1.0.6", "scoped-tls v1.0.1", "scopeguard v1.2.0", "sec1 v0.7.3", "semver v1.0.28", "seq-macro v0.3.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_spanned v1.1.1", "serde_urlencoded v0.7.1", "sha1 v0.10.6", "sha1 v0.11.0", "sha2 v0.10.9", "sha2 v0.11.0", "shell-words v1.1.1", "shlex v2.0.1", "signal-hook-registry v1.4.8", "signature v2.2.0", "simd-adler32 v0.3.9", "simdutf8 v0.1.5", "simple_asn1 v0.6.4", "siphasher v0.3.11", "siphasher v1.0.3", "slab v0.4.12", "slotmap v1.1.1", "smallvec v1.15.1", "smartstring v1.0.1", "socket2 v0.6.5", "spin v0.9.8", "spki v0.7.3", "spki v0.8.0", "stable_deref_trait v1.2.1", "stacker v0.1.25", "static_assertions v1.1.0", "string_enum v1.0.2", "strsim v0.11.1", "subtle v2.6.1", "swc_atoms v9.0.3", "swc_common v18.0.1", "swc_ecma_ast v19.0.0", "swc_ecma_parser v29.0.2", "swc_ecma_parser v32.0.0", "swc_ecma_transforms_base v32.0.0", "swc_ecma_utils v25.0.0", "swc_ecma_visit v19.0.0", "swc_eq_ignore_macros v1.0.1", "swc_macros_common v1.0.1", "swc_visit v2.0.1", "syn v2.0.117", "syn v3.0.3", "sync_wrapper v1.0.2", "synstructure v0.13.2", "taffy v0.13.0", "tar v0.4.46", "tempfile v3.27.0", "termcolor v1.4.1", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "time v0.3.55", "time-core v0.1.9", "time-macros v0.2.32", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tokio v1.53.1", "tokio-macros v2.7.0", "tokio-rustls v0.26.4", "tokio-tungstenite v0.29.0", "toml v1.1.4+spec-1.1.0", "toml_datetime v1.1.1+spec-1.1.0", "toml_parser v1.1.3+spec-1.1.0", "toml_writer v1.1.2+spec-1.1.0", "tower v0.5.3", "tower-http v0.6.11", "tower-layer v0.3.3", "tower-service v0.3.3", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "triomphe v0.1.15", "try-lock v0.2.5", "tungstenite v0.29.0", "typed-path v0.12.3", "typenum v1.20.1", "unicase v2.9.0", "unicode-id-start v1.4.0", "unicode-ident v1.0.24", "unicode-width v0.2.2", "unit-prefix v0.5.2", "untrusted v0.9.0", "url v2.5.8", "utf8_iter v1.0.4", "utf8parse v0.2.2", "version_check v0.9.5", "walkdir v2.5.0", "want v0.3.1", "webpki-roots v0.26.11", "webpki-roots v1.0.9", "winnow v1.0.3", "winresource v0.1.31", "writeable v0.6.4", "x509-cert v0.3.0", "xattr v1.6.1", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zeroize_derive v1.4.3", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zip v8.6.0", "zlib-rs v0.6.4", "zmij v1.0.21", "zopfli v0.8.3", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7"]}, -{"configuration": "Runtime default", "target": "aarch64-apple-darwin", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-runtime", "-e", "normal,build", "--target", "aarch64-apple-darwin", "--prefix", "none", "--format", "{p}"], "external_package_versions": 206, "packages": ["ahash v0.8.12", "allocator-api2 v0.2.21", "anyhow v1.0.104", "ar_archive_writer v0.5.1", "arrayvec v0.7.6", "ast_node v5.0.0", "autocfg v1.5.1", "base64 v0.22.1", "better_scoped_tls v1.0.1", "bitflags v2.12.1", "block-buffer v0.12.0", "bytecount v0.6.9", "bytes v1.12.1", "bytes-str v0.2.7", "calendrical_calculations v0.2.4", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "combine v4.6.7", "const-oid v0.10.2", "core_maths v0.1.1", "cpufeatures v0.3.0", "critical-section v1.2.0", "crypto-common v0.2.2", "cty v0.2.2", "data-encoding v2.11.0", "der v0.8.1", "der_derive v0.8.0", "digest v0.11.3", "dirs v6.0.0", "dirs-sys v0.5.0", "displaydoc v0.2.6", "either v1.16.0", "encoding_rs v0.8.35", "equivalent v1.0.2", "find-msvc-tools v0.1.11", "fixed_decimal v0.7.2", "flagset v0.4.7", "form_urlencoded v1.2.2", "from_variant v3.0.0", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hickory-proto v0.26.1", "hostname v0.4.2", "hstr v3.0.6", "hybrid-array v0.4.12", "icu_calendar v2.3.0", "icu_calendar_data v2.3.0", "icu_collections v2.2.0", "icu_datetime v2.3.0", "icu_datetime_data v2.3.0", "icu_decimal v2.3.0", "icu_decimal_data v2.3.0", "icu_locale v2.2.0", "icu_locale_core v2.3.0", "icu_locale_data v2.2.0", "icu_locale_fallback v2.3.0", "icu_locale_fallback_data v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_pattern v0.5.0", "icu_plurals v2.3.0", "icu_plurals_data v2.3.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "icu_time v2.3.0", "icu_time_data v2.3.0", "idna v1.1.0", "idna_adapter v1.2.2", "indexmap v2.14.1", "ipnet v2.12.0", "is-macro v0.3.7", "itoa v1.0.18", "ixdtf v0.6.5", "jiff-tzdb v0.1.6", "jobserver v0.1.34", "lazy_static v1.5.0", "libc v0.2.189", "libm v0.2.16", "libmimalloc-sys v0.1.49", "litemap v0.8.2", "mach2 v0.6.0", "memchr v2.8.1", "miette v7.6.0", "miette-derive v7.6.0", "mimalloc v0.1.52", "minimal-lexical v0.2.1", "new_debug_unreachable v1.0.6", "node-semver v2.2.0", "nom v7.1.3", "num-bigint v0.4.6", "num-integer v0.1.46", "num-traits v0.2.19", "num_cpus v1.17.0", "object v0.37.3", "once_cell v1.21.4", "option-ext v0.2.0", "par-core v2.0.0", "percent-encoding v2.3.2", "perex v0.1.4", "phf v0.11.3", "phf_generator v0.11.3", "phf_macros v0.11.3", "phf_shared v0.11.3", "pin-project-lite v0.2.17", "pkg-config v0.3.33", "portable-atomic v1.13.1", "potential_utf v0.1.5", "proc-macro2 v1.0.106", "psm v0.1.32", "quote v1.0.45", "rand v0.10.2", "rand v0.8.7", "rand_core v0.10.1", "rand_core v0.6.4", "resolv-conf v0.7.6", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "ryu v1.0.23", "ryu-js v1.0.3", "scoped-tls v1.0.1", "seq-macro v0.3.6", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_spanned v1.1.1", "sha2 v0.11.0", "shlex v2.0.1", "simdutf8 v0.1.5", "siphasher v0.3.11", "siphasher v1.0.3", "slotmap v1.1.1", "smallvec v1.15.1", "smartstring v1.0.1", "socket2 v0.6.5", "spki v0.8.0", "stable_deref_trait v1.2.1", "stacker v0.1.25", "static_assertions v1.1.0", "string_enum v1.0.2", "swc_atoms v9.0.3", "swc_common v18.0.1", "swc_ecma_ast v19.0.0", "swc_ecma_parser v29.0.2", "swc_ecma_parser v32.0.0", "swc_ecma_transforms_base v32.0.0", "swc_ecma_utils v25.0.0", "swc_ecma_visit v19.0.0", "swc_eq_ignore_macros v1.0.1", "swc_macros_common v1.0.1", "swc_visit v2.0.1", "syn v2.0.117", "syn v3.0.3", "synstructure v0.13.2", "taffy v0.13.0", "temporal_rs v0.2.6", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "timezone_provider v0.2.6", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "toml v1.1.4+spec-1.1.0", "toml_datetime v1.1.1+spec-1.1.0", "toml_parser v1.1.3+spec-1.1.0", "toml_writer v1.1.2+spec-1.1.0", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "triomphe v0.1.15", "typenum v1.20.1", "tzif v0.4.1", "unicode-id-start v1.4.0", "unicode-ident v1.0.24", "unicode-normalization v0.1.25", "unicode-segmentation v1.13.3", "unicode-width v0.1.14", "unicode-width v0.2.2", "unsafe-libyaml v0.2.11", "url v2.5.8", "utf8_iter v1.0.4", "version_check v0.9.5", "winnow v1.0.3", "writeable v0.6.4", "x509-cert v0.3.0", "xxhash-rust v0.8.18", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7"]}, -{"configuration": "Runtime minimal", "target": "aarch64-apple-darwin", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-runtime", "--no-default-features", "-e", "normal,build", "--target", "aarch64-apple-darwin", "--prefix", "none", "--format", "{p}"], "external_package_versions": 96, "packages": ["ahash v0.8.12", "anyhow v1.0.104", "arrayvec v0.7.6", "base64 v0.22.1", "block-buffer v0.12.0", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "const-oid v0.10.2", "cpufeatures v0.3.0", "critical-section v1.2.0", "crypto-common v0.2.2", "data-encoding v2.11.0", "der v0.8.1", "der_derive v0.8.0", "digest v0.11.3", "displaydoc v0.2.6", "encoding_rs v0.8.35", "find-msvc-tools v0.1.11", "flagset v0.4.7", "form_urlencoded v1.2.2", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "hickory-proto v0.26.1", "hybrid-array v0.4.12", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "ipnet v2.12.0", "itoa v1.0.18", "lazy_static v1.5.0", "libc v0.2.189", "litemap v0.8.2", "mach2 v0.6.0", "memchr v2.8.1", "once_cell v1.21.4", "percent-encoding v2.3.2", "pin-project-lite v0.2.17", "portable-atomic v1.13.1", "potential_utf v0.1.5", "proc-macro2 v1.0.106", "quote v1.0.45", "rand v0.10.2", "rand_core v0.10.1", "resolv-conf v0.7.6", "rustc-demangle v0.1.28", "ryu v1.0.23", "ryu-js v1.0.3", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "sha2 v0.11.0", "shlex v2.0.1", "simdutf8 v0.1.5", "slotmap v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "spki v0.8.0", "stable_deref_trait v1.2.1", "syn v2.0.117", "syn v3.0.3", "synstructure v0.13.2", "taffy v0.13.0", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tracing v0.1.44", "tracing-core v0.1.36", "typenum v1.20.1", "unicode-ident v1.0.24", "url v2.5.8", "utf8_iter v1.0.4", "version_check v0.9.5", "writeable v0.6.4", "x509-cert v0.3.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21"]}, -{"configuration": "Stdlib default", "target": "aarch64-apple-darwin", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-stdlib", "-e", "normal,build", "--target", "aarch64-apple-darwin", "--prefix", "none", "--format", "{p}"], "external_package_versions": 546, "packages": ["adler2 v2.0.1", "aead v0.5.2", "aes v0.8.4", "aes v0.9.1", "aes-gcm v0.10.3", "aes-kw v0.3.1", "ahash v0.8.12", "aligned v0.4.3", "aligned-vec v0.6.4", "alloc-no-stdlib v2.0.4", "alloc-stdlib v0.2.2", "allocator-api2 v0.2.21", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "arc-swap v1.9.1", "arcstr v1.2.0", "arg_enum_proc_macro v0.3.4", "argon2 v0.5.3", "arrayvec v0.7.6", "as-slice v0.2.1", "async-lock v3.4.2", "async-trait v0.1.92", "atoi v2.0.0", "atomic v0.6.1", "atomic-waker v1.1.2", "autocfg v1.5.1", "av-scenechange v0.14.1", "av1-grain v0.2.5", "avif-serialize v0.8.9", "aws-lc-rs v1.17.0", "aws-lc-sys v0.41.0", "backon v1.6.0", "base16ct v0.2.0", "base16ct v1.0.0", "base64 v0.22.1", "base64 v0.23.1", "base64ct v1.8.3", "bcrypt v0.19.3", "bindgen v0.72.1", "bit_field v0.10.3", "bitflags v2.12.1", "bitstream-io v4.10.0", "bitvec v1.0.1", "blake2 v0.10.6", "block-buffer v0.10.4", "block-buffer v0.12.0", "block-padding v0.3.3", "block-padding v0.4.2", "blowfish v0.10.0", "brotli v8.0.4", "brotli-decompressor v5.0.1", "bson v3.1.0", "built v0.8.1", "bytemuck v1.25.0", "byteorder v1.5.0", "byteorder-lite v0.1.0", "bytes v1.12.1", "cbc v0.1.2", "cbc v0.2.1", "cc v1.4.4", "cexpr v0.6.0", "cfg-if v1.0.4", "chacha20 v0.10.0", "chacha20 v0.9.1", "chacha20poly1305 v0.10.1", "chrono v0.4.45", "chrono-tz v0.10.4", "cipher v0.4.4", "cipher v0.5.2", "clang-sys v1.8.1", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "cmake v0.1.58", "cmov v0.5.4", "color_quant v1.1.0", "colorchoice v1.0.5", "combine v4.6.7", "concurrent-queue v2.5.0", "const-oid v0.10.2", "const-oid v0.9.6", "const-random v0.1.18", "const-random-macro v0.1.16", "convert_case v0.10.0", "core-foundation v0.10.1", "core-foundation v0.9.4", "core-foundation-sys v0.8.7", "cpubits v0.1.1", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "crc v3.4.0", "crc-catalog v2.5.0", "crc32fast v1.5.0", "critical-section v1.2.0", "cron v0.17.0", "croner v3.0.1", "crossbeam-channel v0.5.15", "crossbeam-deque v0.8.6", "crossbeam-epoch v0.9.20", "crossbeam-queue v0.3.12", "crossbeam-utils v0.8.21", "crunchy v0.2.4", "crypto-bigint v0.5.5", "crypto-bigint v0.7.5", "crypto-common v0.1.7", "crypto-common v0.2.2", "cssparser v0.37.0", "cssparser-macros v0.7.0", "ctr v0.9.2", "ctutils v0.4.2", "curve25519-dalek v4.1.3", "darling v0.20.11", "darling v0.23.0", "darling_core v0.20.11", "darling_core v0.23.0", "darling_macro v0.20.11", "darling_macro v0.23.0", "dashmap v6.2.1", "data-encoding v2.11.0", "der v0.7.10", "der v0.8.1", "der_derive v0.8.0", "deranged v0.5.8", "derive-syn-parse v0.2.0", "derive-where v1.6.1", "derive_builder v0.20.2", "derive_builder_core v0.20.2", "derive_builder_macro v0.20.2", "derive_more v2.1.1", "derive_more-impl v2.1.1", "digest v0.10.7", "digest v0.11.3", "displaydoc v0.2.6", "dotenvy v0.15.7", "dtoa v1.0.11", "dtoa-short v0.3.5", "dunce v1.0.5", "ecb v0.2.1", "ecdsa v0.16.9", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "ed448 v0.5.0", "ed448-goldilocks v0.14.0-pre.15", "ego-tree v0.11.0", "either v1.16.0", "elliptic-curve v0.13.8", "elliptic-curve v0.14.0", "email-encoding v0.4.1", "email_address v0.2.9", "encoding_rs v0.8.35", "equator v0.4.2", "equator-macro v0.4.2", "equivalent v1.0.2", "errno v0.3.14", "event-listener v5.4.1", "event-listener-strategy v0.5.4", "exr v1.74.0", "fallible-iterator v0.3.0", "fallible-streaming-iterator v0.1.9", "fastrand v2.4.1", "fax v0.2.7", "fdeflate v0.3.7", "ff v0.13.1", "ff v0.14.0", "find-msvc-tools v0.1.11", "flagset v0.4.7", "flate2 v1.1.10", "fnv v1.0.7", "foldhash v0.2.0", "form_urlencoded v1.2.2", "fs_extra v1.3.0", "funty v2.0.0", "futures-channel v0.3.32", "futures-core v0.3.34", "futures-intrusive v0.5.0", "futures-io v0.3.34", "futures-macro v0.3.34", "futures-sink v0.3.34", "futures-task v0.3.34", "futures-timer v3.0.4", "futures-util v0.3.34", "generic-array v0.14.7", "getopts v0.2.24", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "ghash v0.5.1", "ghash v0.6.0", "gif v0.14.2", "gimli v0.34.0", "glob v0.3.3", "governor v0.10.4", "group v0.13.0", "group v0.14.0", "h2 v0.4.19", "half v2.7.1", "hash2curve v0.14.0", "hashbrown v0.14.5", "hashbrown v0.16.1", "hashbrown v0.17.1", "hashlink v0.11.1", "heck v0.5.0", "hex v0.4.3", "hickory-net v0.26.1", "hickory-proto v0.26.1", "hickory-resolver v0.26.1", "hkdf v0.12.4", "hkdf v0.13.0", "hmac v0.12.1", "hmac v0.13.0", "hostname v0.4.2", "html5ever v0.39.0", "http v1.4.1", "http-body v1.0.1", "http-body-util v0.1.5", "httparse v1.10.1", "httpdate v1.0.3", "hybrid-array v0.4.12", "hyper v1.11.1", "hyper-rustls v0.27.9", "hyper-util v0.1.20", "iana-time-zone v0.1.65", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "ident_case v1.0.1", "idna v1.1.0", "idna_adapter v1.2.2", "image v0.25.10", "image-webp v0.2.4", "imgref v1.12.3", "indexmap v2.14.1", "inout v0.1.4", "inout v0.2.2", "ipnet v2.12.0", "is_terminal_polyfill v1.70.2", "itertools v0.12.1", "itertools v0.14.0", "itoa v1.0.18", "jobserver v0.1.34", "jsonwebtoken v11.0.0", "keccak v0.1.6", "keccak v0.2.0", "kem v0.3.0", "lazy_static v1.5.0", "lebe v0.5.3", "lettre v0.11.23", "libc v0.2.189", "libloading v0.8.9", "libm v0.2.16", "libsqlite3-sys v0.37.0", "litemap v0.8.2", "lock_api v0.4.14", "log v0.4.34", "loop9 v0.1.5", "lru v0.18.3", "mach2 v0.6.0", "macro_magic v0.5.1", "macro_magic_core v0.5.1", "macro_magic_core_macros v0.5.1", "macro_magic_macros v0.5.1", "markup5ever v0.39.0", "maybe-rayon v0.1.1", "md-5 v0.10.6", "md-5 v0.11.0", "memchr v2.8.1", "mime v0.3.17", "minimal-lexical v0.2.1", "miniz_oxide v0.8.9", "miniz_oxide v0.9.1", "mio v1.2.1", "ml-kem v0.3.2", "module-lattice v0.2.3", "moka v0.12.15", "mongodb v3.8.2", "mongodb-internal-macros v3.8.2", "moxcms v0.8.1", "nanoid v0.5.0", "new_debug_unreachable v1.0.6", "no_std_io2 v0.9.4", "nom v7.1.3", "nom v8.0.0", "nonzero_ext v0.3.0", "noop_proc_macro v0.3.0", "num-bigint v0.4.6", "num-bigint v0.5.1", "num-bigint-dig v0.8.6", "num-conv v0.2.2", "num-derive v0.4.2", "num-integer v0.1.46", "num-iter v0.1.45", "num-rational v0.4.2", "num-traits v0.2.19", "once_cell v1.21.4", "opaque-debug v0.3.1", "p256 v0.13.2", "p384 v0.13.1", "p521 v0.13.3", "parking v2.2.1", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "password-hash v0.5.0", "paste v1.0.15", "pastey v0.1.1", "pbkdf2 v0.12.2", "pbkdf2 v0.13.0", "pem v3.0.6", "pem-rfc7468 v0.7.0", "pem-rfc7468 v1.0.0", "percent-encoding v2.3.2", "phf v0.11.3", "phf v0.12.1", "phf v0.13.1", "phf_codegen v0.13.1", "phf_generator v0.11.3", "phf_generator v0.13.1", "phf_macros v0.11.3", "phf_macros v0.13.1", "phf_shared v0.11.3", "phf_shared v0.12.1", "phf_shared v0.13.1", "pin-project-lite v0.2.17", "pkcs1 v0.7.5", "pkcs5 v0.7.1", "pkcs8 v0.10.2", "pkcs8 v0.11.0", "pkg-config v0.3.33", "png v0.18.1", "poly1305 v0.8.0", "polyval v0.6.2", "polyval v0.7.3", "portable-atomic v1.13.1", "potential_utf v0.1.5", "powerfmt v0.2.0", "ppv-lite86 v0.2.21", "precomputed-hash v0.1.1", "prefix-trie v0.8.4", "primeorder v0.13.6", "proc-macro2 v1.0.106", "profiling v1.0.18", "profiling-procmacros v1.0.18", "pxfm v0.1.29", "qoi v0.4.1", "quanta v0.12.6", "quick-error v2.0.1", "quote v1.0.45", "quoted_printable v0.5.2", "radium v0.7.0", "rand v0.10.2", "rand v0.8.7", "rand v0.9.4", "rand_chacha v0.3.1", "rand_chacha v0.9.0", "rand_core v0.10.1", "rand_core v0.6.4", "rand_core v0.9.5", "rav1e v0.8.1", "ravif v0.13.0", "rayon v1.12.0", "rayon-core v1.13.0", "redis v1.6.0", "regex v1.13.1", "regex-automata v0.4.18", "regex-syntax v0.8.11", "reqwest v0.12.28", "resolv-conf v0.7.6", "rfc6979 v0.4.0", "rgb v0.8.53", "ring v0.17.14", "rsa v0.9.10", "rusqlite v0.39.0", "rust_decimal v1.43.0", "rustc-demangle v0.1.28", "rustc-hash v2.1.2", "rustc_version v0.4.1", "rustc_version_runtime v0.3.0", "rustls v0.23.43", "rustls-native-certs v0.8.4", "rustls-pemfile v2.2.0", "rustls-pki-types v1.14.1", "rustls-webpki v0.103.13", "rustversion v1.0.22", "ryu v1.0.23", "ryu-js v1.0.3", "salsa20 v0.10.2", "scopeguard v1.2.0", "scraper v0.27.0", "scrypt v0.11.0", "sec1 v0.7.3", "sec1 v0.8.1", "security-framework v3.7.0", "security-framework-sys v2.17.0", "selectors v0.38.0", "semver v1.0.28", "serde v1.0.229", "serde_bytes v0.11.19", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_urlencoded v0.7.1", "serde_with v3.21.0", "serde_with_macros v3.21.0", "servo_arc v0.4.3", "sha1 v0.10.6", "sha1 v0.11.0", "sha1_smol v1.0.1", "sha2 v0.10.9", "sha2 v0.11.0", "sha3 v0.10.9", "sha3 v0.11.0", "sha3 v0.12.0", "sha3-utils v0.5.0", "shake v0.1.0", "shlex v1.3.0", "shlex v2.0.1", "signal-hook-registry v1.4.8", "signature v2.2.0", "signature v3.0.0", "simd-adler32 v0.3.9", "simd_helpers v0.1.0", "simdutf8 v0.1.5", "simple_asn1 v0.6.4", "siphasher v1.0.3", "slab v0.4.12", "slotmap v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "spin v0.9.8", "spinning_top v0.3.0", "spki v0.7.3", "spki v0.8.0", "sponge-cursor v0.1.0", "sqlx v0.9.0", "sqlx-core v0.9.0", "sqlx-mysql v0.9.0", "sqlx-postgres v0.9.0", "stable_deref_trait v1.2.1", "string_cache v0.9.0", "string_cache_codegen v0.6.1", "stringprep v0.1.5", "strsim v0.11.1", "strum v0.27.2", "strum_macros v0.27.2", "subtle v2.6.1", "syn v2.0.117", "syn v3.0.3", "sync_wrapper v1.0.2", "synstructure v0.13.2", "system-configuration v0.7.0", "system-configuration-sys v0.6.0", "taffy v0.13.0", "tagptr v0.2.0", "take_mut v0.2.2", "tap v1.0.1", "tendril v0.5.0", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "tiff v0.11.3", "time v0.3.55", "time-core v0.1.9", "time-macros v0.2.32", "tiny-keccak v2.0.2", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tokio v1.53.1", "tokio-cron-scheduler v0.15.1", "tokio-macros v2.7.0", "tokio-rustls v0.26.4", "tokio-stream v0.1.18", "tokio-tungstenite v0.29.0", "tokio-util v0.7.18", "tower v0.5.3", "tower-http v0.6.11", "tower-layer v0.3.3", "tower-service v0.3.3", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "try-lock v0.2.5", "tungstenite v0.29.0", "typed-builder v0.22.0", "typed-builder-macro v0.22.0", "typenum v1.20.1", "unicode-bidi v0.3.18", "unicode-ident v1.0.24", "unicode-normalization v0.1.25", "unicode-properties v0.1.4", "unicode-segmentation v1.13.3", "unicode-width v0.2.2", "unicode-xid v0.2.6", "universal-hash v0.5.1", "universal-hash v0.6.1", "untrusted v0.9.0", "url v2.5.8", "utf-8 v0.7.6", "utf8_iter v1.0.4", "utf8parse v0.2.2", "uuid v1.26.0", "v_frame v0.3.9", "vcpkg v0.2.15", "version_check v0.9.5", "want v0.3.1", "web-time v1.1.0", "web_atoms v0.2.4", "webpki-roots v0.26.11", "webpki-roots v1.0.9", "weezl v0.1.12", "whoami v2.1.2", "windows-link v0.2.1", "winnow v0.7.15", "writeable v0.6.4", "wyz v0.5.1", "x25519-dalek v2.0.1", "x448 v0.14.0-pre.12", "x509-cert v0.3.0", "xxhash-rust v0.8.18", "y4m v0.8.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerocopy-derive v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zeroize_derive v1.4.3", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21", "zstd v0.13.3", "zstd-safe v7.2.4", "zstd-sys v2.0.16+zstd.1.5.7", "zune-core v0.5.1", "zune-inflate v0.2.54", "zune-jpeg v0.5.15"]}, -{"configuration": "Stdlib minimal", "target": "aarch64-apple-darwin", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-stdlib", "--no-default-features", "-e", "normal,build", "--target", "aarch64-apple-darwin", "--prefix", "none", "--format", "{p}"], "external_package_versions": 137, "packages": ["ahash v0.8.12", "anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "arrayvec v0.7.6", "autocfg v1.5.1", "base64 v0.22.1", "block-buffer v0.10.4", "block-buffer v0.12.0", "cc v1.4.4", "cfg-if v1.0.4", "chacha20 v0.10.0", "chrono v0.4.45", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "colorchoice v1.0.5", "const-oid v0.10.2", "core-foundation-sys v0.8.7", "cpufeatures v0.2.17", "cpufeatures v0.3.0", "critical-section v1.2.0", "crossbeam-utils v0.8.21", "crypto-common v0.1.7", "crypto-common v0.2.2", "curve25519-dalek v4.1.3", "dashmap v6.2.1", "data-encoding v2.11.0", "der v0.8.1", "der_derive v0.8.0", "digest v0.10.7", "digest v0.11.3", "displaydoc v0.2.6", "ed25519 v2.2.3", "ed25519-dalek v2.2.0", "encoding_rs v0.8.35", "find-msvc-tools v0.1.11", "flagset v0.4.7", "form_urlencoded v1.2.2", "generic-array v0.14.7", "getrandom v0.2.17", "getrandom v0.3.4", "getrandom v0.4.2", "gimli v0.34.0", "hashbrown v0.14.5", "heck v0.5.0", "hex v0.4.3", "hickory-proto v0.26.1", "hybrid-array v0.4.12", "iana-time-zone v0.1.65", "icu_collections v2.2.0", "icu_locale_core v2.3.0", "icu_normalizer v2.2.0", "icu_normalizer_data v2.2.0", "icu_properties v2.2.0", "icu_properties_data v2.2.0", "icu_provider v2.3.1", "idna v1.1.0", "idna_adapter v1.2.2", "ipnet v2.12.0", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "lazy_static v1.5.0", "libc v0.2.189", "litemap v0.8.2", "lock_api v0.4.14", "mach2 v0.6.0", "memchr v2.8.1", "num-traits v0.2.19", "once_cell v1.21.4", "parking_lot_core v0.9.12", "percent-encoding v2.3.2", "pin-project-lite v0.2.17", "portable-atomic v1.13.1", "potential_utf v0.1.5", "proc-macro2 v1.0.106", "quote v1.0.45", "rand v0.10.2", "rand_core v0.10.1", "rand_core v0.6.4", "resolv-conf v0.7.6", "rustc-demangle v0.1.28", "rustc_version v0.4.1", "ryu v1.0.23", "ryu-js v1.0.3", "scopeguard v1.2.0", "semver v1.0.28", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "sha2 v0.10.9", "sha2 v0.11.0", "shlex v2.0.1", "signature v2.2.0", "simdutf8 v0.1.5", "slotmap v1.1.1", "smallvec v1.15.1", "socket2 v0.6.5", "spki v0.8.0", "stable_deref_trait v1.2.1", "strsim v0.11.1", "subtle v2.6.1", "syn v2.0.117", "syn v3.0.3", "synstructure v0.13.2", "taffy v0.13.0", "thiserror v1.0.69", "thiserror v2.0.18", "thiserror-impl v1.0.69", "thiserror-impl v2.0.18", "tinystr v0.8.4", "tinyvec v1.11.0", "tinyvec_macros v0.1.1", "tracing v0.1.44", "tracing-core v0.1.36", "typenum v1.20.1", "unicode-ident v1.0.24", "url v2.5.8", "utf8_iter v1.0.4", "utf8parse v0.2.2", "version_check v0.9.5", "writeable v0.6.4", "x509-cert v0.3.0", "yoke v0.8.3", "yoke-derive v0.8.2", "zerocopy v0.8.50", "zerofrom v0.1.8", "zerofrom-derive v0.1.7", "zeroize v1.8.2", "zerotrie v0.2.5", "zerovec v0.11.8", "zerovec-derive v0.11.6", "zmij v1.0.21"]}, -{"configuration": "Compose", "target": "aarch64-apple-darwin", "command": ["cargo", "tree", "--locked", "--offline", "-p", "perry-container-compose", "-e", "normal,build", "--target", "aarch64-apple-darwin", "--prefix", "none", "--format", "{p}"], "external_package_versions": 92, "packages": ["anstream v1.0.0", "anstyle v1.0.14", "anstyle-parse v1.0.0", "anstyle-query v1.1.5", "anyhow v1.0.104", "async-trait v0.1.92", "atty v0.2.14", "bitflags v2.12.1", "block-buffer v0.12.0", "bytes v1.12.1", "cfg-if v1.0.4", "chacha20 v0.10.0", "clap v4.6.6", "clap_builder v4.6.6", "clap_derive v4.6.4", "clap_lex v1.1.0", "colorchoice v1.0.5", "console v0.15.11", "console v0.16.4", "const-oid v0.10.2", "crossbeam-utils v0.8.21", "crypto-common v0.2.2", "dashmap v6.2.1", "dialoguer v0.11.0", "digest v0.11.3", "dotenvy v0.15.7", "equivalent v1.0.2", "errno v0.3.14", "fastrand v2.4.1", "getrandom v0.4.2", "hashbrown v0.14.5", "hashbrown v0.17.1", "heck v0.5.0", "hex v0.4.3", "hybrid-array v0.4.12", "indexmap v2.14.1", "is_terminal_polyfill v1.70.2", "itoa v1.0.18", "lazy_static v1.5.0", "libc v0.2.189", "lock_api v0.4.14", "log v0.4.34", "matchers v0.2.0", "md-5 v0.11.0", "memchr v2.8.1", "mio v1.2.1", "nu-ansi-term v0.50.3", "once_cell v1.21.4", "parking_lot v0.12.5", "parking_lot_core v0.9.12", "pin-project-lite v0.2.17", "proc-macro2 v1.0.106", "quote v1.0.45", "rand v0.10.2", "rand_core v0.10.1", "regex-automata v0.4.18", "regex-syntax v0.8.11", "rustix v1.1.4", "ryu v1.0.23", "scopeguard v1.2.0", "serde v1.0.229", "serde_core v1.0.229", "serde_derive v1.0.229", "serde_json v1.0.151", "serde_yaml v0.9.34+deprecated", "sharded-slab v0.1.7", "shell-words v1.1.1", "signal-hook-registry v1.4.8", "smallvec v1.15.1", "socket2 v0.6.5", "strsim v0.11.1", "syn v2.0.117", "syn v3.0.3", "tempfile v3.27.0", "thiserror v1.0.69", "thiserror-impl v1.0.69", "thread_local v1.1.9", "tokio v1.53.1", "tokio-macros v2.7.0", "tracing v0.1.44", "tracing-attributes v0.1.31", "tracing-core v0.1.36", "tracing-log v0.2.0", "tracing-subscriber v0.3.23", "typenum v1.20.1", "unicode-ident v1.0.24", "unicode-width v0.2.2", "unsafe-libyaml v0.2.11", "utf8parse v0.2.2", "which v8.0.6", "zeroize v1.8.2", "zmij v1.0.21"]} -]} diff --git a/docs/audits/rust-dependency-cleanup-2026-09-14.json b/docs/audits/rust-dependency-cleanup-2026-09-14.json deleted file mode 100644 index b9450c30a98..00000000000 --- a/docs/audits/rust-dependency-cleanup-2026-09-14.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "baseline": "4945fc1f7498debc76e9f861d7cf1517da5e67c9", - "semantics": "Combined manifest cleanup. Locked Cargo normal/build trees, no performance measurement.", - "graphs": [ - { - "configuration": "CLI default", - "target": "x86_64-pc-windows-msvc", - "before": 352, - "after": 350, - "removed": [ - "thiserror v1.0.69", - "thiserror-impl v1.0.69" - ], - "added": [], - "command": [ - "cargo", - "tree", - "--locked", - "--offline", - "-p", - "perry", - "-e", - "normal,build", - "--target", - "x86_64-pc-windows-msvc", - "--prefix", - "none", - "--format", - "{p}" - ] - }, - { - "configuration": "CLI dev", - "target": "x86_64-pc-windows-msvc", - "before": 350, - "after": 348, - "removed": [ - "thiserror v1.0.69", - "thiserror-impl v1.0.69" - ], - "added": [], - "command": [ - "cargo", - "tree", - "--locked", - "--offline", - "-p", - "perry", - "--no-default-features", - "--features", - "dev-cli", - "-e", - "normal,build", - "--target", - "x86_64-pc-windows-msvc", - "--prefix", - "none", - "--format", - "{p}" - ] - }, - { - "configuration": "Runtime default", - "target": "x86_64-pc-windows-msvc", - "before": 218, - "after": 218, - "removed": [], - "added": [], - "command": [ - "cargo", - "tree", - "--locked", - "--offline", - "-p", - "perry-runtime", - "-e", - "normal,build", - "--target", - "x86_64-pc-windows-msvc", - "--prefix", - "none", - "--format", - "{p}" - ] - }, - { - "configuration": "Runtime minimal", - "target": "x86_64-pc-windows-msvc", - "before": 108, - "after": 105, - "removed": [ - "anyhow v1.0.104", - "thiserror v1.0.69", - "thiserror-impl v1.0.69" - ], - "added": [], - "command": [ - "cargo", - "tree", - "--locked", - "--offline", - "-p", - "perry-runtime", - "--no-default-features", - "-e", - "normal,build", - "--target", - "x86_64-pc-windows-msvc", - "--prefix", - "none", - "--format", - "{p}" - ] - }, - { - "configuration": "Stdlib default", - "target": "x86_64-pc-windows-msvc", - "before": 556, - "after": 527, - "removed": [ - "anstream v1.0.0", - "anstyle v1.0.14", - "anstyle-parse v1.0.0", - "anstyle-query v1.1.5", - "anstyle-wincon v3.0.11", - "chrono-tz v0.10.4", - "clap v4.6.6", - "clap_builder v4.6.6", - "clap_derive v4.6.4", - "clap_lex v1.1.0", - "colorchoice v1.0.5", - "croner v3.0.1", - "darling v0.20.11", - "darling_core v0.20.11", - "darling_macro v0.20.11", - "derive_builder v0.20.2", - "derive_builder_core v0.20.2", - "derive_builder_macro v0.20.2", - "heck v0.5.0", - "is_terminal_polyfill v1.70.2", - "once_cell_polyfill v1.70.2", - "phf v0.12.1", - "phf_shared v0.12.1", - "strum v0.27.2", - "strum_macros v0.27.2", - "thiserror v1.0.69", - "thiserror-impl v1.0.69", - "tokio-cron-scheduler v0.15.1", - "utf8parse v0.2.2" - ], - "added": [], - "command": [ - "cargo", - "tree", - "--locked", - "--offline", - "-p", - "perry-stdlib", - "-e", - "normal,build", - "--target", - "x86_64-pc-windows-msvc", - "--prefix", - "none", - "--format", - "{p}" - ] - }, - { - "configuration": "Stdlib minimal", - "target": "x86_64-pc-windows-msvc", - "before": 149, - "after": 132, - "removed": [ - "anstream v1.0.0", - "anstyle v1.0.14", - "anstyle-parse v1.0.0", - "anstyle-query v1.1.5", - "anstyle-wincon v3.0.11", - "clap v4.6.6", - "clap_builder v4.6.6", - "clap_derive v4.6.4", - "clap_lex v1.1.0", - "colorchoice v1.0.5", - "heck v0.5.0", - "is_terminal_polyfill v1.70.2", - "once_cell_polyfill v1.70.2", - "strsim v0.11.1", - "thiserror v1.0.69", - "thiserror-impl v1.0.69", - "utf8parse v0.2.2" - ], - "added": [], - "command": [ - "cargo", - "tree", - "--locked", - "--offline", - "-p", - "perry-stdlib", - "--no-default-features", - "-e", - "normal,build", - "--target", - "x86_64-pc-windows-msvc", - "--prefix", - "none", - "--format", - "{p}" - ] - }, - { - "configuration": "Compose", - "target": "x86_64-pc-windows-msvc", - "before": 98, - "after": 91, - "removed": [ - "anyhow v1.0.104", - "atty v0.2.14", - "crossbeam-utils v0.8.21", - "dashmap v6.2.1", - "dotenvy v0.15.7", - "hashbrown v0.14.5", - "winapi v0.3.9" - ], - "added": [], - "command": [ - "cargo", - "tree", - "--locked", - "--offline", - "-p", - "perry-container-compose", - "-e", - "normal,build", - "--target", - "x86_64-pc-windows-msvc", - "--prefix", - "none", - "--format", - "{p}" - ] - } - ], - "removed_declarations": { - "Cargo.toml": [ - "similar = \"2.4\"" - ], - "crates/perry-codegen/Cargo.toml": [ - "thiserror.workspace = true" - ], - "crates/perry-container-compose/Cargo.toml": [ - "anyhow = { workspace = true }", - "dotenvy = { workspace = true }", - "dashmap.workspace = true", - "atty = \"0.2\"" - ], - "crates/perry-ext-fastify/Cargo.toml": [ - "lazy_static.workspace = true" - ], - "crates/perry-hir/Cargo.toml": [ - "thiserror.workspace = true" - ], - "crates/perry-parser/Cargo.toml": [ - "thiserror.workspace = true" - ], - "crates/perry-runtime/Cargo.toml": [ - "thiserror.workspace = true", - "anyhow.workspace = true" - ], - "crates/perry-stdlib/Cargo.toml": [ - "bundled-cron = [\"dep:cron\", \"dep:tokio-cron-scheduler\", \"async-runtime\"]", - "thiserror.workspace = true", - "anyhow.workspace = true", - "itoa.workspace = true", - "ryu.workspace = true", - "tokio-cron-scheduler = { version = \"0.15\", optional = true }", - "clap = { version = \"4.4\", features = [\"derive\"] }" - ], - "crates/perry-transform/Cargo.toml": [ - "thiserror.workspace = true", - "anyhow.workspace = true" - ], - "crates/perry-ui-android/Cargo.toml": [ - "serde_json.workspace = true", - "itoa.workspace = true", - "ryu.workspace = true" - ], - "crates/perry-updater/Cargo.toml": [ - "serde_json.workspace = true" - ] - } -} diff --git a/docs/audits/rust-dependency-decisions-2026-09-14.json b/docs/audits/rust-dependency-decisions-2026-09-14.json deleted file mode 100644 index 9291bd73d39..00000000000 --- a/docs/audits/rust-dependency-decisions-2026-09-14.json +++ /dev/null @@ -1,197 +0,0 @@ -{ -"aes": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"aes-gcm": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"aes-kw": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"ahash": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"aho-corasick": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"anyhow": {"decision": "Keep / prune edges", "reason": "Keep real compiler error-context uses; runtime, stdlib, transform and compose edges have no source references."}, -"argon2": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"async-trait": {"decision": "Keep", "reason": "ContainerBackend uses boxed dynamic dispatch; native async trait syntax alone does not preserve that interface."}, -"atty": {"decision": "Remove", "reason": "No compose source references; installer uses console::Term. Future direct terminal checks can use std::io::IsTerminal."}, -"base64": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"bcrypt": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"block2": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"brotli": {"decision": "Keep / gate", "reason": "Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits."}, -"bson": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"bytes": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"cairo-rs": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"cbc": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"cc": {"decision": "Keep / build", "reason": "Build-time native toolchain glue or table generation. These are not runtime library payloads; keep generated artifacts and platform compatibility."}, -"chacha20poly1305": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"chrono": {"decision": "Keep / scope", "reason": "Date adapters, cron and SQL conversions need calendar/local-time semantics; other retainers defeat a blanket rewrite."}, -"clap": {"decision": "Keep CLI / prune stdlib", "reason": "CLI uses derives throughout; stdlib Commander is already handwritten. Removing its unused edge drops 15 packages from minimal Windows stdlib."}, -"console": {"decision": "Keep / align", "reason": "Terminal behavior shared with prompt/progress libraries; align compose dialoguer to eliminate its older console copy."}, -"const-oid": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"cron": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"ctr": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"dashmap": {"decision": "Keep / investigate", "reason": "Handle registries need reentrancy, concurrency, lifetime and GC guarantees. Benchmark any mutex/slab replacement; compose edge appears unused."}, -"der": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"dialoguer": {"decision": "Align / trim", "reason": "Compose 0.11 versus CLI 0.12; alignment drops four packages net in compose. Check editor/password features separately."}, -"dirs": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"dotenvy": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"dssim-core": {"decision": "Keep / tests", "reason": "Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling."}, -"ecb": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"ed25519-dalek": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"ed448-goldilocks": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"encoding_rs": {"decision": "Keep / build", "reason": "Build-time native toolchain glue or table generation. These are not runtime library payloads; keep generated artifacts and platform compatibility."}, -"env_logger": {"decision": "Possible / low priority", "reason": "Only main::init directly uses it. Small log::Log sink is feasible but must preserve RUST_LOG filtering and concurrent output; four exclusive lock packages."}, -"fast_image_resize": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"flate2": {"decision": "Keep / gate", "reason": "Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits."}, -"fslock": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"futures-util": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"ghash": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"gimli": {"decision": "Keep", "reason": "Already read-only with defaults disabled; unwind CFI decoding is correctness-critical."}, -"governor": {"decision": "Candidate / trim first", "reason": "Keyed limiter is already owned; legacy direct limiter still uses GCRA. std-only features drop ten packages from the extension before any rewrite."}, -"gstreamer": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"gstreamer-app": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"gtk4": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"h2": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"hex": {"decision": "Possible / very low priority", "reason": "Shared hex helper is small, but crate remains transitive. Preserve uppercase, validation and allocation behavior; defer behind graph wins."}, -"hickory-proto": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"hkdf": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"hmac": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"hostname": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"http-body-util": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"httpdate": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"hyper": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"hyper-util": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"icu_calendar": {"decision": "Keep / feature edge", "reason": "intl-datetime uses this direct edge to activate compiled calendar data; re-exported types hide lexical references. Review feature propagation before removal."}, -"icu_datetime": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"icu_decimal": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"icu_locale": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"icu_locale_core": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"icu_provider": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"icu_time": {"decision": "Keep / feature edge", "reason": "intl-datetime activates compiled time data through this edge; lexical absence does not prove redundancy."}, -"idna": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"image": {"decision": "Keep / trim formats", "reason": "Default decoder set is broad; review supported inputs before trimming. AVIF output and SIMD resize are real uses."}, -"indexmap": {"decision": "Keep", "reason": "Ordered Compose maps and serde behavior matter; HashMap or linear vector replacements change semantics or scale."}, -"indicatif": {"decision": "Keep / command gate", "reason": "Progress for downloads, publish and remote execution; terminal redraw has modest ownership value."}, -"inkwell": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"itoa": {"decision": "Keep / prune edges", "reason": "Allocation-free runtime formatting; stdlib and Android UI declarations have no lexical uses."}, -"jni": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"jsonwebtoken": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"kamadak-exif": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"ksni": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"lazy_static": {"decision": "Replace with std", "reason": "Migrate owned globals to LazyLock/OnceLock while preserving initialization and poisoning behavior; transitive users retain the crate."}, -"lettre": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"libc": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"libmimalloc-sys": {"decision": "Keep / gate", "reason": "Extended API drives GC allocator maintenance and Apple VM tags; use the existing alloc-mimalloc feature."}, -"libshumate": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"llvm-sys": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"log": {"decision": "Keep", "reason": "Shared logging facade; replacing it fragments logging and saves little."}, -"lru": {"decision": "Possible / low priority", "reason": "One exclusive package. An indexed recency store must preserve O(1) lookup, TTL, eviction and mutable GC roots; justify with workload measurements."}, -"mach2": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"md-5": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"mimalloc": {"decision": "Keep / existing A/B", "reason": "System allocation already selectable; measure that mode. A general allocator rewrite is a separate major project."}, -"ml-kem": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"mongodb": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"mpris-server": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"nanoid": {"decision": "Candidate / small", "reason": "Default/sized generation use nanoid; custom alphabet already uses rand 0.10. Share a small helper with a maintained cryptographic RNG and unbiased selection."}, -"node-semver": {"decision": "Keep", "reason": "Bun needs npm range grammar; Rust semver is not behavior-equivalent. Already gated with bun-cli-utils."}, -"notify": {"decision": "Keep / gate", "reason": "Native file events replaced polling. Preserve native event semantics and platform gating."}, -"objc2": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"objc2-app-kit": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"objc2-core-foundation": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"objc2-foundation": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"objc2-ui-kit": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"object": {"decision": "Keep", "reason": "Read-only ELF/Mach-O/PE reader for size reporting, already feature-trimmed; multi-format hand parsing is poor value."}, -"once_cell": {"decision": "Replace with std", "reason": "Owned uses are sync::Lazy; use LazyLock while preserving shared state and scanner semantics. Upstream users still retain once_cell."}, -"p12": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"p256": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"p384": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"p521": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"pbkdf2": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"pem": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"perex": {"decision": "Already owned", "reason": "Registry metadata points to github.com/PerryTS/perex. Preserve Perry's single regex engine and independent test oracle."}, -"pkcs5": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"png": {"decision": "Keep / gate", "reason": "Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits."}, -"printpdf": {"decision": "Candidate / focused spike", "reason": "Five-operation writer with built-in Helvetica/text/lines/pages; HTML already disabled. Potentially remove 22 exclusive lock packages with a bounded writer."}, -"proptest": {"decision": "Keep / tests", "reason": "Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling."}, -"qrcodegen": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"rand": {"decision": "Keep / align", "reason": "Reuse maintained RNGs; transitive API generations differ. NanoID removal alone cannot remove rand 0.9 from MongoDB/WebSocket/image/PDF graphs."}, -"rand_core": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"rayon": {"decision": "Keep", "reason": "Compiler parallel work benefits from work stealing; custom pool requires scaling and panic-propagation evidence. Other retainers remain."}, -"redis": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"regex": {"decision": "Keep / tests", "reason": "Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling."}, -"reqwest": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"resolv-conf": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"rgb": {"decision": "Keep / tests", "reason": "Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling."}, -"ring": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"rsa": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"rusqlite": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"rust_decimal": {"decision": "Keep / gate", "reason": "Decimal arithmetic and rounding are the adapter contract; replacing them adds substantial correctness work."}, -"rustc-demangle": {"decision": "Keep", "reason": "Small shared implementation of Rust symbol grammar used by stacks and size reports."}, -"rustls": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"rustls-native-certs": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"rustls-pemfile": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"rustls-webpki": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"ryu": {"decision": "Keep / prune edges", "reason": "Retain generic formatting where used; stdlib/Android declarations appear unused. Do not confuse with ECMAScript ryu-js spelling."}, -"ryu-js": {"decision": "Keep", "reason": "ECMAScript shortest-number spelling is a JSON compatibility and hot-path requirement."}, -"scraper": {"decision": "Keep / gate", "reason": "Cheerio requires real HTML and selectors, including malformed-document behavior; preserve the parser and adapter gate."}, -"scrypt": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"semver": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"serde": {"decision": "Keep / scope", "reason": "Typed Rust configuration and interchange across many crates; trim features rather than own a serialization framework."}, -"serde_json": {"decision": "Keep / prune edges", "reason": "JS hot-path JSON is already owned. Keep Rust config/interchange parsing; updater and Android declarations appear unused."}, -"serde_yaml": {"decision": "Migrate upstream", "reason": "Locked 0.9.34+deprecated; evaluate a maintained compatible successor with a Compose regression corpus. Do not own a YAML parser."}, -"sha1": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"sha2": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"sha3": {"decision": "Keep used versions / prune edge", "reason": "Stdlib sha3 0.12 alias has no lexical use; SHAKE uses shake, KMAC uses sha3_010. Audit only the unused version edge."}, -"sha3-utils": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"shake": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"simdutf8": {"decision": "Keep", "reason": "Single hot-path UTF-8 validation use; std::str::from_utf8 is an A/B alternative, not an assumed speed improvement."}, -"socket2": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"spki": {"decision": "Keep / prune stdlib edge", "reason": "node-forge imports it; stdlib has no lexical references. Check PEM/alloc feature propagation before removing that edge."}, -"sqlx": {"decision": "Keep / split features", "reason": "Bundled stdlib enables mysql and postgres together; activate backends from individual features as extensions already do."}, -"stacker": {"decision": "Keep", "reason": "Protects three lowering recursion boundaries and SWC. Remove only with bounded/iterative traversal evidence."}, -"swc_bundler": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"swc_common": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"swc_ecma_ast": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"swc_ecma_codegen": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"swc_ecma_loader": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"swc_ecma_parser": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"swc_ecma_transforms_base": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"swc_ecma_transforms_react": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"swc_ecma_transforms_typescript": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"swc_ecma_visit": {"decision": "Keep / align", "reason": "Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine."}, -"taffy": {"decision": "Keep / gate TUI", "reason": "Already trimmed to flexbox but always a runtime dependency; gate the TUI surface before considering layout-engine ownership."}, -"tar": {"decision": "Keep / gate", "reason": "Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits."}, -"tempfile": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"temporal_rs": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"thiserror": {"decision": "Keep / prune edges", "reason": "Compose uses typed errors; compiler/runtime/stdlib/transform declarations have no lexical uses. Remove stale edges, preserve useful derives."}, -"time": {"decision": "Keep / align", "reason": "Node-forge and upstream formats need date/time handling; no convincing rewrite saving."}, -"timezone_provider": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"tiny_http": {"decision": "Keep / tooling", "reason": "Synchronous chaos/test-control server; owning HTTP parsing offers little payoff on this tooling path."}, -"tokio": {"decision": "Deferred", "reason": "Separate session owns the removal verdict. This audit records dependent adapters and existing feature boundaries."}, -"tokio-cron-scheduler": {"decision": "Remove", "reason": "Zero source references; own cron queues already use cron::Schedule. Deleting the edge removes 13 packages from full Windows stdlib."}, -"tokio-rustls": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"tokio-tungstenite": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"toml": {"decision": "Keep", "reason": "CLI config and gated Bun API require full TOML syntax and diagnostics."}, -"tracing": {"decision": "Keep", "reason": "Shared Compose/upstream instrumentation facade; little marginal value in a custom replacement."}, -"tracing-subscriber": {"decision": "Keep / gate CLI", "reason": "Only compose main installs it; gate with executable functionality when slimming its library."}, -"tungstenite": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"unicode-normalization": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"unicode-segmentation": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"unsafe-libyaml": {"decision": "Keep backend / scope", "reason": "Bun YAML and serde_yaml parser backend; review alongside YAML migration, not a parser rewrite."}, -"url": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"uuid": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"validator": {"decision": "Keep / tests", "reason": "Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling."}, -"walkdir": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"wasm-encoder": {"decision": "Keep / align", "reason": "Binary emission correctness for Wasm; align compatible versions with tooling."}, -"wasmi": {"decision": "Keep / isolate", "reason": "Wasm host already isolated with defaults disabled and required SIMD enabled; interpreter rewrite is a major engine project."}, -"webkit6": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"webpki-roots": {"decision": "Keep / scope", "reason": "Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study."}, -"webview2-com": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"which": {"decision": "Keep", "reason": "Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates."}, -"windows": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"windows-core": {"decision": "Keep / macro dependency", "reason": "COM implement macros emit absolute ::windows_core paths. No lexical reference is a known false positive; keep version alignment."}, -"windows-reactor": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"windows-sys": {"decision": "Keep / platform", "reason": "Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit."}, -"winresource": {"decision": "Keep / build", "reason": "Build-time native toolchain glue or table generation. These are not runtime library payloads; keep generated artifacts and platform compatibility."}, -"writeable": {"decision": "Keep / gate", "reason": "Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility."}, -"x25519-dalek": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"x448": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"x509-cert": {"decision": "Keep", "reason": "Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats."}, -"xxhash-rust": {"decision": "Keep / gate", "reason": "Bun exposes exact xxHash64 output; DefaultHasher changes the contract. Already feature gated."}, -"zip": {"decision": "Keep / trim first", "reason": "Updates/IPA reading and deflated HAP writing; Deflate-only graph drops 17 packages. Validate accepted archive methods before narrowing."}, -"zstd": {"decision": "Keep / gate", "reason": "Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits."} -} diff --git a/docs/audits/rust-dependency-decisions-2026-09-14.md b/docs/audits/rust-dependency-decisions-2026-09-14.md deleted file mode 100644 index 5413b3773d4..00000000000 --- a/docs/audits/rust-dependency-decisions-2026-09-14.md +++ /dev/null @@ -1,209 +0,0 @@ -# Rust dependency decisions ? 2026-09-14 - -Baseline `4945fc1f7498debc76e9f861d7cf1517da5e67c9`. All 195 direct external package names are assessed below. Version lists include versions of that name pulled only transitively. Perex is Perry-owned despite being a registry dependency. - -Read [the findings and priorities](../rust-dependency-audit.md) first. Exact manifests, aliases, feature/target predicates, source references, reverse edges and all 1,003 external lock package identities are in [the census](rust-dependencies-2026-09-14.json). [Decision data](rust-dependency-decisions-2026-09-14.json) mirrors this table. - -Owners omit `perry-`. `?` = optional; `@` = target-specific; `(build)` / `(dev)` = dependency kind. Each row links an example source reference or its manifest. Lexical references are review aids, not proof of active/unused code. - -| Library (locked versions) | Direct owners | Recommendation and rationale | Evidence | -|---|---|---|---| -| `aes` (0.8.4, 0.9.1) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/cipher.rs#L70) | -| `aes-gcm` (0.10.3) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/cipher.rs#L70) | -| `aes-kw` (0.3.1) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/cipher.rs#L916) | -| `ahash` (0.8.12) | runtime | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/json/parser.rs#L40) | -| `aho-corasick` (1.1.4) | codegen | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-codegen/src/codegen/retained_source_pool.rs#L5) | -| `anyhow` (1.0.104) | codegen-arkts, codegen-glance, codegen-js, codegen-swiftui, codegen-wasm, codegen-wear-tiles, codegen, container-compose, container-e2e (dev), doc-tests, ext-typescript, hir, parser, runtime, stdlib, transform, updater, perry | **Keep / prune edges** ? Keep real compiler error-context uses; runtime, stdlib, transform and compose edges have no source references. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-codegen-arkts/src/lib.rs#L49) | -| `argon2` (0.5.3) | ext-argon2, stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-argon2/src/lib.rs#L6) | -| `async-trait` (0.1.92) | container-compose | **Keep** ? ContainerBackend uses boxed dynamic dispatch; native async trait syntax alone does not preserve that interface. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/backend/cli_backend.rs#L7) | -| `atty` (0.2.14) | container-compose | **Remove** ? No compose source references; installer uses console::Term. Future direct terminal checks can use std::io::IsTerminal. | [manifest](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/Cargo.toml) | -| `base64` (0.22.1, 0.23.1) | codegen-wasm, ext-http, ext-jsonwebtoken, runtime, stdlib?, ui-android@, ui-gtk4@, ui-ios@, ui-macos@, ui-tvos@, ui-visionos@, ui-windows-winui@, ui-windows@, updater, perry | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-codegen-wasm/src/lib.rs#L12) | -| `bcrypt` (0.19.3) | ext-bcrypt, stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-bcrypt/src/lib.rs#L38) | -| `block2` (0.6.2) | ext-ads?@, ui-ios@, ui-macos@, ui-tvos@, ui-visionos@, ui-watchos@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-ads/src/ios_real.rs#L38) | -| `brotli` (8.0.4) | ext-zlib, stdlib? | **Keep / gate** ? Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-zlib/src/stream.rs#L110) | -| `bson` (3.1.0) | ext-mongodb, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-mongodb/src/lib.rs#L36) | -| `bytes` (1.12.1) | ext-fastify, ext-fetch, ext-http, ext-net, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-fastify/src/context.rs#L667) | -| `cairo-rs` (0.20.12, 0.22.9) | ui-gtk4@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-gtk4/src/widgets/canvas.rs#L207) | -| `cbc` (0.1.2, 0.2.1) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/util.rs#L7) | -| `cc` (1.4.4) | audio-miniaudio (build), runtime (build) | **Keep / build** ? Build-time native toolchain glue or table generation. These are not runtime library payloads; keep generated artifacts and platform compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-audio-miniaudio/build.rs#L18) | -| `chacha20poly1305` (0.10.1) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/webcrypto/aes.rs#L155) | -| `chrono` (0.4.45) | ext-cron, ext-dayjs, ext-moment, ext-mysql2, stdlib, perry | **Keep / scope** ? Date adapters, cron and SQL conversions need calendar/local-time semantics; other retainers defeat a blanket rewrite. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-cron/src/lib.rs#L22) | -| `clap` (4.6.6) | container-compose, doc-tests, stdlib, perry | **Keep CLI / prune stdlib** ? CLI uses derives throughout; stdlib Commander is already handwritten. Removing its unused edge drops 15 packages from minimal Windows stdlib. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/cli.rs#L5) | -| `console` (0.15.11, 0.16.4) | container-compose, perry | **Keep / align** ? Terminal behavior shared with prompt/progress libraries; align compose dialoguer to eliminate its older console copy. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/installer.rs#L5) | -| `const-oid` (0.10.2, 0.9.6) | ext-node-forge | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-node-forge/src/crypto.rs#L19) | -| `cron` (0.17.0) | ext-cron, stdlib? | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-cron/src/lib.rs#L23) | -| `ctr` (0.9.2) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/cipher.rs#L96) | -| `dashmap` (5.5.3, 6.2.1) | container-compose, ffi, stdlib | **Keep / investigate** ? Handle registries need reentrancy, concurrency, lifetime and GC guarantees. Benchmark any mutex/slab replacement; compose edge appears unused. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ffi/src/handle.rs#L75) | -| `der` (0.7.10, 0.8.1) | ext-node-forge | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-node-forge/src/crypto.rs#L20) | -| `dialoguer` (0.11.0, 0.12.0) | container-compose, perry | **Align / trim** ? Compose 0.11 versus CLI 0.12; alignment drops four packages net in compose. Check editor/password features separately. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/installer.rs#L6) | -| `dirs` (6.0.0) | runtime?, ui-gtk4@, ui@, perry | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/os.rs#L169) | -| `dotenvy` (0.15.7) | container-compose, perry | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry/src/commands/publish/mod.rs#L90) | -| `dssim-core` (3.5.1) | doc-tests | **Keep / tests** ? Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-doc-tests/src/image_diff.rs#L61) | -| `ecb` (0.1.2, 0.2.1) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/cipher.rs#L64) | -| `ed25519-dalek` (2.2.0) | stdlib?, updater, perry? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/hash.rs#L51) | -| `ed448-goldilocks` (0.14.0-pre.15) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/webcrypto/hmac.rs#L156) | -| `encoding_rs` (0.8.35) | runtime (build) | **Keep / build** ? Build-time native toolchain glue or table generation. These are not runtime library payloads; keep generated artifacts and platform compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/build.rs#L494) | -| `env_logger` (0.10.2) | perry | **Possible / low priority** ? Only main::init directly uses it. Small log::Log sink is feasible but must preserve RUST_LOG filtering and concurrent output; four exclusive lock packages. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry/src/main.rs#L378) | -| `fast_image_resize` (6.1.0) | ext-sharp | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-sharp/src/lib.rs#L334) | -| `flate2` (1.1.10) | ext-zlib, stdlib?, perry | **Keep / gate** ? Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-zlib/src/lib.rs#L9) | -| `fslock` (0.2.1) | perry | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry/src/commands/compile/optimized_libs/driver.rs#L774) | -| `futures-util` (0.3.34) | ext-mongodb, ext-ws, stdlib?, perry | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-mongodb/src/lib.rs#L37) | -| `ghash` (0.5.1, 0.6.0) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/cipher.rs#L116) | -| `gimli` (0.34.0) | runtime | **Keep** ? Already read-only with defaults disabled; unwind CFI decoding is correctness-critical. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/eh_walker.rs#L32) | -| `governor` (0.10.4) | ext-ratelimit, stdlib? | **Candidate / trim first** ? Keyed limiter is already owned; legacy direct limiter still uses GCRA. std-only features drop ten packages from the extension before any rewrite. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-ratelimit/src/lib.rs#L20) | -| `gstreamer` (0.25.3) | ui-gtk4@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-gtk4/src/camera.rs#L25) | -| `gstreamer-app` (0.25.2) | ui-gtk4@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-gtk4/src/camera.rs#L1) | -| `gtk4` (0.9.7) | ui-gtk4@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-gtk4/src/app.rs#L1) | -| `h2` (0.4.19) | ext-http | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/server/http2_server/session.rs#L322) | -| `hex` (0.4.3) | container-compose, runtime?, stdlib?, updater, perry | **Possible / very low priority** ? Shared hex helper is small, but crate remains transitive. Preserve uppercase, validation and allocation behavior; defer behind graph wins. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/compose.rs#L24) | -| `hickory-proto` (0.26.1) | runtime | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/dns_resolver.rs#L17) | -| `hkdf` (0.12.4, 0.13.0) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/kdf.rs#L1107) | -| `hmac` (0.12.1, 0.13.0) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/hash_handles.rs#L156) | -| `hostname` (0.4.2) | runtime? | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/dns/ffi.rs#L15) | -| `http-body-util` (0.1.5) | ext-fastify, ext-http, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-fastify/src/server.rs#L18) | -| `httpdate` (1.0.3) | ext-http | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/server/response.rs#L591) | -| `hyper` (1.11.1) | ext-fastify, ext-http, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-fastify/src/server.rs#L19) | -| `hyper-util` (0.1.20) | ext-fastify, ext-http, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-fastify/src/server.rs#L22) | -| `icu_calendar` (2.3.0) | runtime? | **Keep / feature edge** ? intl-datetime uses this direct edge to activate compiled calendar data; re-exported types hide lexical references. Review feature propagation before removal. | [manifest](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/Cargo.toml) | -| `icu_datetime` (2.3.0) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/intl/icu_dtf.rs#L10) | -| `icu_decimal` (2.3.0) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/intl/number_format.rs#L513) | -| `icu_locale` (2.2.0) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/intl/locale/likely_subtags.rs#L14) | -| `icu_locale_core` (2.3.0) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/intl/icu_dtf.rs#L17) | -| `icu_provider` (2.3.1) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/intl/number_format.rs#L514) | -| `icu_time` (2.3.0) | runtime? | **Keep / feature edge** ? intl-datetime activates compiled time data through this edge; lexical absence does not prove redundancy. | [manifest](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/Cargo.toml) | -| `idna` (1.1.0) | runtime?, validation | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/tls.rs#L1235) | -| `image` (0.25.10) | doc-tests, ext-sharp, stdlib? | **Keep / trim formats** ? Default decoder set is broad; review supported inputs before trimming. AVIF output and SIMD resize are real uses. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-doc-tests/src/image_diff.rs#L43) | -| `indexmap` (2.14.1) | container-compose | **Keep** ? Ordered Compose maps and serde behavior matter; HashMap or linear vector replacements change semantics or scale. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/compose.rs#L7) | -| `indicatif` (0.18.6) | perry | **Keep / command gate** ? Progress for downloads, publish and remote execution; terminal redraw has modest ownership value. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry/src/commands/publish/mod.rs#L9) | -| `inkwell` (0.9.0) | codegen?@ | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-codegen/src/dialect/eh.rs#L9) | -| `itoa` (1.0.18) | runtime, stdlib, ui-android@ | **Keep / prune edges** ? Allocation-free runtime formatting; stdlib and Android UI declarations have no lexical uses. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/array/join.rs#L498) | -| `jni` (0.22.4) | ui-android@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-android/src/app.rs#L1) | -| `jsonwebtoken` (11.0.0) | ext-jsonwebtoken, stdlib?, perry | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-jsonwebtoken/src/lib.rs#L8) | -| `kamadak-exif` (0.6.1) | ext-sharp | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-sharp/src/lib.rs#L129) | -| `ksni` (0.3.6) | ui-gtk4@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-gtk4/src/tray.rs#L49) | -| `lazy_static` (1.5.0) | ext-fastify, ext-fetch, ext-http, ext-ioredis, ext-streams, ext-ws, runtime, stdlib | **Replace with std** ? Migrate owned globals to LazyLock/OnceLock while preserving initialization and poisoning behavior; transitive users retain the crate. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-fetch/src/lib.rs#L12) | -| `lettre` (0.11.23) | ext-nodemailer, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-nodemailer/src/lib.rs#L13) | -| `libc` (0.2.189) | audio-miniaudio@, runtime, stdlib@, ui-android@, ui-gtk4@, ui-ios@, ui-macos@, ui-tvos@, ui-visionos@, ui-watchos@, ui-windows-winui@, ui-windows@, perry | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-audio-miniaudio/src/lib.rs#L20) | -| `libmimalloc-sys` (0.1.49) | runtime?@ | **Keep / gate** ? Extended API drives GC allocator maintenance and Apple VM tags; use the existing alloc-mimalloc feature. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/gc/census.rs#L650) | -| `libshumate` (0.6.0) | ui-gtk4@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-gtk4/src/widgets/map_view.rs#L18) | -| `llvm-sys` (221.0.1) | codegen?@ | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-codegen/src/dialect/eh.rs#L181) | -| `log` (0.4.34) | codegen, perry | **Keep** ? Shared logging facade; replacing it fragments logging and saves little. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-codegen/src/codegen/mod.rs#L3730) | -| `lru` (0.18.3) | ext-lru-cache, stdlib? | **Possible / low priority** ? One exclusive package. An indexed recency store must preserve O(1) lookup, TTL, eviction and mutable GC roots; justify with workload measurements. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-lru-cache/src/lib.rs#L84) | -| `mach2` (0.6.0) | runtime@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/gc/roots/stack_maps_sections.rs#L25) | -| `md-5` (0.10.6, 0.11.0) | container-compose, stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/compose.rs#L8) | -| `mimalloc` (0.1.52) | runtime?@ | **Keep / existing A/B** ? System allocation already selectable; measure that mode. A general allocator rewrite is a separate major project. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/lib.rs#L34) | -| `ml-kem` (0.3.2) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/webcrypto/encapsulation.rs#L2) | -| `mongodb` (3.8.2) | ext-mongodb, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-mongodb/src/lib.rs#L38) | -| `mpris-server` (0.10.0) | ui-gtk4@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-gtk4/src/media_playback.rs#L561) | -| `nanoid` (0.5.0) | ext-nanoid, stdlib? | **Candidate / small** ? Default/sized generation use nanoid; custom alphabet already uses rand 0.10. Share a small helper with a maintained cryptographic RNG and unbiased selection. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-nanoid/src/lib.rs#L8) | -| `node-semver` (2.2.0) | runtime? | **Keep** ? Bun needs npm range grammar; Rust semver is not behavior-equivalent. Already gated with bun-cli-utils. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/bun_compat/cli_utils.rs#L195) | -| `notify` (6.1.1) | ext-parcel-watcher, runtime@, perry? | **Keep / gate** ? Native file events replaced polling. Preserve native event semantics and platform gating. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-parcel-watcher/src/lib.rs#L8) | -| `objc2` (0.6.4) | ext-ads?@, ui-ios@, ui-macos@, ui-tvos@, ui-visionos@, ui-watchos@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-ads/src/ios_real.rs#L39) | -| `objc2-app-kit` (0.3.2) | ui-macos@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-macos/src/app.rs#L6) | -| `objc2-core-foundation` (0.3.2) | ui-ios@, ui-macos@, ui-tvos@, ui-visionos@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-ios/src/adaptive_layout.rs#L10) | -| `objc2-foundation` (0.3.2) | ext-ads?@, ui-ios@, ui-macos@, ui-tvos@, ui-visionos@, ui-watchos@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-ads/src/ios_real.rs#L42) | -| `objc2-ui-kit` (0.3.2) | ui-ios@, ui-tvos@, ui-visionos@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-ios/src/adaptive_layout.rs#L11) | -| `object` (0.37.3) | perry | **Keep** ? Read-only ELF/Mach-O/PE reader for size reporting, already feature-trimmed; multi-format hand parsing is poor value. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry/src/commands/compile/collect_modules/crypto_ns.rs#L14) | -| `once_cell` (1.21.4) | container-compose, ffi, stdlib | **Replace with std** ? Owned uses are sync::Lazy; use LazyLock while preserving shared state and scanner semantics. Upstream users still retain once_cell. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/compose.rs#L27) | -| `p12` (0.6.3) | ext-http | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/tls_client.rs#L901) | -| `p256` (0.13.2) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/kdf.rs#L1182) | -| `p384` (0.13.1) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/webcrypto/util.rs#L28) | -| `p521` (0.13.3) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/webcrypto/util.rs#L34) | -| `pbkdf2` (0.12.2, 0.13.0) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/kdf.rs#L20) | -| `pem` (3.0.6, 4.0.0) | ext-node-forge | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-node-forge/src/crypto.rs#L476) | -| `perex` (0.1.4) | perex, runtime? | **Already owned** ? Registry metadata points to github.com/PerryTS/perex. Preserve Perry's single regex engine and independent test oracle. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-perex/src/lib.rs#L14) | -| `pkcs5` (0.7.1) | ext-http | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/tls_client.rs#L918) | -| `png` (0.18.1) | ui-windows@ | **Keep / gate** ? Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-windows/src/screenshot.rs#L137) | -| `printpdf` (0.10.1) | ext-pdf | **Candidate / focused spike** ? Five-operation writer with built-in Helvetica/text/lines/pages; HTML already disabled. Potentially remove 22 exclusive lock packages with a bounded writer. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-pdf/src/lib.rs#L46) | -| `proptest` (1.11.0) | container-compose (dev), stdlib (dev) | **Keep / tests** ? Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/yaml.rs#L505) | -| `qrcodegen` (1.8.0) | ui-windows@ | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-windows/src/widgets/qrcode.rs#L62) | -| `rand` (0.10.2, 0.8.7, 0.9.4) | container-compose, ext-ethers, ext-nanoid, ext-node-forge, runtime, stdlib, ui-geisterhand, perry? | **Keep / align** ? Reuse maintained RNGs; transitive API generations differ. NanoID removal alone cannot remove rand 0.9 from MongoDB/WebSocket/image/PDF graphs. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/service.rs#L8) | -| `rand_core` (0.10.1, 0.6.4, 0.9.5) | ext-argon2, stdlib | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-argon2/src/lib.rs#L13) | -| `rayon` (1.12.0) | perry | **Keep** ? Compiler parallel work benefits from work stealing; custom pool requires scaling and panic-propagation evidence. Other retainers remain. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry/src/commands/compile/bootstrap.rs#L1016) | -| `redis` (1.6.0) | ext-ioredis, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-ioredis/src/lib.rs#L17) | -| `regex` (1.13.1) | perex (dev), validation (dev) | **Keep / tests** ? Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-perex/tests/dialect_parity.rs#L177) | -| `reqwest` (0.12.28) | ext-axios, ext-fetch, ext-http, stdlib?, perry | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-axios/src/lib.rs#L81) | -| `resolv-conf` (0.7.6) | runtime | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/dns_resolver.rs#L167) | -| `rgb` (0.8.53) | doc-tests | **Keep / tests** ? Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-doc-tests/src/image_diff.rs#L128) | -| `ring` (0.17.14) | ext-http | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/server/tls.rs#L10) | -| `rsa` (0.10.0-rc.18, 0.9.10) | ext-node-forge, stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-node-forge/src/crypto.rs#L23) | -| `rusqlite` (0.39.0) | ext-better-sqlite3, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-better-sqlite3/src/lib.rs#L21) | -| `rust_decimal` (1.43.0) | ext-decimal, stdlib? | **Keep / gate** ? Decimal arithmetic and rounding are the adapter contract; replacing them adds substantial correctness work. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-decimal/src/lib.rs#L8) | -| `rustc-demangle` (0.1.28) | runtime, perry | **Keep** ? Small shared implementation of Rust symbol grammar used by stacks and size reports. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/error_stack_frames.rs#L459) | -| `rustls` (0.23.43) | ext-http, ext-net, ext-ws, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/server/http2_server.rs#L176) | -| `rustls-native-certs` (0.8.4) | ext-net, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-net/src/tls.rs#L386) | -| `rustls-pemfile` (2.2.0) | ext-http, ext-net, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/server/tls.rs#L259) | -| `rustls-webpki` (0.103.13) | ext-http | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/tls_client.rs#L277) | -| `ryu` (1.0.23) | runtime, stdlib, ui-android@ | **Keep / prune edges** ? Retain generic formatting where used; stdlib/Android declarations appear unused. Do not confuse with ECMAScript ryu-js spelling. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/bun_compat/cli_utils.rs#L1045) | -| `ryu-js` (1.0.3) | runtime | **Keep** ? ECMAScript shortest-number spelling is a JSON compatibility and hot-path requirement. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/json/stringify_api.rs#L365) | -| `scraper` (0.27.0) | ext-cheerio, stdlib? | **Keep / gate** ? Cheerio requires real HTML and selectors, including malformed-document behavior; preserve the parser and adapter gate. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-cheerio/src/lib.rs#L9) | -| `scrypt` (0.11.0) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/kdf.rs#L826) | -| `semver` (1.0.28) | updater, perry | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-updater/src/cli_manifest.rs#L6) | -| `serde` (1.0.229) | api-manifest?, codegen, container-compose, diagnostics, doc-tests, ext-jsonwebtoken, ext-node-forge, ext-parcel-watcher, ext-typescript, hir, runtime, stdlib, ui-geisterhand, updater, perry | **Keep / scope** ? Typed Rust configuration and interchange across many crates; trim features rather than own a serialization framework. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-api-manifest/src/lib.rs#L36) | -| `serde_json` (1.0.151) | codegen, container-compose, diagnostics, diagnostics (dev), doc-tests, ext-dotenv, ext-fastify, ext-fetch, ext-http, ext-jsonwebtoken, ext-mongodb, ext-mysql2, ext-net, ext-node-forge, ext-parcel-watcher, ext-qs, ext-typescript, ext-undici, ext-validator, hir, runtime, stdlib, ui-android@, ui-geisterhand, updater, perry | **Keep / prune edges** ? JS hot-path JSON is already owned. Keep Rust config/interchange parsing; updater and Android declarations appear unused. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-codegen/src/native_value/artifact.rs#L620) | -| `serde_yaml` (0.9.34+deprecated) | container-compose, stdlib (dev) | **Migrate upstream** ? Locked 0.9.34+deprecated; evaluate a maintained compatible successor with a Compose regression corpus. Do not own a YAML parser. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/cli.rs#L195) | -| `sha1` (0.10.6, 0.11.0) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/sign.rs#L225) | -| `sha2` (0.10.9, 0.11.0) | ext-node-forge, runtime?, runtime (build), stdlib?, updater, perry | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-node-forge/src/crypto.rs#L27) | -| `sha3` (0.10.9, 0.11.0, 0.12.0) | stdlib? | **Keep used versions / prune edge** ? Stdlib sha3 0.12 alias has no lexical use; SHAKE uses shake, KMAC uses sha3_010. Audit only the unused version edge. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/webcrypto/util.rs#L1021) | -| `sha3-utils` (0.5.0) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/webcrypto/util.rs#L1027) | -| `shake` (0.1.0) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/hash_handles.rs#L121) | -| `simdutf8` (0.1.5) | runtime | **Keep** ? Single hot-path UTF-8 validation use; std::str::from_utf8 is an A/B alternative, not an assumed speed improvement. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/string/utf16_count.rs#L22) | -| `socket2` (0.6.5) | ext-fastify@, ext-http@, runtime | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-fastify/src/cluster_bind.rs#L29) | -| `spki` (0.7.3, 0.8.0) | ext-node-forge, stdlib? | **Keep / prune stdlib edge** ? node-forge imports it; stdlib has no lexical references. Check PEM/alloc feature propagation before removing that edge. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-node-forge/src/crypto.rs#L40) | -| `sqlx` (0.9.0) | ext-mysql2, ext-pg, stdlib? | **Keep / split features** ? Bundled stdlib enables mysql and postgres together; activate backends from individual features as extensions already do. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-mysql2/src/lib.rs#L23) | -| `stacker` (0.1.25) | hir | **Keep** ? Protects three lowering recursion boundaries and SWC. Remove only with bounded/iterative traversal evidence. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-hir/src/lower/lower_expr.rs#L95) | -| `swc_bundler` (37.0.0) | ext-typescript | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L24) | -| `swc_common` (18.0.1) | ext-typescript, hir, parser, perry | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L28) | -| `swc_ecma_ast` (19.0.0) | ext-typescript, hir, parser, perry | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L32) | -| `swc_ecma_codegen` (21.0.0) | ext-typescript, hir (dev) | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L36) | -| `swc_ecma_loader` (18.0.0) | ext-typescript | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L37) | -| `swc_ecma_parser` (29.0.2, 32.0.0) | ext-typescript, parser | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L38) | -| `swc_ecma_transforms_base` (32.0.0) | ext-typescript, hir, parser, perry | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L39) | -| `swc_ecma_transforms_react` (35.0.0) | ext-typescript | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L40) | -| `swc_ecma_transforms_typescript` (35.0.0) | ext-typescript | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L41) | -| `swc_ecma_visit` (19.0.0) | ext-typescript, hir, parser, perry | **Keep / align** ? Compiler syntax, transforms, ABI and code generation are expensive contracts to own again. Align compatible upstream versions; preserve the engine. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-typescript/src/bun.rs#L42) | -| `taffy` (0.13.0) | runtime | **Keep / gate TUI** ? Already trimmed to flexbox but always a runtime dependency; gate the TUI surface before considering layout-engine ownership. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/tui/layout.rs#L18) | -| `tar` (0.4.46) | perry | **Keep / gate** ? Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry/src/commands/publish/tarball.rs#L143) | -| `tempfile` (3.27.0) | doc-tests (dev), ext-parcel-watcher (dev), ui@, updater (dev), perry, perry (dev) | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-doc-tests/src/image_diff.rs#L171) | -| `temporal_rs` (0.2.6) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/temporal/dispatch.rs#L207) | -| `thiserror` (1.0.69, 2.0.18) | codegen, container-compose, hir, parser, runtime, stdlib, transform | **Keep / prune edges** ? Compose uses typed errors; compiler/runtime/stdlib/transform declarations have no lexical uses. Remove stale edges, preserve useful derives. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/error.rs#L7) | -| `time` (0.3.55) | ext-node-forge | **Keep / align** ? Node-forge and upstream formats need date/time handling; no convincing rewrite saving. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-node-forge/src/crypto.rs#L41) | -| `timezone_provider` (0.2.6) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/date.rs#L324) | -| `tiny_http` (0.12.0) | ui-geisterhand | **Keep / tooling** ? Synchronous chaos/test-control server; owning HTTP parsing offers little payoff on this tooling path. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-geisterhand/src/server.rs#L6) | -| `tokio` (1.53.1) | container-compose, container-compose (dev), ext-axios, ext-fastify, ext-fetch, ext-http, ext-ioredis, ext-mongodb, ext-mysql2, ext-net, ext-nodemailer, ext-pg, ext-ws, stdlib?, ui-gtk4@, perry | **Deferred** ? Separate session owns the removal verdict. This audit records dependent adapters and existing feature boundaries. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/backend/cli_backend.rs#L11) | -| `tokio-cron-scheduler` (0.15.1) | stdlib? | **Remove** ? Zero source references; own cron queues already use cron::Schedule. Deleting the edge removes 13 packages from full Windows stdlib. | [manifest](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/Cargo.toml) | -| `tokio-rustls` (0.26.4) | ext-http, ext-net, stdlib? | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/server/http2_server.rs#L34) | -| `tokio-tungstenite` (0.29.0) | ext-fastify, ext-http, ext-ws, stdlib?, perry | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-fastify/src/server.rs#L899) | -| `toml` (1.1.4+spec-1.1.0) | runtime?, perry | **Keep** ? CLI config and gated Bun API require full TOML syntax and diagnostics. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/bun_compat/cli_utils.rs#L157) | -| `tracing` (0.1.44) | container-compose | **Keep** ? Shared Compose/upstream instrumentation facade; little marginal value in a custom replacement. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/backend/cli_backend.rs#L107) | -| `tracing-subscriber` (0.3.23) | container-compose | **Keep / gate CLI** ? Only compose main installs it; gate with executable functionality when slimming its library. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/main.rs#L5) | -| `tungstenite` (0.24.0, 0.29.0) | ui-android@ | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-android/src/ws.rs#L16) | -| `unicode-normalization` (0.1.25) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/intl/date_collator.rs#L1512) | -| `unicode-segmentation` (1.13.3) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/intl/segmenter.rs#L8) | -| `unsafe-libyaml` (0.2.11) | runtime? | **Keep backend / scope** ? Bun YAML and serde_yaml parser backend; review alongside YAML migration, not a parser rewrite. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/bun_compat/cli_utils.rs#L729) | -| `url` (2.5.8) | runtime?, validation, perry | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/array/flat_clone.rs#L532) | -| `uuid` (1.26.0) | ext-nodemailer, ext-uuid, stdlib? | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-nodemailer/src/lib.rs#L237) | -| `validator` (0.21.0) | validation (dev) | **Keep / tests** ? Testing, visual comparison or differential oracle; retain independent validation. These direct edges are for testing/tooling. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-validation/src/tests.rs#L2) | -| `walkdir` (2.5.0) | doc-tests, perry | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-doc-tests/src/lint.rs#L20) | -| `wasm-encoder` (0.244.0, 0.258.0) | codegen-wasm | **Keep / align** ? Binary emission correctness for Wasm; align compatible versions with tooling. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-codegen-wasm/src/emit/compile.rs#L1235) | -| `wasmi` (1.1.0) | wasm-host | **Keep / isolate** ? Wasm host already isolated with defaults disabled and required SIMD enabled; interpreter rewrite is a major engine project. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-wasm-host/src/host_runtime.rs#L12) | -| `webkit6` (0.4.0) | ui-gtk4@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-gtk4/src/widgets/webview.rs#L14) | -| `webpki-roots` (0.26.11, 1.0.9) | ext-http | **Keep / scope** ? Retain protocol/system interoperability. Narrow features and adapters, and coordinate async-runtime changes with the Tokio study. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/tls_client.rs#L543) | -| `webview2-com` (0.39.1) | ui-windows@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-windows/src/widgets/webview.rs#L35) | -| `which` (8.0.6) | container-compose | **Keep** ? Bounded helper with performance or compatibility details; smaller ownership benefit than the prioritized candidates. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-container-compose/src/backend/detect.rs#L149) | -| `windows` (0.35.0, 0.62.2) | ui-windows-winui@, ui-windows@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-windows-winui/src/app.rs#L7) | -| `windows-core` (0.62.2) | ui-windows@ | **Keep / macro dependency** ? COM implement macros emit absolute ::windows_core paths. No lexical reference is a known false positive; keep version alignment. | [manifest](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-windows/Cargo.toml) | -| `windows-reactor` (0.0.0) | ui-windows-winui@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ui-windows-winui/src/app.rs#L8) | -| `windows-sys` (0.48.0, 0.52.0, 0.59.0, 0.60.2, 0.61.2) | runtime@, stdlib@, perry@ | **Keep / platform** ? Native ABI bindings and platform services; keep target gating. Hand-maintained bindings add compatibility work with little ownership benefit. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/child_process/ipc_transport.rs#L14) | -| `winresource` (0.1.31) | perry (build) | **Keep / build** ? Build-time native toolchain glue or table generation. These are not runtime library payloads; keep generated artifacts and platform compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry/build.rs#L11) | -| `writeable` (0.6.4) | runtime? | **Keep / gate** ? Standards and Unicode/calendar data dominate maintenance. Preserve existing per-program feature boundaries and compatibility. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/intl/icu_dtf.rs#L18) | -| `x25519-dalek` (2.0.1) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/crypto/sign.rs#L552) | -| `x448` (0.14.0-pre.12) | stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-stdlib/src/webcrypto/hmac.rs#L523) | -| `x509-cert` (0.3.0) | ext-http, ext-node-forge, runtime, stdlib? | **Keep** ? Cryptographic primitive or key/certificate format: retain maintained implementations; align compatible versions and prune unused edges while preserving algorithms and formats. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-http/src/tls_client.rs#L441) | -| `xxhash-rust` (0.8.18) | runtime? | **Keep / gate** ? Bun exposes exact xxHash64 output; DefaultHasher changes the contract. Already feature gated. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-runtime/src/bun_compat/cli_utils.rs#L565) | -| `zip` (8.6.0) | perry | **Keep / trim first** ? Updates/IPA reading and deflated HAP writing; Deflate-only graph drops 17 packages. Validate accepted archive methods before narrowing. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry/src/commands/harmonyos_hap.rs#L53) | -| `zstd` (0.13.3) | ext-zlib, runtime?, stdlib?, perry | **Keep / gate** ? Codec/archive format implementation: preserve interoperability and performance; narrow supported features only where the product contract permits. | [source](https://github.com/PerryTS/perry/blob/4945fc1f7498debc76e9f861d7cf1517da5e67c9/crates/perry-ext-zlib/src/stream.rs#L243) | - -The unused `similar` workspace template has no consumer: delete it as housekeeping, with zero dependency-graph saving. - -Transitive-only packages inherit the retain/prune decision of their owning library. The census records each immediate parent so shared subgraphs are not counted repeatedly. This is not an independent algorithm-level or vulnerability audit of every transitive implementation. diff --git a/docs/audits/rust-dependency-experiments-2026-09-14.json b/docs/audits/rust-dependency-experiments-2026-09-14.json deleted file mode 100644 index 38890c09ea2..00000000000 --- a/docs/audits/rust-dependency-experiments-2026-09-14.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "semantics": "Independent Cargo tree counterfactuals, normal+build edges, offline resolution. No compilation, no binary measurement, no correctness validation. All manifests and lock restored byte-for-byte.", - "experiments": [ - { - "experiment": "zip-deflate-only", - "configuration": [ - "-p", - "perry" - ], - "target": "x86_64-pc-windows-msvc", - "before_external_packages": 352, - "after_external_packages": 335, - "removed": [ - "aes v0.9.1", - "bumpalo v3.20.3", - "bzip2 v0.6.1", - "cipher v0.5.2", - "cmov v0.5.4", - "constant_time_eq v0.4.2", - "cpubits v0.1.1", - "ctutils v0.4.2", - "deflate64 v0.1.12", - "hmac v0.13.0", - "inout v0.2.2", - "libbz2-rs-sys v0.2.5", - "lzma-rust2 v0.16.4", - "pbkdf2 v0.13.0", - "ppmd-rust v1.4.0", - "sha1 v0.11.0", - "zopfli v0.8.3" - ], - "added": [], - "manifest_edits": [ - [ - "Cargo.toml", - "zip = \"8\"", - "zip = { version = \"8\", default-features = false, features = [\"deflate-flate2-zlib-rs\"] }" - ] - ] - }, - { - "experiment": "unused-cron-scheduler", - "configuration": [ - "-p", - "perry-stdlib" - ], - "target": "x86_64-pc-windows-msvc", - "before_external_packages": 556, - "after_external_packages": 543, - "removed": [ - "chrono-tz v0.10.4", - "croner v3.0.1", - "darling v0.20.11", - "darling_core v0.20.11", - "darling_macro v0.20.11", - "derive_builder v0.20.2", - "derive_builder_core v0.20.2", - "derive_builder_macro v0.20.2", - "phf v0.12.1", - "phf_shared v0.12.1", - "strum v0.27.2", - "strum_macros v0.27.2", - "tokio-cron-scheduler v0.15.1" - ], - "added": [], - "manifest_edits": [ - [ - "crates/perry-stdlib/Cargo.toml", - "tokio-cron-scheduler = { version = \"0.15\", optional = true }", - "" - ], - [ - "crates/perry-stdlib/Cargo.toml", - "\"dep:tokio-cron-scheduler\", ", - "" - ] - ] - }, - { - "experiment": "unused-stdlib-clap", - "configuration": [ - "-p", - "perry-stdlib", - "--no-default-features" - ], - "target": "x86_64-pc-windows-msvc", - "before_external_packages": 149, - "after_external_packages": 134, - "removed": [ - "anstream v1.0.0", - "anstyle v1.0.14", - "anstyle-parse v1.0.0", - "anstyle-query v1.1.5", - "anstyle-wincon v3.0.11", - "clap v4.6.6", - "clap_builder v4.6.6", - "clap_derive v4.6.4", - "clap_lex v1.1.0", - "colorchoice v1.0.5", - "heck v0.5.0", - "is_terminal_polyfill v1.70.2", - "once_cell_polyfill v1.70.2", - "strsim v0.11.1", - "utf8parse v0.2.2" - ], - "added": [], - "manifest_edits": [ - [ - "crates/perry-stdlib/Cargo.toml", - "clap = { version = \"4.4\", features = [\"derive\"] }", - "" - ] - ] - }, - { - "experiment": "unused-atty", - "configuration": [ - "-p", - "perry-container-compose" - ], - "target": "x86_64-pc-windows-msvc", - "before_external_packages": 98, - "after_external_packages": 96, - "removed": [ - "atty v0.2.14", - "winapi v0.3.9" - ], - "added": [], - "manifest_edits": [ - [ - "crates/perry-container-compose/Cargo.toml", - "atty = \"0.2\"", - "" - ] - ] - }, - { - "experiment": "align-dialoguer", - "configuration": [ - "-p", - "perry-container-compose" - ], - "target": "x86_64-pc-windows-msvc", - "before_external_packages": 98, - "after_external_packages": 94, - "removed": [ - "console v0.15.11", - "dialoguer v0.11.0", - "windows-sys v0.59.0", - "windows-targets v0.52.6", - "windows_x86_64_msvc v0.52.6" - ], - "added": [ - "dialoguer v0.12.0" - ], - "manifest_edits": [ - [ - "crates/perry-container-compose/Cargo.toml", - "dialoguer = \"0.11\"", - "dialoguer.workspace = true" - ] - ] - }, - { - "experiment": "governor-std-only", - "configuration": [ - "-p", - "perry-ext-ratelimit" - ], - "target": "x86_64-pc-windows-msvc", - "before_external_packages": 37, - "after_external_packages": 27, - "removed": [ - "bitflags v2.12.1", - "getrandom v0.3.4", - "ppv-lite86 v0.2.21", - "quanta v0.12.6", - "rand v0.9.4", - "rand_chacha v0.9.0", - "rand_core v0.9.5", - "raw-cpuid v11.6.0", - "winapi v0.3.9", - "zerocopy v0.8.50" - ], - "added": [], - "manifest_edits": [ - [ - "crates/perry-ext-ratelimit/Cargo.toml", - "governor = \"0.10\"", - "governor = { version = \"0.10\", default-features = false, features = [\"std\"] }" - ], - [ - "crates/perry-stdlib/Cargo.toml", - "governor = { version = \"0.10\", optional = true }", - "governor = { version = \"0.10\", default-features = false, features = [\"std\"], optional = true }" - ] - ] - } - ] -} diff --git a/docs/validation/component-cleanup-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/component-cleanup-20261021.json similarity index 100% rename from docs/validation/component-cleanup-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/component-cleanup-20261021.json diff --git a/docs/validation/component-commands-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/component-commands-20261021.json similarity index 100% rename from docs/validation/component-commands-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/component-commands-20261021.json diff --git a/docs/validation/component-guest-cleanup-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/component-guest-cleanup-20261021.json similarity index 100% rename from docs/validation/component-guest-cleanup-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/component-guest-cleanup-20261021.json diff --git a/docs/validation/component-guest-resources-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/component-guest-resources-20261021.json similarity index 100% rename from docs/validation/component-guest-resources-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/component-guest-resources-20261021.json diff --git a/docs/validation/component-host-resources-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/component-host-resources-20261021.json similarity index 100% rename from docs/validation/component-host-resources-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/component-host-resources-20261021.json diff --git a/docs/validation/component-integration-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/component-integration-20261021.json similarity index 100% rename from docs/validation/component-integration-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/component-integration-20261021.json diff --git a/docs/validation/component-required-ci-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/component-required-ci-20261021.json similarity index 100% rename from docs/validation/component-required-ci-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/component-required-ci-20261021.json diff --git a/docs/validation/wasi-macos-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/wasi-macos-20261021.json similarity index 100% rename from docs/validation/wasi-macos-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/wasi-macos-20261021.json diff --git a/docs/validation/wasi-network-interop-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/wasi-network-interop-20261021.json similarity index 100% rename from docs/validation/wasi-network-interop-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/wasi-network-interop-20261021.json diff --git a/docs/validation/wasi-network-providers-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/wasi-network-providers-20261021.json similarity index 100% rename from docs/validation/wasi-network-providers-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/wasi-network-providers-20261021.json diff --git a/docs/validation/wasi-release-artifacts-20261021.json b/docs/audits/wasi-component-validation-2026-10-21/wasi-release-artifacts-20261021.json similarity index 100% rename from docs/validation/wasi-release-artifacts-20261021.json rename to docs/audits/wasi-component-validation-2026-10-21/wasi-release-artifacts-20261021.json diff --git a/docs/history/BUG-STRING-COMPARISON.md b/docs/history/BUG-STRING-COMPARISON.md deleted file mode 100644 index 1d8675ffb40..00000000000 --- a/docs/history/BUG-STRING-COMPARISON.md +++ /dev/null @@ -1,78 +0,0 @@ -# Bug: String `!==` comparison fails for concatenated strings - -**Severity:** Critical -**Affected:** Perry runtime (compiled TypeScript) -**Found:** 2026-03-25 -**Context:** perry-hub token authentication - -## Summary - -The `!==` (strict inequality) operator returns `true` (not equal) for two strings that are demonstrably identical. This breaks all token-based authentication in perry-hub and likely affects any TypeScript code that compares dynamically constructed strings. - -## Reproduction - -```typescript -const SECRET = process.env.MY_SECRET || ''; // e.g. "abc123" -const header = request.headers['authorization'] || ''; // e.g. "Bearer abc123" -const expected = 'Bearer ' + SECRET; // "Bearer abc123" - -// This SHOULD be false (strings are equal), but perry returns true: -if (header !== expected) { - // ALWAYS enters this branch, even when the strings match - console.log('mismatch!'); -} -``` - -## Evidence - -Added debug logging to perry-hub that prints both operands before comparison: - -``` -AUTH_DEBUG: auth="Bearer 62E77FBB-57B8-4611-A361-156288F5C8CF" - expected="Bearer 62E77FBB-57B8-4611-A361-156288F5C8CF" -``` - -The strings are byte-for-byte identical (same length, same content), yet `auth !== expected` evaluates to `true`. - -## Characteristics - -- `!==` fails, `!=` also fails (both return wrong result) -- Affects strings built via concatenation (`'Bearer ' + variable`) -- Affects strings from `process.env` concatenated with literals -- `===` likely also affected (returns `false` for equal strings) -- `endsWith()` and `startsWith()` work correctly as workarounds -- Comparison of two string literals works fine (`'foo' !== 'foo'` is correctly `false`) - -## Workaround - -Replace: -```typescript -if (auth !== 'Bearer ' + SECRET) { ... } -``` - -With: -```typescript -if (!auth.endsWith(SECRET) || !auth.startsWith('Bearer ')) { ... } -``` - -## Impact - -This bug broke ALL of these in perry-hub: -1. Admin API authentication (`/api/v1/admin/update-perry`) -2. Tarball download authentication (`/api/v1/tarball/:jobId`) -3. Artifact upload authentication (`/api/v1/artifact/upload/:jobId`) - -All build jobs failed with "builder error" or "403 Forbidden" because workers couldn't download tarballs from the hub. - -## Likely root cause - -The perry compiler's string representation may use different internal types for: -- String literals (compile-time constant) -- `process.env` values (runtime-allocated) -- Concatenation results (`+` operator) - -The `!==` / `===` codegen may be comparing pointers or internal type tags instead of string content. The `endsWith`/`startsWith` methods correctly compare character content. - -## Files affected by workaround - -- `perry-hub/src/main.ts` — 5 occurrences of `!==` replaced with `endsWith`/`startsWith` diff --git a/docs/history/FEATURE_AUDIT.md b/docs/history/FEATURE_AUDIT.md deleted file mode 100644 index cabcbf2f405..00000000000 --- a/docs/history/FEATURE_AUDIT.md +++ /dev/null @@ -1,276 +0,0 @@ -# Compilets Feature Audit - -**Date:** January 2026 -**Version:** Current development state -**Test Status:** 62/62 tests passing - -## Overview - -Compilets is a native TypeScript compiler that compiles TypeScript to native executables using SWC (parsing) and LLVM (code generation). - -Run `./run_tests.sh` to execute the full test suite. - ---- - -## Working Features ✅ - -### Core Language - -| Feature | Status | Notes | -|---------|--------|-------| -| Numbers (f64) | ✅ Full | All arithmetic (+, -, *, /, %) work | -| Booleans | ✅ Full | true/false, comparison, logical operators | -| Strings | ✅ Partial | Literals, concatenation, length, indexOf work | -| Variables | ✅ Full | let/const declarations | -| Unary operators | ✅ Full | Negation (-x), logical not (!x) | -| Ternary operator | ✅ Full | condition ? a : b | - -### Control Flow - -| Feature | Status | Notes | -|---------|--------|-------| -| If/else | ✅ Full | All branching patterns | -| While loops | ✅ Full | Including break/continue | -| For loops | ✅ Full | Including break/continue | -| Break | ✅ Full | Works in all loops | -| Continue | ✅ Full | Works in all loops | - -### Functions - -| Feature | Status | Notes | -|---------|--------|-------| -| Function declaration | ✅ Full | Named functions | -| Function calls | ✅ Full | Direct calls | -| Recursion | ✅ Full | Self-referential calls | -| Parameters | ✅ Full | Multiple parameters | -| Return values | ✅ Full | Explicit returns | - -### Classes - -| Feature | Status | Notes | -|---------|--------|-------| -| Class declaration | ✅ Full | Basic class syntax | -| Constructors | ✅ Full | With parameters | -| Instance fields | ✅ Full | this.field access | -| Instance methods | ✅ Full | Method calls on instances | -| Class inheritance | ✅ Full | extends keyword | -| super() calls | ✅ Full | Parent constructor calls | - -### Arrays - -| Feature | Status | Notes | -|---------|--------|-------| -| Array literals | ✅ Full | [1, 2, 3] syntax | -| Array indexing | ✅ Full | arr[i] read/write | -| Array length | ✅ Full | arr.length property | - -### Other - -| Feature | Status | Notes | -|---------|--------|-------| -| Enums | ✅ Full | Numeric and string enums | -| BigInt | ✅ Full | 256-bit integers | -| Simple closures | ✅ Partial | Arrow functions work locally | -| console.log | ✅ Full | Numbers and strings | -| setTimeout | ✅ Full | Async timer support | - ---- - -## Not Working / Missing ❌ - -### Operators - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| ++/-- operators | ✅ Full | - | Pre/post increment/decrement work | -| Compound assignment | ✅ Full | - | +=, -=, *=, /=, %=, **=, &=, |=, ^=, <<=, >>=, >>>= all work | -| Bitwise operators | ✅ Full | - | &, |, ^, ~, <<, >>, >>> all work | -| ** (exponent) | ✅ Full | - | 2 ** 3 = 8, also **= compound assignment | - -### Strings - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| string.slice() | ✅ Full | - | Returns substring from start to end index | -| string.substring() | ✅ Full | - | Works (similar to slice but swaps args if start > end) | -| string.split() | ✅ Full | - | Split by delimiter, returns string[] | -| string.trim() | ✅ Full | - | Remove whitespace from both ends | -| string.toLowerCase() | ✅ Full | - | Convert to lowercase | -| string.toUpperCase() | ✅ Full | - | Convert to uppercase | -| Template literals | ✅ Full | - | Backtick strings with ${expr} interpolation | - -### Arrays - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| push/pop | ✅ Full | - | Array mutation methods | -| shift/unshift | ✅ Full | - | Array mutation methods | -| indexOf/includes | ✅ Full | - | Search methods | -| map/filter/reduce | ✅ Full | - | Functional array methods | -| forEach | ✅ Full | - | Iteration method | -| slice | ✅ Full | - | Array slicing (slice(start, end?)) | -| splice | ✅ Full | - | Array splice (splice(start, deleteCount?, ...items)) | -| Mixed-type arrays | ✅ Full | - | Arrays can hold mixed types (string\|number)[] using NaN-boxing | - -### Classes - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| Method inheritance | ✅ Full | - | Methods inherited and can be overridden | -| Static methods | ✅ Full | - | Class-level methods | -| Static fields | ✅ Full | - | Class-level properties | -| Getters/setters | ✅ Full | - | get/set accessors work | -| Private fields (#) | ✅ Full | - | ES2022 private class fields (#field) | - -### Functions/Closures - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| Closures as args | ✅ Full | - | Arrow functions work as callback arguments | -| Higher-order functions | ✅ Full | - | Named functions and closures work as callbacks | -| Returning closures | ✅ Full | - | Mutable captures work when returned; use type inference for closure return types | -| Rest parameters | ✅ Full | - | ...args syntax collects remaining arguments into array | -| Default parameters | ✅ Full | - | Parameters with default values | - -### Control Flow - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| Try-catch-finally | ✅ Full | - | Works with throw, catch, finally | -| Switch statement | ✅ Full | - | With fallthrough support | -| For-of loops | ✅ Full | - | Array iteration | -| For-in loops | ✅ Full | - | Object key iteration | - -### Type System - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| Type extraction | ✅ Full | - | Types extracted from annotations | -| Generics | ✅ Full | - | Monomorphization generates specialized functions/classes | -| Interfaces | ✅ Full | - | Interface declarations with properties and methods | -| Type aliases | ✅ Full | - | type X = ... declarations | -| Constraint checking | ✅ Full | - | T extends Foo constraints validated | -| Type guards | ✅ Full | - | typeof operator and type narrowing with union types | -| Union types | ✅ Full | - | Variables with string|number work; console.log handles both types dynamically | - -### Modules - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| import/export | ✅ Full | - | Named imports/exports, re-exports work | -| require() | ✅ Full | - | CommonJS require() for built-in modules (fs, path, crypto) | - -### Standard Library - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| fs module | ✅ Full | - | readFileSync, writeFileSync, existsSync, mkdirSync, unlinkSync | -| path module | ✅ Full | - | join, dirname, basename, extname, resolve | -| process.env | ✅ Full | - | Environment variables (process.env.VARNAME) | -| crypto | ✅ Full | - | randomBytes, randomUUID, sha256, md5 | -| Date | ✅ Full | - | Date.now(), new Date(), getTime(), toISOString(), component getters | -| JSON | ✅ Full | - | JSON.parse and JSON.stringify | -| Math | ✅ Full | - | floor, ceil, round, abs, sqrt, pow, min, max, random | -| Map/Set | ✅ Full | - | Map and Set collection types | -| RegExp | ✅ Full | - | string.replace(), regex.test(), string.match() (global and non-global) | - -### Other - -| Feature | Status | Priority | Notes | -|---------|--------|----------|-------| -| Destructuring | ✅ Full | - | Array and object destructuring (shorthand, rename, defaults, rest), including nested and rest patterns | -| Spread operator | ✅ Full | - | [...arr, x] array spread syntax | -| Optional chaining | ✅ Full | - | obj?.prop, obj?.[index] | -| Nullish coalescing | ✅ Full | - | ?? operator | -| Method chaining | ✅ Full | - | Array/string method chains (e.g. arr.filter().map(), str.toLowerCase()) | -| Utility types | ✅ Full | - | Partial, Pick, Record, Omit, ReturnType, Readonly erased at compile time | -| Decorators | ⚠️ Partial | - | @log method decorator (compile-time transformation) | - ---- - -## Test Files - -The following test files are available in `test-files/`: - -| File | Tests | -|------|-------| -| test_for.ts | For loops | -| test_for_in.ts | For-in loops (object key iteration) | -| test_break_continue.ts | Break and continue | -| test_enum.ts | Enum support | -| test_inheritance.ts | Class inheritance | -| test_simple_class.ts | Basic classes | -| test_closure_complex.ts | Closure support | -| test_timer.ts | setTimeout/async | -| test_mutable_capture.ts | Mutable closure captures | -| test_returning_closures.ts | Returning closures from functions | -| test_process_env.ts | process.env access | -| test_fs.ts | fs module (read/write/exists/mkdir/unlink) | -| test_path.ts | path module (join/dirname/basename/extname/resolve) | -| test_array_methods.ts | Array methods (push/pop/shift/unshift/indexOf/includes) | -| test_string_methods.ts | String methods (trim/toLowerCase/toUpperCase) | -| test_json.ts | JSON.parse and JSON.stringify | -| test_math.ts | Math functions (floor, ceil, round, abs, sqrt, pow, min, max, random) | -| test_crypto.ts | Crypto functions (randomBytes, randomUUID, sha256, md5) | -| test_date.ts | Date functions (Date.now, new Date, getTime, toISOString, getFullYear, etc.) | -| test_bitwise.ts | Bitwise operators (&, |, ^, ~, <<, >>, >>>, and compound assignments) | -| test_regex.ts | RegExp support (test(), string.match(), string.replace()) | -| test_object_destructuring.ts | Object destructuring (shorthand, rename, defaults, rest) | -| test_method_chaining.ts | Method chaining (arr.filter().map(), string chains) | -| test_utility_types.ts | TypeScript utility type erasure (Partial, Pick, Record, Omit, etc.) | -| test_rest_params.ts | Rest parameters (...args syntax) | -| test_getters_setters.ts | Class getters and setters | -| test_private_fields.ts | Private class fields (#field syntax) | -| test_union_types.ts | Union types (string \| number variables) | -| test_type_guards.ts | Type guards (typeof operator, type narrowing) | -| test_mixed_arrays.ts | Mixed-type arrays ((string\|number)[]) | -| test_require.ts | CommonJS require() for built-in modules | -| test_decorators.ts | Method decorators (@log) | -| test_integration_app.ts | Integration: classes, decorators, file I/O, arrays | -| test_data_pipeline.ts | Integration: generics, Map/Set, array methods, Math | -| test_cli_simulation.ts | Integration: fs, path, strings, try-catch, JSON | - ---- - -## Recommended Implementation Order - -### Phase 1: Core Language Completeness -1. ~~**++/-- operators**~~ - ✅ DONE -2. ~~**Compound assignment (+=, etc)**~~ - ✅ DONE -3. ~~**Method inheritance**~~ - ✅ DONE - -### Phase 2: Error Handling & Modules -4. ~~**Try-catch-finally**~~ - ✅ DONE (already implemented!) -5. ~~**Module imports**~~ - ✅ DONE (already implemented!) - -### Phase 3: Standard Library -6. ~~**process.env**~~ - ✅ DONE -7. ~~**fs module**~~ - ✅ DONE -8. ~~**path module**~~ - ✅ DONE - -### Phase 4: Advanced Features -9. ~~**Generics**~~ - ✅ DONE (monomorphization, interfaces, type aliases, constraints) -10. ~~**Array methods**~~ - ✅ DONE (push, pop, shift, unshift, indexOf, includes) - -### Phase 5: Functional Programming -11. ~~**Higher-order functions**~~ - ✅ DONE (closures and named functions as callbacks) -12. ~~**Array HOF methods**~~ - ✅ DONE (map, filter, reduce, forEach) - -### Phase 6: Modern Syntax -13. ~~**Switch statements**~~ - ✅ DONE (with fallthrough support) -14. ~~**For-of loops**~~ - ✅ DONE (array iteration) -15. ~~**Destructuring**~~ - ✅ DONE (array destructuring with nested and rest patterns) -16. ~~**Spread operator**~~ - ✅ DONE (...array syntax) -17. ~~**Template literals**~~ - ✅ DONE (backtick strings with ${expr}) -18. ~~**Default parameters**~~ - ✅ DONE (function parameters with defaults) -19. ~~**Optional chaining**~~ - ✅ DONE (obj?.prop, obj?.[index]) -20. ~~**Nullish coalescing**~~ - ✅ DONE (?? operator) - ---- - -## Runtime Notes - -- **No garbage collection** - Memory leaks in long-running code -- **Arrays are f64-only** - No mixed-type arrays -- **Dynamic array growth** - Arrays grow automatically via push/unshift -- **Async via event loop** - setTimeout works with await diff --git a/docs/history/GAPS.md b/docs/history/GAPS.md deleted file mode 100644 index 7348dda1c46..00000000000 --- a/docs/history/GAPS.md +++ /dev/null @@ -1,68 +0,0 @@ -# Perry Feature Requests — From Building a Real macOS App - -We ported a production macOS SwiftUI app (multi-chain EVM transaction analyzer, ~40 views) to Perry to find what's missing. The data layer ported perfectly. All UI gaps surfaced by this port are now closed. - -**Perry version:** 0.5.151 -**App:** 32 modules, compiles to 25MB ARM64 binary -**Updated:** 2026-04-22 - ---- - -## Status - -| Category | v0.2.155 | v0.5.150 | v0.5.151 | Notes | -|----------|----------|----------|----------|-------| -| Critical gaps | 2 | 0 | **0** | — | -| Important gaps | 4 | 1 partial | **0** | Alert rich form shipped | -| Nice-to-have | 3 | 1 partial | **0** | LazyVStack NSTableView-virtualized; string prefs typed | -| System API gaps | 3 | 1 partial | **0** | Lifecycle hooks wired end-to-end | -| **Total gaps** | **12** | **3 partial** | **0** | All closed | - -**Overall Perry readiness: ~80% → 100%** against the gaps surfaced by this port. - ---- - -## Closed in v0.5.151 - -### Alert rich form - -`alertWithButtons(title, message, buttons: string[], callback: (index: number) => void)` now exists alongside the simple `alert(title, message)`. On macOS it maps to `NSAlert` with one button per label and fires the callback with the 0-based index. Windows uses `MessageBoxW` (OK / OKCancel / YesNoCancel per count); GTK4 uses `MessageDialog` with `add_button`. - -Latent bug found and fixed at the same time: the pre-existing 2-arg `alert` dispatch in `PERRY_UI_TABLE` pointed at the 4-arg `perry_ui_alert` runtime symbol, so `alert("Info", "Done")` was reading `buttons_ptr` + `callback` from uninitialized registers. Simple form now routes to a dedicated `perry_ui_alert_simple(title, message)` FFI. - -### String preferences - -`preferencesSet(key, value: string | number)` / `preferencesGet(key): string | number | undefined`. The runtime already branched on the NaN-box tag to store/retrieve `NSString` vs `NSNumber` on all desktop backends — the types were the only missing piece. - -### App lifecycle hooks - -`onTerminate(cb)` and `onActivate(cb)` are now callable from TypeScript. macOS `PerryAppDelegate` gained `applicationWillTerminate:` and `applicationDidBecomeActive:` overrides that invoke the registered callbacks; GTK4 and Windows were already wired (`connect_shutdown`/`connect_activate` and `WM_DESTROY`/`WM_ACTIVATEAPP` respectively). Test-mode exit (`std::process::exit(0)`) now also fires the terminate hook so CI coverage includes it. - -### LazyVStack virtualization - -`crates/perry-ui-macos/src/widgets/lazyvstack.rs` is now an `NSTableView`-backed widget with a `PerryLazyVStackDelegate` (NSTableViewDataSource + NSTableViewDelegate). The user's `(index) => Widget` render closure is invoked lazily — for a 1000-row list, only ~15 rows are realized (the visible rect plus the small scroll buffer NSTableView prefetches). New `lazyvstackSetRowHeight(handle, height)` setter since NSTableView virtualization requires uniform row heights; default is 44pt. `lazyvstackUpdate(handle, newCount)` triggers `reloadData` which re-fetches only currently-visible rows. - -GTK4 and Windows kept their eager-render implementations — true virtualization there is a tracked follow-up; `set_row_height` on those backends is a no-op. - ---- - -## What Perry Handles Well (v0.5.151) - -**Layout:** VStack, HStack, ZStack, ScrollView, Spacer, Divider, Form, Section, NavigationStack, SplitView/FrameSplit -**Controls:** Text, Button, TextField, SecureField, Toggle, Slider, Picker, Image, ImageFile, ProgressView -**Modal / chrome:** Sheet (NSPanel), Alert + AlertWithButtons, Toolbar, multiple Windows -**Lists:** `LazyVStack` with true NSTableView-based virtualization on macOS (eager-render on GTK4/Windows), plus Table, ForEach -**State:** `State` and `State` with reactive binding, `state.onChange()`, `stateBindTextfield`, auto-reactive `Text(\`...${state.value}...\`)` -**Widget APIs:** addChild, clearChildren, setHidden, setEnabled, setTooltip, setControlSize, setOnHover, setOnDoubleClick, animateOpacity, animatePosition, setTint, setSize -**Text:** fontSize, fontWeight, color, selectable, fontFamily (including `"monospaced"`) -**System:** openURL, isDarkMode, preferencesSet/Get (both strings and numbers), clipboardRead/Write, openFileDialog, openFolderDialog, saveFileDialog, addKeyboardShortcut, context menus, Keychain, Notifications -**App lifecycle:** onTerminate, onActivate -**Data layer:** axios, better-sqlite3, fs, crypto, async/await, Promises — all via `--enable-js-runtime` - ---- - -## Follow-ups (outside this port's scope) - -- **GTK4 LazyVStack virtualization** — GTK4's `Gtk.ListView` + `Gtk.SignalListItemFactory` is the natural backend; currently eager-renders. -- **Windows LazyVStack virtualization** — Win32 `ListView` with `LVS_OWNERDATA` (virtual list) would be the equivalent; currently eager-renders. -- **iOS/tvOS/watchOS alert + lifecycle** — the FFI shape is now unified; iOS's `UIAlertController` and `UIApplicationDelegate` hooks are straightforward follow-ups. diff --git a/docs/history/OPTIMIZATION_PLAN.md b/docs/history/OPTIMIZATION_PLAN.md deleted file mode 100644 index 7b685ecdefe..00000000000 --- a/docs/history/OPTIMIZATION_PLAN.md +++ /dev/null @@ -1,196 +0,0 @@ -# Perry Optimization Plan - Next Steps - -## Current State (Feb 2026) - -### Perry Wins (no optimization needed) -| Benchmark | Perry | Node | Factor | -|-----------|-------|------|--------| -| sort | 1ms | 31ms | 31x faster | -| prime-sieve | 2ms | 6ms | 3x faster | -| array-ops | <1ms | 3ms | >3x faster | -| json-parse | <1ms | 0.5ms | parity | - -### Gaps to Close -| Benchmark | Perry | Node | Gap | Priority | -|-----------|-------|------|-----|----------| -| string-ops | 1ms | 0.1ms | 10x slower | **P0** (runtime crash) | -| fibonacci | 1271ms | 1049ms | 1.2x slower | P1 | -| object-create | 12ms | 5ms | 2.4x slower | P2 | -| matrix-multiply | 43ms | 15ms | 2.8x slower | P2 | - ---- - -## P0: Fix String Runtime Crashes - -**Impact:** Unblocks 10x improvement in string-ops, enables idiomatic TypeScript patterns - -### Issue 1: `indexOf` crashes Perry - -**Reproduction:** -```typescript -const s = "ABCDEFABC"; -const idx = s.indexOf("ABC"); // SIGSEGV -const idx2 = s.indexOf("ABC", 1); // SIGSEGV -``` - -**Location:** `crates/perry-runtime/src/string.rs` — `js_string_index_of` and `js_string_index_of_from` - -**Likely cause:** The runtime function exists (uses Rust's `str::find()`), but the codegen may be passing incorrect arguments or the NaN-boxing of the return value (-1 for not found) may be broken. - -**Fix approach:** -1. Add a standalone test case in Perry's test suite -2. Check codegen for `indexOf` calls — verify argument marshaling -3. Check return value handling for -1 (should be valid f64, not a special NaN-boxed value) - -### Issue 2: `split('')` crashes Perry - -**Reproduction:** -```typescript -const s = "ABC"; -const chars = s.split(''); // SIGSEGV -``` - -**Location:** `crates/perry-runtime/src/string.rs` — `js_string_split` - -**Likely cause:** Empty string as delimiter is a special case (split into individual characters). The runtime may not handle this pattern. - -**Fix approach:** -1. Check if `js_string_split` handles empty delimiter -2. If not, add special case: when delimiter is empty string, iterate UTF-8 chars and create array - ---- - -## P1: Improve Fibonacci (1.2x slower) - -**Current:** 1271ms Perry vs 1049ms Node (was 2778ms before optimizations) - -The 2.2x improvement from compiler optimizations was significant, but there's still a 22% gap. - -### Root cause analysis - -The remaining overhead is likely from: -1. **Function call overhead** — Each recursive call still has prologue/epilogue -2. **NaN-boxing on return** — Even with optimizations, the return value needs boxing - -### Optimization options (in order of ROI) - -#### Option A: Tail-call optimization for tail-recursive patterns -Not directly applicable to `fib(n-1) + fib(n-2)`, but could help with accumulator-style rewrites. - -#### Option B: Memoization detection -Compiler could detect pure recursive functions and auto-memoize. Complex to implement. - -#### Option C: Loop unrolling for known small recursion depths -Inline the first 2-3 levels of recursion to reduce call overhead. - -**Recommendation:** Accept the 1.2x gap for now — fibonacci is a micro-benchmark that doesn't reflect real-world patterns. The improvement from 2778ms to 1271ms is already excellent. - ---- - -## P2: Improve Object Creation (2.4x slower) - -**Current:** 12ms Perry vs 5ms Node (was 45ms before optimizations) - -### Root cause analysis - -The benchmark creates objects like: -```typescript -{ - id: i, - name: 'item', - value: i * 2, - nested: { a: i, b: i * 2 } -} -``` - -The 3.75x improvement suggests `js_object_alloc_fast` is being used for some cases, but not all. - -### Investigation needed - -**File:** `crates/perry-codegen/src/codegen.rs` - -Check: -1. Is `js_object_alloc_fast` used for the outer object? -2. Is it used for the nested `{ a: i, b: i * 2 }` object? -3. Are there other allocation paths being taken? - -### Potential fix - -The nested object literal may be falling back to `js_object_alloc` (slow path). Ensure the codegen uses `js_object_alloc_fast` for ALL object literals where every field has an initializer. - ---- - -## P2: Improve Matrix Multiply (2.8x slower) - -**Current:** 43ms Perry vs 15ms Node - -### Root cause analysis - -The benchmark is a triple-nested loop with array indexing: -```typescript -for (let i = 0; i < size; i++) { - for (let j = 0; j < size; j++) { - let sum = 0; - for (let k = 0; k < size; k++) { - sum = sum + a[i * size + k] * b[k * size + j]; - } - c[i * size + j] = sum; - } -} -``` - -Expected Perry to win here due to loop unrolling + BCE, but it's 2.8x slower. - -### Investigation needed - -**File:** `crates/perry-codegen/src/codegen.rs` — loop optimization passes - -Check: -1. Is bounds check elimination (BCE) triggering for `a[i * size + k]`? -2. Is loop unrolling happening for the inner `k` loop? -3. Is the multiplication `i * size + k` being hoisted/optimized? - -### Potential issues - -1. **BCE not triggering** — The index expression `i * size + k` may be too complex for BCE to prove safe -2. **No loop unrolling** — The inner loop may not be unrolled because `size` is a runtime value -3. **Repeated index calculation** — `i * size` could be hoisted out of the `j` and `k` loops - -### Fix approach - -1. Add loop-invariant code motion (LICM) pass to hoist `i * size` computation -2. Consider partial BCE for patterns where index is bounded by loop counter -3. Profile the generated assembly to identify bottlenecks - ---- - -## Execution Priority - -| Priority | Task | Expected Impact | Effort | -|----------|------|-----------------|--------| -| **P0** | Fix `indexOf` crash | Unblocks 10x string-ops improvement | Medium | -| **P0** | Fix `split('')` crash | Enables idiomatic string patterns | Low | -| P1 | Accept fibonacci gap | N/A (already 2.2x better) | None | -| P2 | Debug object-create alloc path | Could close 2.4x → 1.5x gap | Medium | -| P2 | Investigate matrix-multiply codegen | Could close 2.8x → 1.5x gap | High | - ---- - -## Verification Commands - -After each fix: - -```bash -# Rebuild Perry compiler -cd ~/projects/perry && cargo build --release - -# Rebuild demo -cd ~/projects/perry-demo -~/projects/perry/target/release/perry src/perry-server.ts -o dist/perry-server - -# Start server and test -PORT=3003 PERRY_RUNTIME=1 ./dist/perry-server & -curl -s 'http://localhost:3003/api/benchmarks/run/string-ops?iterations=100&size=10000' -curl -s 'http://localhost:3003/api/benchmarks/run/object-create?iterations=20&size=50000' -curl -s 'http://localhost:3003/api/benchmarks/run/matrix-multiply?iterations=10&size=200' -``` diff --git a/docs/history/PERF_ROADMAP.md b/docs/history/PERF_ROADMAP.md deleted file mode 100644 index 7f2f1dca2d9..00000000000 --- a/docs/history/PERF_ROADMAP.md +++ /dev/null @@ -1,136 +0,0 @@ -# Performance Roadmap: Closing the Zig Gap - -## Current State (v0.5.58) - -Perry compiles TypeScript to native via LLVM. On the image_conv benchmark (5×5 Gaussian blur, 3840×2160 RGB): - -| Component | Perry | Zig | Gap | Root Cause | -|---|---|---|---|---| -| Blur kernel | 280ms | ~200ms | 1.4× | No NEON autovectorization | -| Input gen (xorshift + gradient) | 120ms | ~30ms | 4× | NaN-box unbox per buffer access | -| FNV-1a hash | 57ms | ~16ms | 3.5× | Double-ABI function call overhead | -| **Total** | **457ms** | **246ms** | **1.86×** | | - -Starting point was 1,980ms (8× Zig). We've done 4.3× improvement. The remaining 1.86× is architectural. - -## What's Already Optimized - -These are DONE and working — don't re-implement: - -1. **i32 accumulator fast path** (`lower_expr_as_i32` in expr.rs): `rAcc += src[idx] * k` stays in i32. Handles Add/Sub/Mul/BitAnd/BitOr/BitXor/Shl/Shr/UShr, LocalGet (i32 slot or integer_locals), Integer, Uint8ArrayGet, flat-const IndexGet, clamp calls (smin/smax), Math.imul. The `can_lower_expr_as_i32` gate checks all leaves; `lower_expr_as_i32` emits native i32 ops. - -2. **Flat `[N x i32]` const tables** (flat_const_arrays): `const KERNEL: number[][] = [[1,4,7,4,1],...]` → private unnamed_addr `[25 x i32]` in .rodata. `IndexGet(IndexGet(X, i), j)` and aliased `krow[j]` (via `array_row_aliases`) emit `getelementptr + load i32`. - -3. **`@llvm.assume` bounds** in Uint8ArrayGet/Set: eliminates the branch+phi diamond for bounds checks. Single basic block per access. - -4. **`sdiv` for `(int / const) | 0`**: Pattern-matched before generic BitOr lowering. LLVM converts to `smulh + asr`. - -5. **`toint32_fast`**: Skips the 5-instruction NaN/Inf guard from v0.5.49 when `is_known_finite(ctx, expr)` returns true. - -6. **`x | 0` / `x >>> 0` noop**: When left operand is known-finite and right is Integer(0), emit just `fptosi + sitofp` (no toint32 guard, no or/lshr). - -7. **Clamp detection** (`detect_clamp3`, `detect_clamp_u8`): Threaded through `is_int32_producing_expr`, `collect_integer_let_ids`, `can_lower_expr_as_i32`. Call sites emit `@llvm.smax.i32 + @llvm.smin.i32`. - -8. **`alwaysinline`** on functions ≤8 stmts and i64-specialized wrappers (`force_inline` field on LlFunction). - -9. **`!invariant.load`** on buffer/array length loads. - -10. **`returns_integer` detection**: Functions whose ALL return paths end with `| 0` / `>>> 0` / bitwise → included in integer-candidate seeding. - -## The Three Optimizations That Would Close the Gap - -### 1. Typed Buffer Locals (eliminates NaN-box unbox — biggest single win) - -**Problem**: Every `src[idx]` and `dst[idx] = val` does: -```llvm -%handle_bits = bitcast double %buf_nanboxed to i64 -%handle = and i64 %handle_bits, 0x0000FFFFFFFFFFFF ; strip NaN-box tag -; ... then compute address from handle -``` -That's 2 extra instructions per access × 75 accesses per pixel × 8.3M pixels = 1.24 billion wasted instructions. - -**Fix**: When a `const buf = Buffer.alloc(N)` or function param is statically typed as `Buffer`/`Uint8Array`, store the raw `i64` pointer in an `i64` alloca instead of a NaN-boxed `double` alloca. `Uint8ArrayGet`/`Set` then skip the unbox — just `load i64` from the slot and use directly. - -**Implementation sketch**: -- In `stmt.rs` `Stmt::Let`, detect `init: BufferAlloc { .. }` or type `Named("Buffer")`/`Named("Uint8Array")`. Allocate an `I64` slot instead of `DOUBLE`. Store the raw pointer (from `js_buffer_alloc` which returns `I64`) directly. -- In `Uint8ArrayGet`/`Uint8ArraySet`, check if the `array` expr is `LocalGet(id)` where `id` has a typed-buffer slot. If so, `load i64` from the slot directly — no `bitcast + and POINTER_MASK`. -- Track typed-buffer locals in a `HashSet` on `FnCtx` (like `i32_counter_slots`). -- Module globals that are buffers: store as `I64` global instead of `DOUBLE`. - -**Estimated impact**: Eliminates ~2 instructions per buffer access. For input gen (48 accesses per 4-byte iteration × 6.2M iterations) + blur (75 accesses per pixel × 8.3M pixels), saves ~1.5B instructions → ~40-60ms. - -### 2. Interior/Border Loop Splitting (enables NEON autovectorization) - -**Problem**: The blur loop processes ALL pixels uniformly, including edge pixels that need clamping. The clamp logic (even as smin/smax) adds data-dependent index computation that prevents LLVM from vectorizing across pixels. - -**Fix**: Split the y-loop into three regions: -- Top border (y = 0..1): clamp needed -- Interior (y = 2..H-3): no clamp needed, all indices guaranteed in-bounds -- Bottom border (y = H-2..H-1): clamp needed - -Same for x. For the interior (99.9% of pixels), the kernel access pattern becomes: -``` -idx = ((y + ky) * W + (x + kx)) * 3 -``` -— pure arithmetic, no clamp, no smin/smax. LLVM can then vectorize the x-loop with NEON `ld3`/`st3` for stride-3 RGB deinterleaving. - -**Implementation**: This is a HIR-level transform, not codegen. Add a pass in `perry-transform` that detects the blur-like pattern: -``` -for (y) for (x) for (ky) for (kx) { - yy = clamp(y+ky, 0, H-1) - xx = clamp(x+kx, 0, W-1) -} -``` -And splits it into border + interior loops. The interior loop has the clamp calls replaced with direct arithmetic. - -**Estimated impact**: Interior loop becomes vectorizable → 4× throughput on the accumulation. Blur drops from 280ms to ~80-100ms. - -### 3. HIR-Level Function Inlining for Small Pure Functions - -**Problem**: `clampIdx` and `imul32` are compiled as separate LLVM functions with double-ABI wrappers. LLVM's `alwaysinline` inlines them, but the `sitofp/fptosi` conversion chain at the call boundary persists in the IR until instcombine runs — and instcombine doesn't always collapse `fptosi(sitofp(select(icmp(...))))`. - -**Fix**: Inline at the HIR level, BEFORE codegen. A pre-codegen pass in `perry-transform` that: -1. Identifies small (≤8 stmt) non-recursive pure functions. -2. At each call site, substitutes the function body with parameter renaming. -3. The result: the function body's `if/return` pattern is in the CALLER's HIR, and Perry's codegen sees it directly — no function call boundary, no double wrapper. - -For `clampIdx(v, lo, hi)`, the inlined HIR becomes: -``` -Let { yy_temp, init: v } -If { v < lo } → LocalSet(yy_temp, lo) -If { v > hi } → LocalSet(yy_temp, hi) -// yy_temp is now the clamped value -``` - -The codegen's `is_int32_producing_expr` already handles `If/Return` patterns and `LocalGet`/`LocalSet` — so the inlined body stays in the i32 path without any double conversion. - -**Implementation**: Add a new pass in `crates/perry-transform/src/inline.rs`. Walk all `Call(FuncRef(id), args)` in the HIR. If the callee has ≤8 stmts, is not recursive, and is not async/generator, replace the Call with an inlined copy of the body (fresh LocalIds via the module's id allocator, parameter locals initialized from the call args). - -**Estimated impact**: Eliminates the `sitofp/fptosi` chain at every clampIdx/clampU8/imul32 call site. For the blur (50 clamp calls per pixel × 8.3M pixels = 415M conversions eliminated) + FNV (24.8M imul32 call conversions eliminated). Combined: ~30-50ms saved. - -## Priority Order - -1. **Typed Buffer Locals** — broadest impact, affects ALL buffer-heavy code, relatively simple codegen change -2. **HIR-Level Inlining** — eliminates the double-ABI tax for ALL small functions, reusable across benchmarks -3. **Interior/Border Splitting** — most complex, biggest single-benchmark win, enables NEON - -With all three: projected **200-250ms** total, matching Zig. - -## Key Files - -- `crates/perry-codegen/src/expr.rs` — `lower_expr`, `lower_expr_as_i32`, `can_lower_expr_as_i32`, `Uint8ArrayGet`/`Set`, `FnCtx` struct -- `crates/perry-codegen/src/stmt.rs` — `Stmt::Let` lowering, i32 slot allocation -- `crates/perry-codegen/src/collectors.rs` — `collect_integer_locals`, `is_int32_producing_expr`, `collect_integer_let_ids`, clamp/returns-integer detectors -- `crates/perry-codegen/src/codegen.rs` — `compile_function`, `compile_module_entry`, `CrossModuleCtx`, i64-specialization -- `crates/perry-codegen/src/block.rs` — `LlBlock` instruction emission (`toint32`, `toint32_fast`, `load_invariant`, `sdiv`, etc.) -- `crates/perry-codegen/src/function.rs` — `LlFunction`, `force_inline`, `to_ir` -- `crates/perry-transform/src/` — HIR transform passes (new inline pass would go here) -- `crates/perry-hir/src/ir.rs` — HIR data structures (`Expr`, `Stmt`, `Function`) -- `crates/perry-runtime/src/value.rs` — NaN-boxing constants and value representation - -## Testing - -- `benchmarks/honest_bench/workloads/3_image_convolution/perry/image_conv.ts` — the blur benchmark -- Timed variant: use `Date.now()` around each phase (inputgen/blur/fnv) for per-component measurement -- `/tmp/run_gap_tests.sh` — gap test suite, verify no regressions -- Correctness: `checksum=2ba2e053` for the standard 3840×2160 image diff --git a/docs/history/PERRY_UI_IMPLEMENTATION.md b/docs/history/PERRY_UI_IMPLEMENTATION.md deleted file mode 100644 index 17ba586ab09..00000000000 --- a/docs/history/PERRY_UI_IMPLEMENTATION.md +++ /dev/null @@ -1,663 +0,0 @@ -# Perry UI Implementation Plan - -## Goal - -Add native UI support to Perry. A developer writes TypeScript with a SwiftUI-inspired declarative syntax, and Perry compiles it to a native application that uses real platform widgets — no custom rendering, no browser, no Electron. - -**End-to-end demo target:** A single `.ts` file compiles to a native macOS app that opens a window with a text label and a button. The same source code should be compilable to other platforms in the future without changes. - ---- - -## Architecture Overview - -Perry UI is split into **three layers**: - -1. **`perry-ui`** — Platform-agnostic widget definitions, layout system, state management, and the public API. This crate knows nothing about macOS, iOS, or Linux. It defines *what* a Button is, not *how* to render it. - -2. **`perry-ui-platform` crates** — One per platform. Each implements the widget traits from `perry-ui` using native APIs: - - `perry-ui-macos` — AppKit (NSWindow, NSButton, NSTextField, etc.) - - `perry-ui-ios` — UIKit (UIWindow, UIButton, UILabel, etc.) - - `perry-ui-linux` — GTK4 - - `perry-ui-windows` — WinUI 3 / Win32 (future) - - `perry-ui-android` — Android Views via JNI (future) - -3. **Compiler integration** — `perry-codegen` learns to emit native API calls when it encounters `perry/ui` imports. The `--target` flag determines which platform crate is linked. - -``` -Developer writes: - import { App, VStack, Text, Button } from "perry/ui" - -Compiler sees --target macos-arm64: - → Links perry-ui + perry-ui-macos - → Generates objc_msgSend calls for AppKit - -Compiler sees --target linux-x86_64: - → Links perry-ui + perry-ui-linux - → Generates GTK4 function calls - -Compiler sees --target ios-arm64: - → Links perry-ui + perry-ui-ios - → Generates UIKit calls + iOS app bundle -``` - ---- - -## Step 1: Create Crate Structure - -Add to the workspace `Cargo.toml`: - -```toml -[workspace] -members = [ - # ... existing crates ... - "crates/perry-ui", - "crates/perry-ui-macos", - "crates/perry-ui-ios", - "crates/perry-ui-linux", -] -``` - -### crates/perry-ui/ - -This is the **platform-agnostic core**. It defines: - -#### src/lib.rs — Public API re-exports -```rust -pub mod widgets; -pub mod layout; -pub mod state; -pub mod app; -pub mod platform; -``` - -#### src/widgets.rs — Widget trait and enum definitions - -Define a `Widget` trait that all widgets implement: - -```rust -pub trait Widget { - fn widget_type(&self) -> WidgetType; - fn children(&self) -> &[Box]; - fn layout_params(&self) -> &LayoutParams; -} -``` - -Define concrete widget descriptors (these are data, not renderers): - -```rust -pub enum WidgetType { - // Layout - VStack, - HStack, - ZStack, - Spacer, - Divider, - ScrollView, - // Content - Text, - Image, - // Controls - Button, - TextField, - Toggle, - Slider, - Picker, - // Navigation - NavigationStack, - Sheet, - Alert, -} -``` - -Each widget type has an associated config struct: - -```rust -pub struct TextConfig { - pub content: String, - pub font: FontDescriptor, - pub color: Color, - pub alignment: TextAlignment, -} - -pub struct ButtonConfig { - pub label: String, - pub style: ButtonStyle, - pub on_press: CallbackId, // Reference to compiled callback function -} - -pub struct VStackConfig { - pub spacing: f64, - pub alignment: HorizontalAlignment, - pub children: Vec, -} -``` - -#### src/layout.rs — Platform-agnostic layout constraints - -NOT CSS. A simple constraint system: - -```rust -pub struct LayoutParams { - pub padding: EdgeInsets, - pub frame: FrameConstraint, // min/max/ideal width+height - pub alignment: Alignment, -} - -pub struct EdgeInsets { - pub top: f64, - pub leading: f64, - pub bottom: f64, - pub trailing: f64, -} - -pub enum FrameConstraint { - Fixed(f64, f64), - Flexible { min_width: Option, max_width: Option, min_height: Option, max_height: Option }, - FillParent, -} -``` - -Layout resolution is simple: VStack/HStack distribute space among children linearly. No CSS cascade, no specificity, no multi-pass. Single pass, top-down. - -#### src/state.rs — Reactive state management - -Define the state model (SwiftUI-inspired): - -```rust -pub struct StateVar { - pub id: StateId, - pub initial_value: T, -} - -pub struct Binding { - pub source: StateId, - pub _phantom: std::marker::PhantomData, -} -``` - -When state changes, the platform backend receives a notification to re-render the affected widget subtree. The mechanism: -1. State change triggers a `StateChange { id: StateId, new_value: Value }` event -2. The widget tree is diffed (which widgets depend on this StateId?) -3. Only affected native widgets are updated - -#### src/platform.rs — Platform backend trait - -This is the **bridge** that platform crates implement: - -```rust -pub trait PlatformBackend { - fn create_window(&mut self, config: &WindowConfig) -> WindowId; - fn create_widget(&mut self, parent: WindowId, widget: &WidgetNode) -> NativeWidgetId; - fn update_widget(&mut self, id: NativeWidgetId, widget: &WidgetNode); - fn destroy_widget(&mut self, id: NativeWidgetId); - fn run_event_loop(&mut self); // Blocks until app exits - fn set_callback(&mut self, id: CallbackId, callback: NativeCallback); -} - -pub struct WindowConfig { - pub title: String, - pub width: f64, - pub height: f64, - pub resizable: bool, -} -``` - -#### src/app.rs — App lifecycle - -```rust -pub struct AppConfig { - pub name: String, - pub root_widget: WidgetNode, - pub window: WindowConfig, -} -``` - ---- - -### crates/perry-ui-macos/ - -Implements `PlatformBackend` using AppKit via Objective-C FFI. - -**Dependency:** Use the `objc2` crate ecosystem: -```toml -[dependencies] -perry-ui = { path = "../perry-ui" } -objc2 = "0.6" -objc2-foundation = { version = "0.3", features = ["NSString", "NSArray", "NSThread"] } -objc2-app-kit = { version = "0.3", features = [ - "NSApplication", "NSWindow", "NSView", "NSButton", - "NSTextField", "NSStackView", "NSControl", "NSText", - "NSRunningApplication", "NSResponder" -] } -``` - -#### Key files: - -- **src/lib.rs** — `MacOSBackend` implementing `PlatformBackend` -- **src/window.rs** — NSWindow creation and management -- **src/widgets/mod.rs** — Widget creation dispatch -- **src/widgets/text.rs** — NSTextField (label mode) creation -- **src/widgets/button.rs** — NSButton creation with target-action -- **src/widgets/vstack.rs** — NSStackView with vertical orientation -- **src/widgets/hstack.rs** — NSStackView with horizontal orientation -- **src/event_loop.rs** — NSApplication run loop - -#### Widget mapping (macOS): - -| Perry Widget | AppKit Class | Notes | -|---|---|---| -| Text | NSTextField (non-editable) | `.isBezeled = false, .isEditable = false` | -| Button | NSButton | `.bezelStyle = .rounded` | -| TextField | NSTextField (editable) | Default editable text field | -| Toggle | NSSwitch | macOS 10.15+ | -| Slider | NSSlider | Continuous by default | -| VStack | NSStackView | `.orientation = .vertical` | -| HStack | NSStackView | `.orientation = .horizontal` | -| ScrollView | NSScrollView | With document view | -| Image | NSImageView | Load from file or URL | -| Divider | NSBox | `.boxType = .separator` | - ---- - -### crates/perry-ui-ios/ - -Implements `PlatformBackend` using UIKit. - -**Dependency:** -```toml -[dependencies] -perry-ui = { path = "../perry-ui" } -objc2 = "0.6" -objc2-foundation = { version = "0.3" } -objc2-ui-kit = { version = "0.3", features = [ - "UIApplication", "UIWindow", "UIView", "UIButton", - "UILabel", "UITextField", "UIStackView", "UISwitch", - "UISlider", "UIScrollView", "UIImageView" -] } -``` - -#### Widget mapping (iOS): - -| Perry Widget | UIKit Class | Notes | -|---|---|---| -| Text | UILabel | Multi-line by default | -| Button | UIButton | `.configuration = .filled()` (iOS 15+) | -| TextField | UITextField | With border style | -| Toggle | UISwitch | Standard iOS toggle | -| Slider | UISlider | Continuous | -| VStack | UIStackView | `.axis = .vertical` | -| HStack | UIStackView | `.axis = .horizontal` | -| ScrollView | UIScrollView | With content view | -| Image | UIImageView | With content mode | -| Divider | UIView | 1px height, separator color | - ---- - -### crates/perry-ui-linux/ - -Implements `PlatformBackend` using GTK4. - -**Dependency:** -```toml -[dependencies] -perry-ui = { path = "../perry-ui" } -gtk4 = "0.9" -``` - -#### Widget mapping (Linux): - -| Perry Widget | GTK4 Class | Notes | -|---|---|---| -| Text | gtk4::Label | With markup support | -| Button | gtk4::Button | Standard button | -| TextField | gtk4::Entry | Single-line text input | -| Toggle | gtk4::Switch | Standard toggle | -| Slider | gtk4::Scale | Horizontal scale | -| VStack | gtk4::Box | `Orientation::Vertical` | -| HStack | gtk4::Box | `Orientation::Horizontal` | -| ScrollView | gtk4::ScrolledWindow | Automatic scroll policies | -| Image | gtk4::Picture | From file or paintable | -| Divider | gtk4::Separator | Horizontal separator | - ---- - -## Step 2: Compiler Integration - -### TypeScript API (what the developer writes) - -```typescript -import { App, VStack, HStack, Text, Button, State, TextField, Spacer } from "perry/ui" - -function CounterApp() { - const count = State(0) - - return App({ - title: "My Counter", - width: 400, - height: 300, - body: VStack({ spacing: 16 }, [ - Text(`Count: ${count.value}`, { font: "title" }), - HStack({ spacing: 8 }, [ - Button("Decrement", { onPress: () => count.set(count.value - 1) }), - Button("Increment", { onPress: () => count.set(count.value + 1) }), - ]), - ]) - }) -} - -CounterApp() -``` - -### HIR Changes (crates/perry-hir/) - -When the compiler sees `import ... from "perry/ui"`, it needs to: - -1. **Recognize perry/ui as a built-in module** (like `fs`, `path`, `crypto` are today) -2. **Lower widget constructor calls to HIR nodes** — `VStack(...)` becomes an `HIR::WidgetCreate` node -3. **Lower State() to reactive state HIR nodes** — tracks dependencies - -Add to `ir.rs`: -```rust -pub enum Expr { - // ... existing variants ... - WidgetCreate { - widget_type: WidgetType, - config: Box, // The config object - children: Vec, // Child widgets - }, - AppCreate { - config: Box, - }, - StateCreate { - initial_value: Box, - }, - StateGet { - state_id: Box, - }, - StateSet { - state_id: Box, - new_value: Box, - }, -} -``` - -### Codegen Changes (crates/perry-codegen/) - -For `--target macos-arm64`: - -`WidgetCreate { widget_type: Button, ... }` generates: -``` -call perry_ui_macos::create_button(label_ptr, label_len, callback_ptr) -> widget_id -``` - -For `--target linux-x86_64`: - -Same `WidgetCreate` generates: -``` -call perry_ui_linux::create_button(label_ptr, label_len, callback_ptr) -> widget_id -``` - -The codegen doesn't need to know about AppKit or GTK — it just calls the platform crate's exported functions. The platform crate handles the native API calls. - -### CLI Changes (crates/perry/) - -Extend the `--target` flag: - -``` -perry build app.ts --target macos-arm64 # macOS Apple Silicon -perry build app.ts --target macos-x86_64 # macOS Intel -perry build app.ts --target ios-arm64 # iOS (produces .app bundle) -perry build app.ts --target linux-x86_64 # Linux (requires GTK4) -perry build app.ts --target linux-arm64 # Linux ARM -perry build app.ts --target windows-x86_64 # Windows (future) -``` - -When `perry/ui` is imported and `--target` is set, the compiler links the appropriate platform crate. - -**If perry/ui is imported but no --target is specified**, default to the host platform. - ---- - -## Step 3: Tree-Shaking - -Perry must only include what is used. This works at two levels: - -### Cargo Feature Flags - -In `perry-ui/Cargo.toml`: -```toml -[features] -default = [] -text = [] -button = [] -textfield = [] -toggle = [] -slider = [] -vstack = [] -hstack = [] -zstack = [] -scrollview = [] -image = [] -navigation = [] -all-widgets = ["text", "button", "textfield", "toggle", "slider", "vstack", "hstack", "zstack", "scrollview", "image", "navigation"] -``` - -Each platform crate mirrors these features: -```toml -# perry-ui-macos/Cargo.toml -[features] -text = ["perry-ui/text"] -button = ["perry-ui/button"] -# ... -``` - -### Compile-Time Widget Selection - -When `perry-codegen` processes the source, it tracks which widgets are actually used: -- `import { Text, Button, VStack } from "perry/ui"` → only `text`, `button`, `vstack` features enabled -- Unused widgets are not compiled, not linked, not in the binary - -The compiler should emit a build manifest that specifies exactly which widget features to enable, then invoke `cargo build` with those features. - ---- - -## Step 4: Implementation Order - -### Phase 1 — Foundation (do this first) - -1. Create `crates/perry-ui/` with the trait definitions and widget types. No platform code yet. Just the API contract. - -2. Create `crates/perry-ui-macos/` with a minimal `PlatformBackend` implementation: - - `create_window` → opens an NSWindow - - `create_widget` for `Text` → creates an NSTextField label - - `create_widget` for `Button` → creates an NSButton - - `create_widget` for `VStack` → creates an NSStackView - - `run_event_loop` → runs NSApplication - -3. Add a **standalone Rust test** (not through the Perry compiler yet) that: - - Creates a `MacOSBackend` - - Creates a window with a VStack containing a Text and a Button - - Runs the event loop - - **Verifies it works natively before touching the compiler** - -4. Wire it into `perry-codegen`: - - Recognize `perry/ui` imports - - Generate calls to the platform backend - - Link the correct platform crate based on `--target` - -5. **Demo:** `perry build counter.ts --target macos-arm64` produces a native macOS app. - -### Phase 2 — More Widgets + Linux - -6. Add remaining widgets to macOS backend: TextField, Toggle, Slider, HStack, ScrollView, Image, Divider, Spacer. - -7. Create `crates/perry-ui-linux/` with GTK4 backend implementing the same widgets. - -8. **Demo:** Same `counter.ts` compiles to both macOS and Linux native apps. - -### Phase 3 — State Management - -9. Implement the reactive state system in `perry-ui`: - - `State` creation and tracking - - Dependency graph (which widgets read which state?) - - Change notification to platform backend - -10. Wire state into codegen: - - `State(0)` becomes a state allocation - - `count.value` becomes a state read with dependency registration - - `count.set(...)` becomes a state write + re-render trigger - -11. **Demo:** Counter app with working increment/decrement that updates the UI. - -### Phase 4 — iOS - -12. Create `crates/perry-ui-ios/` with UIKit backend. - -13. Add iOS app bundle generation to the compiler (Info.plist, code signing, etc.). - -14. **Demo:** Same `counter.ts` compiles to an iOS app. - -### Phase 5 — Navigation + Polish - -15. NavigationStack, Sheet, Alert widgets. -16. Theming / Dark Mode support (read system preference, propagate to widgets). -17. Accessibility attributes (labels, hints — mapped to native accessibility APIs). - ---- - -## Key Design Decisions - -### Why native widgets, not custom rendering? - -- **Performance:** Native widgets are GPU-accelerated by the OS. We don't beat Apple at rendering on their own hardware. -- **Feel:** Native scrolling, animations, dark mode, accessibility — all free. -- **Binary size:** No Skia dependency (15-20MB saved). -- **Maintenance:** OS updates improve our apps automatically. -- **Accessibility:** VoiceOver, TalkBack, screen readers work out of the box. - -### Why SwiftUI-inspired, not React-inspired? - -- SwiftUI's declarative model maps cleanly to TypeScript (object configs, closures). -- No JSX needed, no build step beyond Perry's compiler. -- State management is simpler (no useEffect, no dependency arrays). -- Property-based API is more TypeScript-idiomatic than JSX. - -### Why separate platform crates? - -- **Compile time:** Only the target platform is compiled. -- **Dependencies:** macOS crate pulls in objc2, Linux pulls in gtk4. Never mixed. -- **Maintainability:** Platform experts can work on one crate without touching others. -- **Future extensibility:** Adding Android = adding one crate, no changes to perry-ui. - ---- - -## Important Constraints - -1. **No runtime platform detection.** The platform is chosen at compile time via `--target`. The binary contains only one platform backend. - -2. **No custom rendering fallback.** If a widget doesn't have a native mapping on a platform, it's a compile error, not a runtime fallback to canvas drawing. - -3. **Widget API must be platform-agnostic.** No `NSButton`-specific properties in the TypeScript API. If a property can't be mapped to all supported platforms, it goes in a platform-specific extension, not the core API. - -4. **State updates must be minimal.** When `count.set(5)` is called, only the `Text` widget displaying `count` should update. No full tree re-render. - -5. **perry/ui is optional.** Server applications that don't import `perry/ui` must have zero overhead — no UI code linked, no platform dependencies. - ---- - -## File Checklist - -When this implementation is complete, the following files should exist: - -``` -crates/ -├── perry-ui/ -│ ├── Cargo.toml -│ └── src/ -│ ├── lib.rs -│ ├── widgets.rs -│ ├── layout.rs -│ ├── state.rs -│ ├── app.rs -│ └── platform.rs -│ -├── perry-ui-macos/ -│ ├── Cargo.toml -│ └── src/ -│ ├── lib.rs -│ ├── window.rs -│ ├── event_loop.rs -│ └── widgets/ -│ ├── mod.rs -│ ├── text.rs -│ ├── button.rs -│ ├── vstack.rs -│ ├── hstack.rs -│ ├── textfield.rs -│ ├── toggle.rs -│ ├── slider.rs -│ ├── scrollview.rs -│ ├── image.rs -│ ├── divider.rs -│ └── spacer.rs -│ -├── perry-ui-ios/ -│ ├── Cargo.toml -│ └── src/ -│ ├── lib.rs -│ ├── window.rs -│ ├── event_loop.rs -│ └── widgets/ -│ ├── mod.rs -│ ├── text.rs -│ ├── button.rs -│ ├── vstack.rs -│ ├── hstack.rs -│ └── ... (same as macos) -│ -├── perry-ui-linux/ -│ ├── Cargo.toml -│ └── src/ -│ ├── lib.rs -│ ├── window.rs -│ ├── event_loop.rs -│ └── widgets/ -│ ├── mod.rs -│ ├── text.rs -│ ├── button.rs -│ ├── vstack.rs -│ ├── hstack.rs -│ └── ... (same as macos) -│ -├── perry-hir/src/ir.rs # Extended with Widget/State HIR nodes -├── perry-codegen/src/codegen.rs # Extended with UI codegen -└── perry/src/main.rs # Extended --target flag - -example-code/ -└── counter-app/ - └── main.ts # The demo counter app - -test-files/ -├── test_ui_text.ts -├── test_ui_button.ts -├── test_ui_vstack.ts -└── test_ui_state.ts -``` - ---- - -## Testing Strategy - -### Unit Tests (Rust) -- `perry-ui`: Test layout constraint resolution, state dependency tracking, widget tree diffing -- `perry-ui-macos`: Test that widget creation produces valid AppKit objects (requires macOS CI) -- `perry-ui-linux`: Test that widget creation produces valid GTK4 objects (requires Linux CI) - -### Integration Tests (TypeScript → Binary) -- Compile `test_ui_text.ts` → verify binary runs and creates a window (use accessibility APIs or screenshot comparison) -- Compile `test_ui_button.ts` → verify button click triggers callback -- Compile same source for macOS and Linux → verify both produce working apps - -### Parity Tests -- Every widget that works on macOS must also work on Linux (and vice versa) -- Track parity in a test matrix, similar to existing `test-parity/reports/` diff --git a/docs/history/README.md b/docs/history/README.md deleted file mode 100644 index 55ca2669ea3..00000000000 --- a/docs/history/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Archived planning docs - -These are historical planning / status / post-mortem documents that were -moved out of the repository root (#5064). They reflect the state of the -project at the time they were written and are **not** kept up to date — they -are preserved here for context only. - -For current, living documentation see: - -- [`CLAUDE.md`](../../CLAUDE.md) — architecture orientation and build commands -- [`CHANGELOG.md`](../../CHANGELOG.md) — per-version history -- [`CONTRIBUTING.md`](../../CONTRIBUTING.md) — contributor workflow -- [`README.md`](../../README.md) — project overview - -Do not treat anything in this directory as a description of the current -codebase. In particular, `BUG-STRING-COMPARISON.md` describes a bug that has -since been fixed (regression coverage lives in -`test-files/test_edge_regression.ts` and `test_string_pointer_semantics.ts`), -and the version/feature claims in `GAPS.md`, `PERF_ROADMAP.md`, etc. are -stale. diff --git a/docs/history/TASK.md b/docs/history/TASK.md deleted file mode 100644 index b5790e3a956..00000000000 --- a/docs/history/TASK.md +++ /dev/null @@ -1,2 +0,0 @@ -Work through this checklist by dependency readiness. Fully implement one ready task before moving to the next. Respect After: dependencies. Preserve current behavior unless a task requires a cutover. Validate the cited issue before replying. Keep updates concise and implementation-focused. ------ diff --git a/docs/history/UI_ADJSUTMENTS.md b/docs/history/UI_ADJSUTMENTS.md deleted file mode 100644 index f93a7572b5c..00000000000 --- a/docs/history/UI_ADJSUTMENTS.md +++ /dev/null @@ -1,210 +0,0 @@ -PLAN A: Perry Framework Changes - - All work in ~/projects/perry. These are the perry-ui enhancements needed to make Pry possible. - - Current State - - Perry UI (v0.2.130) has: Text, Button, VStack, HStack, Spacer, Divider, TextField, Toggle, Slider, numeric-only State with reactive text - binding, Cmd+Q quit, single window. - - Perry UI lacks: dynamic widget mutation, scrolling, text styling, clipboard, keyboard shortcuts, context menus, file dialogs, focus management. - - How to Add a New FFI Function (pattern for all changes below) - - Every new function requires changes in 3 places: - 1. Rust implementation — in crates/perry-ui-macos/src/widgets/*.rs or a new file - 2. FFI export — #[no_mangle] pub extern "C" in crates/perry-ui-macos/src/lib.rs - 3. Codegen — function declaration (~line 9196) AND match arm (~line 27315) in crates/perry-codegen/src/codegen.rs - - --- - A.0: Dynamic Widget Tree (CRITICAL — must prove first) - - Risk gate: Validates that widgets can be created/removed from within event loop callbacks. - FFI Function: perry_ui_widget_clear_children(parent: i64) - Location: crates/perry-ui-macos/src/widgets/mod.rs - Purpose: Remove all arrangedSubviews from an NSStackView - ──────────────────────────────────────── - FFI Function: perry_ui_widget_set_hidden(handle: i64, hidden: f64) - Location: same - Purpose: Call setHidden() on an NSView - Implementation notes: - - clear_children: Get parent from WIDGETS vec, downcast to NSStackView, iterate arrangedSubviews(), call removeArrangedSubview() + - removeFromSuperview() on each - - set_hidden: Get view from WIDGETS vec, call setHidden(hidden != 0.0) - - Verification: Test TypeScript app — button press clears a VStack and adds new Text children dynamically. - - --- - A.1: Text Mutation & Layout Control - FFI Function: perry_ui_text_set_string(handle: i64, text_ptr: i64) - Location: crates/perry-ui-macos/src/widgets/text.rs - Purpose: Update NSTextField string value dynamically - ──────────────────────────────────────── - FFI Function: perry_ui_vstack_create_with_insets(spacing: f64, top: f64, left: f64, bottom: f64, right: f64) -> i64 - Location: crates/perry-ui-macos/src/widgets/vstack.rs - Purpose: VStack with configurable edge insets (current hardcodes 20px) - ──────────────────────────────────────── - FFI Function: perry_ui_hstack_create_with_insets(spacing: f64, top: f64, left: f64, bottom: f64, right: f64) -> i64 - Location: crates/perry-ui-macos/src/widgets/hstack.rs - Purpose: Same for HStack - Implementation notes: - - text_set_string: Extract StringHeader from NaN-boxed pointer, call setStringValue() on the NSTextField - - *_with_insets: Same as existing create but pass custom NSEdgeInsets instead of hardcoded 20px - - --- - A.2: ScrollView, Clipboard & Keyboard Shortcuts - - ScrollView (new widget) - FFI Function: perry_ui_scrollview_create() -> i64 - Location: NEW: crates/perry-ui-macos/src/widgets/scrollview.rs - Purpose: Create NSScrollView (vertical scroller, auto-hide) - ──────────────────────────────────────── - FFI Function: perry_ui_scrollview_set_child(scroll: i64, child: i64) - Location: same - Purpose: Set the documentView - Implementation notes: - - Create NSScrollView, set hasVerticalScroller = true, autohidesScrollers = true - - set_child: Set child as the documentView - - Need to add "NSScrollView" feature to crates/perry-ui-macos/Cargo.toml objc2-app-kit features - - Clipboard - ┌───────────────────────────────────────┬───────────────────────────────────────────┬─────────────────────────────────────────────────────────┐ - │ FFI Function │ Location │ Purpose │ - ├───────────────────────────────────────┼───────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ perry_ui_clipboard_read() -> i64 │ NEW: │ Read string from general pasteboard, returns NaN-boxed │ - │ │ crates/perry-ui-macos/src/clipboard.rs │ StringHeader ptr │ - ├───────────────────────────────────────┼───────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ perry_ui_clipboard_write(text_ptr: │ same │ Write string to general pasteboard │ - │ i64) │ │ │ - └───────────────────────────────────────┴───────────────────────────────────────────┴─────────────────────────────────────────────────────────┘ - Implementation notes: - - Use NSPasteboard::generalPasteboard(), read/write NSPasteboardTypeString - - Return value: allocate StringHeader + UTF-8 data, NaN-box as STRING_TAG - - Need to add "NSPasteboard" feature to Cargo.toml - - Keyboard Shortcuts - FFI Function: perry_ui_add_keyboard_shortcut(key_ptr: i64, modifiers: f64, callback: f64) - Location: crates/perry-ui-macos/src/app.rs - Purpose: Add menu item with key equivalent + closure callback - Implementation notes: - - Extend setup_menu_bar() or add items after setup - - Create NSMenuItem with keyEquivalent and keyEquivalentModifierMask - - Modifiers: 1.0 = Cmd, 2.0 = Shift, 3.0 = Cmd+Shift (or use bitfield) - - Custom target class (like PerryButtonTarget) that calls js_closure_call0 - - --- - A.3: Text Styling & Button Styling - FFI Function: perry_ui_text_set_color(handle: i64, r: f64, g: f64, b: f64, a: f64) - Location: crates/perry-ui-macos/src/widgets/text.rs - Purpose: Set NSTextField textColor - ──────────────────────────────────────── - FFI Function: perry_ui_text_set_font_size(handle: i64, size: f64) - Location: same - Purpose: Set font size - ──────────────────────────────────────── - FFI Function: perry_ui_text_set_font_weight(handle: i64, weight: f64) - Location: same - Purpose: Set bold (1.0) / regular (0.0) - ──────────────────────────────────────── - FFI Function: perry_ui_text_set_selectable(handle: i64, selectable: f64) - Location: same - Purpose: Make text selectable for copy - ──────────────────────────────────────── - FFI Function: perry_ui_button_set_bordered(handle: i64, bordered: f64) - Location: crates/perry-ui-macos/src/widgets/button.rs - Purpose: Borderless mode for tree toggle buttons - ──────────────────────────────────────── - FFI Function: perry_ui_button_set_title(handle: i64, title_ptr: i64) - Location: same - Purpose: Update button label dynamically - Implementation notes: - - set_color: NSColor::colorWithRed_green_blue_alpha(), call setTextColor(). Add "NSColor" feature. - - set_font_size: NSFont::systemFontOfSize(), call setFont(). Add "NSFont" feature. - - set_font_weight: NSFont::systemFontOfSize_weight() with NSFontWeightBold or NSFontWeightRegular - - set_bordered: Call setBordered() on NSButton - - set_title: Extract StringHeader, call setTitle() on NSButton - - --- - A.4: Focus & Scroll-To - FFI Function: perry_ui_textfield_focus(handle: i64) - Location: crates/perry-ui-macos/src/widgets/textfield.rs - Purpose: Make text field first responder - ──────────────────────────────────────── - FFI Function: perry_ui_scrollview_scroll_to(scroll: i64, child: i64) - Location: crates/perry-ui-macos/src/widgets/scrollview.rs - Purpose: Scroll to make a child widget visible - ──────────────────────────────────────── - FFI Function: perry_ui_scrollview_get_offset(scroll: i64) -> f64 - Location: same - Purpose: Get current Y scroll offset - ──────────────────────────────────────── - FFI Function: perry_ui_scrollview_set_offset(scroll: i64, offset: f64) - Location: same - Purpose: Restore scroll position after rebuild - Implementation notes: - - focus: Get NSTextField from WIDGETS, get its window, call makeFirstResponder() - - scroll_to: Get child NSView, call scrollRectToVisible() on it - - get/set_offset: Access contentView.bounds.origin.y - - --- - A.5: Context Menus, File Dialog & Window Sizing - - Context Menus - FFI Function: perry_ui_context_menu_create() -> i64 - Location: NEW: crates/perry-ui-macos/src/menu.rs - Purpose: Create NSMenu - ──────────────────────────────────────── - FFI Function: perry_ui_context_menu_add_item(menu: i64, title_ptr: i64, callback: f64) - Location: same - Purpose: Add NSMenuItem with callback - ──────────────────────────────────────── - FFI Function: perry_ui_widget_set_context_menu(widget: i64, menu: i64) - Location: same - Purpose: Set menu property on NSView - File Dialog - FFI Function: perry_ui_file_open_dialog(allowed_types_ptr: i64, callback: f64) - Location: NEW: crates/perry-ui-macos/src/file_dialog.rs - Purpose: Show NSOpenPanel, call callback with selected path - Implementation notes: - - Create NSOpenPanel, set allowedContentTypes for .json - - Run modal, get selected URL, convert to path string - - Call js_closure_call1(callback, nanboxed_path_string) - - Window Sizing - ┌─────────────────────────────────────────────────────┬──────────────────────────────────┬─────────────────────────┐ - │ FFI Function │ Location │ Purpose │ - ├─────────────────────────────────────────────────────┼──────────────────────────────────┼─────────────────────────┤ - │ perry_ui_app_set_min_size(app: i64, w: f64, h: f64) │ crates/perry-ui-macos/src/app.rs │ Set window minimum size │ - ├─────────────────────────────────────────────────────┼──────────────────────────────────┼─────────────────────────┤ - │ perry_ui_app_set_max_size(app: i64, w: f64, h: f64) │ same │ Set window maximum size │ - └─────────────────────────────────────────────────────┴──────────────────────────────────┴─────────────────────────┘ - --- - Summary: All Perry FFI Functions - Phase: A.0 - Functions: widget_clear_children, widget_set_hidden - New Files: — - ──────────────────────────────────────── - Phase: A.1 - Functions: text_set_string, vstack_create_with_insets, hstack_create_with_insets - New Files: — - ──────────────────────────────────────── - Phase: A.2 - Functions: scrollview_create, scrollview_set_child, clipboard_read, clipboard_write, add_keyboard_shortcut - New Files: scrollview.rs, clipboard.rs - ──────────────────────────────────────── - Phase: A.3 - Functions: text_set_color, text_set_font_size, text_set_font_weight, text_set_selectable, button_set_bordered, button_set_title - New Files: — - ──────────────────────────────────────── - Phase: A.4 - Functions: textfield_focus, scrollview_scroll_to, scrollview_get_offset, scrollview_set_offset - New Files: — - ──────────────────────────────────────── - Phase: A.5 - Functions: context_menu_create, context_menu_add_item, widget_set_context_menu, file_open_dialog, app_set_min_size, app_set_max_size - New Files: menu.rs, file_dialog.rs - Total: 24 new FFI functions, 4 new Rust files, ~50 codegen declarations, ~100 codegen match arms - - Cargo.toml feature additions: "NSScrollView", "NSPasteboard", "NSFont", "NSColor", "NSOpenPanel", "NSMenu", "NSMenuItem" - - diff --git a/docs/history/issue60_writeup.md b/docs/history/issue60_writeup.md deleted file mode 100644 index 4edd9ebc048..00000000000 --- a/docs/history/issue60_writeup.md +++ /dev/null @@ -1,87 +0,0 @@ -# Issue #60: Dynamic Property Write Performance - -## Problem - -`obj["field_" + j] = value` was **84× slower** than Node.js (1,300ms vs 16ms for 10k objects × 20 fields). - -## What we shipped (v0.5.51 + v0.5.55) - -Two changes brought it to **77ms (4.5× Node)** — a **17× speedup**: - -### 1. Content-hash transition cache (v0.5.51, `object.rs`) - -The shape-transition cache was keyed on **string pointer identity**. Each `"field_" + j` allocates a fresh string, so the pointer differs across objects even though the content is identical. Every write missed the cache and fell through to the O(n) linear key scan + clone-on-shared slow path. - -**Fix**: Key the cache on FNV-1a content hash instead of pointer. Same content → same hash → cache hit regardless of which allocation produced the string. Cache size increased 4096 → 16384. - -**Result**: 1,300ms → 136ms (9.6× faster). - -**Key code**: `object.rs` — `TransitionEntry.key_hash`, `key_content_hash()`, `transition_cache_lookup()`, `transition_cache_insert()`. - -### 2. Static global cache + atomic descriptor flag (v0.5.55, `object.rs`) - -The transition cache was a `thread_local!` with `UnsafeCell`. On macOS/aarch64, each `TRANSITION_CACHE.with(|c| ...)` call goes through the dyld TLV resolver, adding ~350ns per access. User code is single-threaded, so TLS is unnecessary. - -**Fix**: `static mut TRANSITION_CACHE_GLOBAL` (plain global, no TLS). Also replaced `ANY_DESCRIPTORS_IN_USE` from `thread_local! Cell` to `static AtomicBool` with `Relaxed` load (single instruction, no TLS overhead). - -**Result**: 136ms → 77ms (1.8× faster). - -**Key code**: `object.rs` — `TRANSITION_CACHE_GLOBAL`, `GLOBAL_DESCRIPTORS_IN_USE`. - -## What we tried and rejected - -### Inline write PIC in codegen (two attempts) - -**Idea**: Emit the transition cache lookup as inline LLVM IR at each `obj[key] = val` call site, bypassing the `extern "C"` function call overhead (pointer validation, GC header check, closure detection, frozen/sealed check). - -**Attempt 1 — Hash helper function + inline cache check**: Called `perry_key_content_hash(key)` (small exported function doing just FNV), then did the cache slot computation + entry comparison + direct field write inline. **Result: 98ms (slower than 77ms)**. The hash function call had the same overhead as the validation it replaced. - -**Attempt 2 — Fully inline FNV loop + cache check**: Emitted the FNV-1a byte loop as raw LLVM IR with phi back-edges, plus cache lookup and direct write — zero function calls on the hit path. **Result: 95ms (still slower)**. The inline code bloated the loop body, causing instruction cache pressure and branch predictor pollution. The pre-compiled runtime function is better optimized by Rust's compiler and shared across all call sites. - -**Lesson**: Inlining doesn't help when the hash computation dominates the per-write cost. V8's inline caches work by *eliminating* the hash (interned strings → pointer identity check → 1 instruction), not by inlining it. - -### Other micro-optimizations tried - -- **Fast hash for short keys** (bulk u64 load + wyhash mix instead of byte-by-byte FNV): Slower — `copy_nonoverlapping` + extra branching was worse than the simple loop that LLVM already unrolls well. -- **Hoisting cache check before validation**: Slightly slower — extra conditional branching on the keys_array validation added overhead without saving enough on the (already-fast) frozen/sealed check. -- **Hybrid pointer+content cache**: Two-level lookup (try pointer identity first, fall back to content hash). Slower — checking two cache slots per write added overhead. - -## Remaining gap analysis - -**77ms Perry vs 17ms Node = 4.5×** - -Per-write cost breakdown (200k writes): - -| Step | Perry | V8 (Node) | -|------|-------|-----------| -| Function call frame | ~10ns | 0ns (IC inline in JIT code) | -| Pointer validation + GC/closure checks | ~20ns | 0ns (IC guarantees type) | -| FNV-1a hash (8 bytes) | ~10ns | 0ns (strings pre-interned) | -| Cache lookup (global array load + compare) | ~5ns | ~2ns (pointer compare) | -| Field write | ~5ns | ~2ns | -| **Total** | **~50ns** | **~4ns** | - -String concatenation adds ~40ms to both (similar cost). - -## What would close the gap - -**Property-name string interning** — the one optimization that would actually eliminate the hash: - -1. Add a global intern table: `HashMap<(u32, [u8; 8]), *const StringHeader>` keyed on (byte_len, first-8-bytes) with content verification -2. In `js_string_concat` and other string-producing functions, check the intern table before returning -3. First occurrence allocates normally; subsequent identical strings return the cached pointer -4. The intern table is a GC root (entries are never freed — property name strings are typically long-lived) -5. The transition cache switches back to **pointer identity** (one `usize` compare, no hash) - -This would reduce per-write cost from ~50ns to ~15ns (3× faster), bringing Perry to ~25ms — within 1.5× of Node. - -**Scope**: This touches the string allocator (`string.rs`), GC roots (`gc.rs`), and the transition cache (`object.rs`). The intern table lookup adds ~5ns to every string concatenation, but saves ~15ns on every property write. Net positive for property-heavy code, roughly neutral for string-heavy code without property access. - -## File locations - -- **Transition cache**: `crates/perry-runtime/src/object.rs` lines 396-490 -- **`js_object_set_field_by_name`**: `crates/perry-runtime/src/object.rs` ~line 2220 -- **IndexSet codegen**: `crates/perry-codegen/src/expr.rs` ~line 1964 -- **Runtime declarations**: `crates/perry-codegen/src/runtime_decls.rs` ~line 856 -- **StringHeader layout**: `crates/perry-runtime/src/string.rs` line 42 (utf16_len:0, byte_len:4, capacity:8, refcount:12, data:16) -- **ObjectHeader layout**: `crates/perry-runtime/src/object.rs` line 929 (object_type:0, class_id:4, parent_class_id:8, field_count:12, keys_array:16, fields:24+) diff --git a/docs/object-write-matrix.md b/docs/object-write-matrix.md deleted file mode 100644 index 38333ee51aa..00000000000 --- a/docs/object-write-matrix.md +++ /dev/null @@ -1,87 +0,0 @@ -# Object-write coverage matrix (#6812) - -Status: MEASURED (triage pass) — path column derived from code gates on -`main` @ `8bda0351e`; numbers are medians of 3 alternated runs on the RECORDED runtime (node v26.3.0 — re-pin here when the comparison baseline moves), -macOS arm64, release + default pipeline, checksums identical on every cell -(raw samples: `matrix_raw_2026-07-25.csv`; ambient load ~7 — cells promoted -to PR evidence get the full 15-run idle protocol). Goal per the raised bar: -**beat node on every row** or justify the fallback by semantics / measured -lack of benefit. - -## The three write mechanisms and their gates - -1. **Whole-loop numeric clone** (`stmt/loops.rs::match_object_array_write_loop` - → `lower_object_array_write_versioned_for`; preflight - `js_object_array_numeric_write_guard`): constant-counted nested `for`s, - inner from 0 (bound ≤ 16M), one immutable `const o = objs[i]` alias, ≤ 4 - static-key writes to it, RHS numeric expressions over counters/constants, - no calls/allocations/labels; preflight proves dense same-shape prefix, - writable own slots, layout. Strongest path: call-free, barrier-free body. -2. **Static-key write PIC** (`expr/proxy_reflect.rs::lower_put_value_static_write_ic`, - four inline entries plus four outlined entries; miss/priming - `proxy/put_value.rs::js_put_value_set_ic_miss`): static (interned/const) - key, target ≡ receiver expression, safepoint-free RHS, heap object, - non-forwarded, blocking flags clear (frozen/sealed/no-extend/descriptors/ - typed-intact), **`class_id != 0`** OR the runtime's plain-ordinary birth flag - (#8098), shape-token match on the ShapeId, slot in bounds. (The - `object_type == REGULAR` term this list used to carry was already stale — the - emitted precheck reads `class_id` and the ShapeId, never offset 0 — and #8113 - deleted the word.) -3. **Runtime fast path** (header-first classification + existing-own-data - overwrite routing in `js_object_set_field_by_name` / `put_value_set`): - everything else that is still an ordinary data write. - -## Matrix - -Ratio = perry/node median (fill from measurement; `<1` = beating node). - -| cell | shape of the write | path (gate) | perry ms | node ms | ratio | verdict | -|---|---|---|---:|---:|---:|---| -| w0_canonical | 2 static writes, const alias, nested const `for`s, `+`/`-` RHS | whole-loop clone | 6 | 9 | **0.67** | BEATS node | -| w1_three_writes | 3 static writes, same loop | whole-loop clone (≤4 fields) | 7 | 9 | **0.78** | BEATS node | -| w2_one_write | 1 static write | whole-loop clone | 5 | 7 | **0.71** | BEATS node | -| w3_mul_rhs | RHS uses `*` | *(pre-#6830 baseline)* PIC → whole-loop clone | 47 → 6 | 7 | 6.7 → **0.86** | BEATS node (#6830 admits `Mul` with endpoint-product ranges) | -| w4_dyn_bound | inner bound `objs.length` | *(pre-#6830 baseline)* PIC → whole-loop clone | 51 → 6 | 8 | 6.4 → **0.75** | BEATS node (#6830 sentinel-resolved dynamic bound) | -| w5_while | same body, `while` form | *(pre-#6830 baseline)* PIC → whole-loop clone | 46 → 5 | 7 | 6.6 → **0.71** | BEATS node (#6830 while normalization) | -| w6_call_in_body | user call inside body | *(pre-fix baseline)* generic → inline + whole-loop clone | 100 → 5-7 | 7 | 14.3 → **~0.9** | BEATS node — the inliner's missing PutValueSet arm hid RHS calls from inlining; once inlined, the hoisted temp matches the clone grammar | -| w7_mut_alias | `let o = objs[i]` | *(pre-#6830 baseline)* generic → whole-loop clone | 70 → 6 | 8 | 8.8 → **0.75** | BEATS node (#6830: matched region structurally forbids reassignment) | -| w8_helper_mono | writes inside helper fn, mono | *(pre-#6812-w8 baseline)* per-write PIC → whole-loop clone | 47 → 6 | 8 | 5.9 → **0.75** | BEATS node — the inliner's temp `let`s are admitted by substitution, so inlined helper bodies clone | -| w9_poly2 | 2 shapes through one site | *(pre-multi-group baseline)* PIC → per-group whole-loop clone | 27 → 5-8 | 6 | 4.5 → **~1.0** | Ties/beats node — the inliner's two-array body matches as two monomorphic groups, one guard call each (idle 15-run pending for the exact ratio) | -| w10_poly8 | 8 shapes through one site | *(pre-tail baseline)* PIC exhausted → 4 inline + 4 outlined ways | 27 (pre-tail) | 19 | 1.4 (pre-tail) | bounded tail prevents fourth-way thrashing; the scaled 60M-write follow-up drops Perry 2,359 → 768 ms (67%) | -| w11_stable_dynkey | `o[k]`, `const k = "c"` | clone (const-string local = static) | 6 | 8 | **0.75** | BEATS node | -| w12_arb_dynkey | rotating keys from array | *(pre-IC baseline)* generic → dyn-key IC → key-table clone lane | 84 → 3 | 18 | 4.7 → **0.17** | BEATS node 6× — the 3-way dynamic-key IC covers scattered writes; a loop-invariant key array upgrades to the clone via the resolved slot table (integer-domain index, no fmod) | -| w13_int_key | `o[7]` on plain object | *(pre-spill-lanes baseline)* generic → peel + whole-loop clone with spill lanes | 160 → 7 | 13 | 12.3 → **0.54** | BEATS node — integer static keys (#6841), first-iteration peel (#6841), object-owned spill (#6849), and guard/emitter spill lanes make the append-past-capacity array clone-eligible | -| w15_append_build | fresh `{}` + 6 assigns (builder) | *(pre-#6829 baseline)* generic transitions; `class_id==0` blocks PIC | 1489 → 196 (#6829) | 8 | 186 → 25 | #6829 folds builders into literals; residual tracked below | -| w16_overflow_slot | writes past inline capacity | *(pre-#6812-w16 baseline)* runtime (PIC bounds reject) → whole-loop clone | 4163 → 3 | 29 | 173 → **0.26** | BEATS node — `{}` per-site classes + learned width + compile-time width hint make builder arrays uniform and clone-eligible. The #6812-w13 peel adds one ordinary outer round (3 → 6 ms; reclaimable with a guard-first second-chance design). Ratios vs each run's own node baseline (2026-07-25 sweeps) | -| w17_alloc_rhs | allocating RHS (`"s"+i`) | NOT PIC (safepoint-free rule) | 26 | 18 | 1.4 | close; revisit only with receiver-reload design | -| w18_class_inst | class instances via `any` | PIC | 6 | 12 | **0.50** | BEATS node (best row) | - -### Reading of the triage pass - -- **Beating node (15 of 18 rows as of the key-table lane):** everything the whole-loop - clone covers — `Mul` RHS, dynamic bounds, `while` form, `let` aliases, - builder-pattern arrays, inlined-helper bodies, peeled first-write - appends, spill lanes (append past capacity), multi-group parallel-array - bodies, and inlined RHS calls — plus class instances through the PIC. - The #6811/#6823 architecture wins when it applies. -- **Two catastrophic rows (~180×), both ubiquitous in real code:** - the builder pattern (fresh `{}` + property assigns — every API response, - parser, ORM row) and wide-object overflow-slot writes. These dominate the - broad-impact ranking by an order of magnitude. -- **A coherent 5–9× family** (w3–w8): each is one narrow eligibility rule of - the clone matcher; per-write PIC at ~10 ns/write is the shared floor. The - fix is widening clone eligibility, not touching the PIC. -- **Eight-shape polymorphism (w10) now settles without duplicating four more - generated guard sequences.** Shape 9+ remains on the bounded semantic - fallback. Allocating-RHS (w17) remains near-node and is deprioritized. - -Not modeled as micros (justified fallbacks unless measurement says otherwise): -symbol keys (separate table semantics), frozen/sealed/descriptor receivers -(semantic guards must fire), proxies/exotics (trap semantics), typed-layout -locked objects (raw-f64 invariants). - -## Broad-workload guard rails - -Every optimization slice must hold or improve: `babel_init` whole-process, -`benchmarks/app-patterns`, `honest_bench` — no benchmark-shaped regressions -hiding behind micro wins. diff --git a/docs/perry-complex-test-findings.md b/docs/perry-complex-test-findings.md deleted file mode 100644 index c9e6a22ff43..00000000000 --- a/docs/perry-complex-test-findings.md +++ /dev/null @@ -1,87 +0,0 @@ -# Perry Complex TypeScript Stress Test Findings - -> **Historical test snapshot (2026-02-16).** The five `test_complex_*` files -> named below have since been removed or replaced and these pass/fail counts -> must not be used as current compatibility evidence. Current behavioral -> coverage lives in the registered gap/parity suites and -> [`src/testing/test-registration.md`](src/testing/test-registration.md). - -Date: February 16, 2026 - -## Summary -A new stress suite was added to exercise broad TypeScript/JavaScript semantics in Perry. -When run locally, Node passes all tests, while Perry shows both runtime crashes and semantic mismatches. - -## Test Files -- `test-files/test_complex_vars.ts` -- `test-files/test_complex_functions_closures.ts` -- `test-files/test_complex_classes_objects.ts` -- `test-files/test_complex_runtime_probes.ts` -- `test-files/test_complex_perry_showcase.ts` - -## Reproduction -### Perry -```bash -target/debug/perry compile test-files/test_complex_vars.ts -o /tmp/test_complex_vars && /tmp/test_complex_vars -target/debug/perry compile test-files/test_complex_functions_closures.ts -o /tmp/test_complex_functions_closures && /tmp/test_complex_functions_closures -target/debug/perry compile test-files/test_complex_classes_objects.ts -o /tmp/test_complex_classes_objects && /tmp/test_complex_classes_objects -target/debug/perry compile test-files/test_complex_runtime_probes.ts -o /tmp/test_complex_runtime_probes && /tmp/test_complex_runtime_probes -target/debug/perry compile test-files/test_complex_perry_showcase.ts -o /tmp/test_complex_perry_showcase && /tmp/test_complex_perry_showcase -``` - -### Node baseline -```bash -node --experimental-transform-types test-files/test_complex_vars.ts -node --experimental-transform-types test-files/test_complex_functions_closures.ts -node --experimental-transform-types test-files/test_complex_classes_objects.ts -node --experimental-transform-types test-files/test_complex_runtime_probes.ts -node --experimental-transform-types test-files/test_complex_perry_showcase.ts -``` - -## Results Comparison -| File | Perry Build | Perry Run | Perry Outcome | Node Outcome | -|---|---:|---:|---|---| -| `test_complex_vars.ts` | 0 | 0 | `SUMMARY failures=0` | `SUMMARY failures=0` | -| `test_complex_functions_closures.ts` | 0 | 132 | Runtime crash (no summary) after initial passes | `SUMMARY failures=0` | -| `test_complex_classes_objects.ts` | 0 | 0 | `SUMMARY failures=8` | `SUMMARY failures=0` | -| `test_complex_runtime_probes.ts` | 0 | 0 | `SUMMARY failures=2` | `SUMMARY failures=0` | -| `test_complex_perry_showcase.ts` | 0 | 139 | Runtime crash (no summary) | `SUMMARY failures=0 checks=51` | - -## Failing Checks (Perry) -### `test_complex_classes_objects.ts` (8 failures) -- `inheritance override` -- `instance method this` -- `static field` -- `method with receiver` -- `object rest count` -- `destructure rest len` -- `destructure dropped key` -- `union circle` - -### `test_complex_runtime_probes.ts` (2 failures) -- `dynamic key count` -- `delete removes key` - -### Crash Signals -- `test_complex_functions_closures.ts`: exit code `132` (illegal instruction) -- `test_complex_perry_showcase.ts`: exit code `139` (segmentation fault) - -## Impact -These failures indicate that core runtime semantics are inconsistent with JavaScript in several critical areas: -- Class/inheritance and method dispatch -- `this` binding behavior -- Object rest/destructuring handling -- Union/math behavior consistency -- Dynamic property table growth and key tracking -- `delete` operator semantics on objects -- Runtime stability under broader feature combinations - -## Recommended Priority -1. Stabilize runtime crashes (`132`, `139`) first. -2. Fix class and `this` semantics (high user-visible correctness impact). -3. Fix dynamic object key tracking and `delete` semantics. -4. Re-run this suite in CI as a regression gate. - -## Notes -- `test_complex_perry_showcase.ts` intentionally combines many features and acts as an integration stress test. -- Focused files isolate specific semantic domains for faster debugging. diff --git a/docs/po/de.po b/docs/po/de.po index 146a2d4462a..9a1822992c9 100644 --- a/docs/po/de.po +++ b/docs/po/de.po @@ -166,7 +166,7 @@ msgid "Events" msgstr "Ereignisse" #: src/SUMMARY.md:51 src/ui/canvas.md:1 src/platforms/macos.md:37 -#: src/platforms/android.md:38 src/platforms/windows.md:62 +#: src/platforms/android.md:43 src/platforms/windows.md:62 #: src/platforms/linux.md:52 msgid "Canvas" msgstr "Canvas" @@ -222,11 +222,11 @@ msgstr "Hooks" #: src/SUMMARY.md:68 src/threading/parallel-map.md:157 #: src/threading/parallel-filter.md:78 src/threading/spawn.md:191 -#: src/tui/examples.md:1 src/cli/flags.md:504 +#: src/tui/examples.md:1 src/cli/flags.md:508 msgid "Examples" msgstr "Beispiele" -#: src/SUMMARY.md:70 src/system/overview.md:21 +#: src/SUMMARY.md:70 src/system/overview.md:21 src/cli/function-order.md:52 msgid "Platforms" msgstr "Plattformen" @@ -392,7 +392,7 @@ msgstr "HTTP & Netzwerk" msgid "Databases" msgstr "Datenbanken" -#: src/SUMMARY.md:94 src/stdlib/overview.md:42 src/stdlib/crypto.md:1 +#: src/SUMMARY.md:94 src/stdlib/overview.md:41 src/stdlib/crypto.md:1 msgid "Cryptography" msgstr "Kryptografie" @@ -401,7 +401,7 @@ msgstr "Kryptografie" msgid "Containers" msgstr "Container" -#: src/SUMMARY.md:96 src/stdlib/overview.md:49 src/stdlib/utilities.md:1 +#: src/SUMMARY.md:96 src/stdlib/overview.md:48 src/stdlib/utilities.md:1 #: src/cli/perry-toml.md:238 msgid "Utilities" msgstr "Hilfsprogramme" @@ -500,7 +500,7 @@ msgstr "Standortbestimmung & Bildauswahl" msgid "Background Tasks" msgstr "Hintergrundaufgaben" -#: src/SUMMARY.md:133 src/ui/menus.md:68 src/stdlib/overview.md:56 +#: src/SUMMARY.md:133 src/ui/menus.md:68 src/stdlib/overview.md:55 msgid "Other" msgstr "Weitere" @@ -582,155 +582,190 @@ msgid "CI Tiers (PR gate / sweep / full)" msgstr "CI-Stufen (PR-Prüfung / Testlauf / vollständige Suite)" #: src/SUMMARY.md:161 -msgid "Claude Code Bundle Parity" +msgid "Perry CLI Performance Reports (tak)" msgstr "" #: src/SUMMARY.md:162 +msgid "Claude Code Bundle Parity" +msgstr "" + +#: src/SUMMARY.md:163 msgid "CI Gate Scheduling" msgstr "Planung der CI-Prüfungen" -#: src/SUMMARY.md:163 +#: src/SUMMARY.md:164 msgid "Linux Incident Capture" msgstr "" -#: src/SUMMARY.md:165 +#: src/SUMMARY.md:166 msgid "CLI Reference" msgstr "CLI-Referenz" -#: src/SUMMARY.md:167 +#: src/SUMMARY.md:168 msgid "Commands" msgstr "Befehle" -#: src/SUMMARY.md:168 src/cli/flags.md:1 +#: src/SUMMARY.md:169 src/cli/flags.md:1 msgid "Compiler Flags" msgstr "Compiler-Flags" -#: src/SUMMARY.md:169 +#: src/SUMMARY.md:170 +#, fuzzy +msgid "Source-level Debugging" +msgstr "Pin auf Prozessebene" + +#: src/SUMMARY.md:171 msgid "Cache Directory" msgstr "Cache-Verzeichnis" -#: src/SUMMARY.md:170 +#: src/SUMMARY.md:172 msgid "Fast-math (`--fast-math`)" msgstr "Fast-math (`--fast-math`)" -#: src/SUMMARY.md:171 +#: src/SUMMARY.md:173 +msgid "Function Order (`--function-order`)" +msgstr "" + +#: src/SUMMARY.md:174 msgid "Dynamic Stdlib Dispatch" msgstr "Dynamischer Stdlib-Dispatch" -#: src/SUMMARY.md:172 +#: src/SUMMARY.md:175 msgid "JS Runtime Opt-In" msgstr "JS-Runtime Opt-In" -#: src/SUMMARY.md:173 src/cli/sandbox-buildrs.md:1 +#: src/SUMMARY.md:176 src/cli/sandbox-buildrs.md:1 msgid "`PERRY_SANDBOX_BUILDRS`" msgstr "`PERRY_SANDBOX_BUILDRS`" -#: src/SUMMARY.md:174 src/cli/emit-attest.md:1 +#: src/SUMMARY.md:177 src/cli/emit-attest.md:1 msgid "`--emit-attest` (binary attestation sidecar)" msgstr "`--emit-attest` (binärer Attestierungsanhang)" -#: src/SUMMARY.md:175 src/cli/flags.md:426 +#: src/SUMMARY.md:178 src/cli/flags.md:428 msgid "`--emit-sandbox`" msgstr "`--emit-sandbox`" -#: src/SUMMARY.md:176 src/cli/flags.md:427 +#: src/SUMMARY.md:179 src/cli/flags.md:429 msgid "`--lockdown`" msgstr "`--lockdown`" -#: src/SUMMARY.md:177 +#: src/SUMMARY.md:180 msgid "Egress Allowlist (`allowedHosts`)" msgstr "Ausgangs-Allowlist (`allowedHosts`)" -#: src/SUMMARY.md:178 src/cli/capabilities.md:1 +#: src/SUMMARY.md:181 src/cli/capabilities.md:1 msgid "Per-Package Capabilities (`perry.permissions`)" msgstr "Paketspezifische Berechtigungen (`perry.permissions`)" -#: src/SUMMARY.md:179 +#: src/SUMMARY.md:182 msgid "`perry audit --sbom`" msgstr "`perry audit --sbom`" -#: src/SUMMARY.md:180 +#: src/SUMMARY.md:183 msgid "Host Allowlist (nativeLibrary, compilePackages)" msgstr "Host-Allowlist (nativeLibrary, compilePackages)" -#: src/SUMMARY.md:181 src/cli/perry-toml.md:1 +#: src/SUMMARY.md:184 src/cli/perry-toml.md:1 msgid "perry.toml Reference" msgstr "perry.toml-Referenz" -#: src/SUMMARY.md:182 src/cli/updates.md:1 +#: src/SUMMARY.md:185 src/cli/updates.md:1 msgid "Updates" msgstr "Updates" -#: src/SUMMARY.md:183 +#: src/SUMMARY.md:186 msgid "Update Checks in Your Apps" msgstr "Update-Prüfungen in Ihren Apps" -#: src/SUMMARY.md:184 src/cli/telemetry.md:1 +#: src/SUMMARY.md:187 src/cli/telemetry.md:1 msgid "Privacy & Telemetry" msgstr "Datenschutz & Telemetrie" -#: src/SUMMARY.md:188 +#: src/SUMMARY.md:191 msgid "Internals" msgstr "Interna" -#: src/SUMMARY.md:190 src/internals/memory-model.md:1 +#: src/SUMMARY.md:193 src/internals/memory-model.md:1 msgid "Memory Model" msgstr "Speichermodell" -#: src/SUMMARY.md:191 src/internals/regexp-program-cache.md:1 +#: src/SUMMARY.md:194 src/internals/retained-function-source.md:1 +msgid "Retained function source" +msgstr "" + +#: src/SUMMARY.md:195 src/internals/regexp-program-cache.md:1 msgid "RegExp program ownership and caching" msgstr "" -#: src/SUMMARY.md:192 +#: src/SUMMARY.md:196 src/internals/weakmap-owned-index-design.md:1 +msgid "WeakMap lookup and owned identity storage" +msgstr "" + +#: src/SUMMARY.md:197 +#, fuzzy +msgid "Implementation validation" +msgstr "Durchführungsstatus" + +#: src/SUMMARY.md:198 msgid "Garbage Collector" msgstr "Garbage Collector" -#: src/SUMMARY.md:193 src/internals/explicit-memory.md:1 +#: src/SUMMARY.md:199 src/internals/explicit-memory.md:1 msgid "Explicit Memory Control" msgstr "Explizite Speicherverwaltung" -#: src/SUMMARY.md:194 src/internals/gc-rooting-invariant.md:1 +#: src/SUMMARY.md:200 src/internals/gc-rooting-invariant.md:1 msgid "The GC rooting invariant (codegen)" msgstr "Die GC-Rooting-Invariante (Codegenerierung)" -#: src/SUMMARY.md:195 src/internals/local-binding-type-evidence.md:1 +#: src/SUMMARY.md:201 src/internals/local-binding-type-evidence.md:1 msgid "Local binding type evidence" msgstr "Typnachweise für lokale Bindungen" -#: src/SUMMARY.md:196 src/internals/codegen-mechanisms.md:1 +#: src/SUMMARY.md:202 src/internals/codegen-mechanisms.md:1 msgid "Codegen mechanisms and workload evidence" msgstr "" -#: src/SUMMARY.md:197 +#: src/SUMMARY.md:203 msgid "Incremental GC step bounds" msgstr "Grenzen inkrementeller GC-Schritte" -#: src/SUMMARY.md:198 src/internals/rfc-rooting-by-construction.md:1 +#: src/SUMMARY.md:204 src/internals/rfc-rooting-by-construction.md:1 msgid "RFC: rooting by construction" msgstr "RFC: Rooting durch Konstruktion" -#: src/SUMMARY.md:199 src/internals/node-api-host.md:1 +#: src/SUMMARY.md:205 src/internals/node-api-host.md:1 msgid "Node-API host design" msgstr "Node-API host design" -#: src/SUMMARY.md:201 +#: src/SUMMARY.md:206 src/internals/fallback-diagnostics.md:1 +#, fuzzy +msgid "Generic fallback diagnostics" +msgstr "Allgemeine Objektsemantik" + +#: src/SUMMARY.md:208 msgid "Contributing" msgstr "Mitwirken" -#: src/SUMMARY.md:203 src/platforms/watchos.md:25 src/platforms/harmonyos.md:5 +#: src/SUMMARY.md:210 src/platforms/watchos.md:25 src/platforms/harmonyos.md:5 #: src/testing/geisterhand.md:683 src/contributing/architecture.md:1 msgid "Architecture" msgstr "Architektur" -#: src/SUMMARY.md:204 src/contributing/crate-policy.md:1 +#: src/SUMMARY.md:211 src/contributing/crate-policy.md:1 msgid "Crate policy" msgstr "Crate-Richtlinie" -#: src/SUMMARY.md:205 src/contributing/building.md:1 +#: src/SUMMARY.md:212 src/contributing/building.md:1 msgid "Building from Source" msgstr "Aus dem Quellcode bauen" -#: src/SUMMARY.md:206 src/contributing/releasing.md:1 +#: src/SUMMARY.md:213 src/contributing/build-storage.md:1 +msgid "Linux agent build storage" +msgstr "" + +#: src/SUMMARY.md:214 src/contributing/releasing.md:1 msgid "Releasing Perry" msgstr "Perry veröffentlichen" @@ -997,21 +1032,21 @@ msgstr "" #: src/introduction.md:96 src/getting-started/hello-world.md:155 #: src/getting-started/first-app.md:184 -#: src/getting-started/project-config.md:325 +#: src/getting-started/project-config.md:327 #: src/language/supported-features.md:631 src/language/type-system.md:149 #: src/language/limitations.md:393 src/threading/overview.md:350 #: src/ui/overview.md:239 src/ui/widgets.md:706 src/ui/layout.md:393 #: src/ui/styling.md:387 src/ui/state.md:226 src/ui/events.md:167 #: src/ui/canvas.md:93 src/ui/menus.md:119 src/ui/tray.md:106 -#: src/ui/dialogs.md:166 src/ui/table.md:150 src/ui/animation.md:71 +#: src/ui/dialogs.md:166 src/ui/table.md:158 src/ui/animation.md:71 #: src/ui/multi-window.md:158 src/ui/theming.md:166 src/ui/camera.md:143 #: src/ui/webview.md:239 src/platforms/overview.md:80 src/platforms/macos.md:86 #: src/platforms/ios.md:207 src/platforms/tvos.md:180 -#: src/platforms/watchos.md:316 src/platforms/android.md:92 +#: src/platforms/watchos.md:316 src/platforms/android.md:97 #: src/platforms/wearos.md:208 src/platforms/windows.md:144 #: src/platforms/linux.md:84 src/platforms/web.md:21 src/platforms/wasm.md:191 -#: src/stdlib/overview.md:129 src/stdlib/fs.md:98 src/stdlib/http.md:408 -#: src/stdlib/database.md:107 src/stdlib/crypto.md:87 +#: src/stdlib/overview.md:128 src/stdlib/fs.md:98 src/stdlib/http.md:408 +#: src/stdlib/database.md:112 src/stdlib/crypto.md:87 #: src/stdlib/utilities.md:96 src/stdlib/other.md:333 src/i18n/overview.md:108 #: src/updater/overview.md:445 src/system/overview.md:77 #: src/system/preferences.md:44 src/system/keychain.md:35 @@ -1022,8 +1057,8 @@ msgstr "" #: src/plugins/overview.md:96 src/plugins/creating-plugins.md:162 #: src/plugins/hooks-and-events.md:144 src/plugins/native-extensions.md:324 #: src/plugins/appstore-review.md:199 src/cli/commands.md:437 -#: src/cli/flags.md:541 src/contributing/architecture.md:100 -#: src/contributing/building.md:179 +#: src/cli/flags.md:545 src/contributing/architecture.md:109 +#: src/contributing/building.md:201 msgid "Next Steps" msgstr "Nächste Schritte" @@ -1205,7 +1240,8 @@ msgstr "" #: src/system/background.md:78 src/system/other.md:18 src/system/other.md:35 #: src/widgets/data-fetching.md:142 src/widgets/platforms.md:14 #: src/plugins/native-extensions.md:298 src/testing/geisterhand.md:257 -#: src/cli/flags.md:96 src/contributing/releasing.md:149 +#: src/cli/flags.md:96 src/cli/function-order.md:54 +#: src/contributing/releasing.md:168 msgid "Platform" msgstr "Plattform" @@ -1824,7 +1860,10 @@ msgstr "" "```" #: src/getting-started/hello-world.md:98 -msgid "Perry compiles async/await to a native async runtime backed by Tokio." +#, fuzzy +msgid "" +"Perry compiles async/await to native code driven by its own event loop " +"(turnloop)." msgstr "" "Perry kompiliert async/await zu einer nativen Async-Laufzeitumgebung auf " "Basis von Tokio." @@ -1934,12 +1973,15 @@ msgstr "" "Abhängigkeiten." #: src/getting-started/hello-world.md:144 -#: src/getting-started/hello-world.md:146 src/stdlib/overview.md:74 -#: src/stdlib/overview.md:78 +#: src/getting-started/hello-world.md:146 src/stdlib/overview.md:73 +#: src/stdlib/overview.md:77 msgid "Binary Size" msgstr "Binärgröße" #: src/getting-started/hello-world.md:146 +#: src/internals/weakmap-owned-index-design.md:60 +#: src/internals/weakmap-owned-index-validation.md:71 +#: src/internals/weakmap-owned-index-validation.md:93 msgid "Program" msgstr "Programm" @@ -1947,7 +1989,7 @@ msgstr "Programm" msgid "Hello world" msgstr "Hello world" -#: src/getting-started/hello-world.md:148 src/stdlib/overview.md:80 +#: src/getting-started/hello-world.md:148 src/stdlib/overview.md:79 msgid "~300KB" msgstr "~300KB" @@ -1956,7 +1998,7 @@ msgid "CLI with fs/path" msgstr "CLI mit fs/path" #: src/getting-started/hello-world.md:149 -#: src/getting-started/hello-world.md:150 src/stdlib/overview.md:81 +#: src/getting-started/hello-world.md:150 src/stdlib/overview.md:80 msgid "~3MB" msgstr "~3MB" @@ -1968,7 +2010,7 @@ msgstr "UI-App" msgid "Full app with stdlib" msgstr "Vollständige App mit stdlib" -#: src/getting-started/hello-world.md:151 src/stdlib/overview.md:82 +#: src/getting-started/hello-world.md:151 src/stdlib/overview.md:81 msgid "~48MB" msgstr "~48MB" @@ -2425,8 +2467,8 @@ msgstr "" #: src/getting-started/project-config.md:26 #: src/native-libraries/overview.md:131 src/native-libraries/overview.md:136 -#: src/native-libraries/authoring-guide.md:119 -#: src/native-libraries/authoring-guide.md:128 +#: src/native-libraries/authoring-guide.md:121 +#: src/native-libraries/authoring-guide.md:130 #: src/native-libraries/manifest-v1.md:156 #: src/native-libraries/manifest-v1.md:159 #: src/native-libraries/manifest-v1.md:160 @@ -2437,7 +2479,7 @@ msgstr "" #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 src/plugins/native-extensions.md:58 #: src/plugins/native-extensions.md:64 src/plugins/appstore-review.md:190 -#: src/cli/app-updates.md:23 +#: src/cli/debugging.md:42 src/cli/app-updates.md:23 msgid "\"name\"" msgstr "Name" @@ -2446,7 +2488,7 @@ msgid "\"my-project\"" msgstr "\"Mein Projekt\"" #: src/getting-started/project-config.md:27 -#: src/native-libraries/authoring-guide.md:120 +#: src/native-libraries/authoring-guide.md:122 #: src/native-libraries/manifest-v1.md:385 #: src/native-libraries/manifest-v1.md:513 src/plugins/native-extensions.md:59 #: src/cli/emit-attest.md:61 src/cli/perry-audit-sbom.md:47 @@ -2455,7 +2497,7 @@ msgid "\"version\"" msgstr "\"Version\"" #: src/getting-started/project-config.md:27 -#: src/native-libraries/authoring-guide.md:120 +#: src/native-libraries/authoring-guide.md:122 #: src/plugins/native-extensions.md:59 msgid "\"0.1.0\"" msgstr "\"0.1.0\"" @@ -2465,7 +2507,7 @@ msgid "\"private\"" msgstr "\"privat\"" #: src/getting-started/project-config.md:29 -#: src/native-libraries/authoring-guide.md:121 +#: src/native-libraries/authoring-guide.md:123 #: src/plugins/native-extensions.md:60 msgid "\"main\"" msgstr "\"Hauptsache\"" @@ -2482,15 +2524,15 @@ msgstr "\"src/main.ts\"" #: src/getting-started/project-config.md:184 #: src/getting-started/project-config.md:197 #: src/getting-started/project-config.md:218 src/packages/porting.md:84 -#: src/native-libraries/authoring-guide.md:123 -#: src/native-libraries/authoring-guide.md:271 -#: src/native-libraries/authoring-guide.md:296 src/native-libraries/abi.md:49 +#: src/native-libraries/authoring-guide.md:125 +#: src/native-libraries/authoring-guide.md:273 +#: src/native-libraries/authoring-guide.md:298 src/native-libraries/abi.md:49 #: src/native-libraries/manifest-v1.md:31 #: src/native-libraries/manifest-v1.md:514 #: src/native-libraries/zero-config-and-faithfulness.md:25 #: src/platforms/ios.md:168 src/platforms/ios.md:181 -#: src/platforms/android.md:57 src/platforms/android.md:72 -#: src/stdlib/overview.md:113 src/stdlib/http.md:186 src/stdlib/http.md:349 +#: src/platforms/android.md:62 src/platforms/android.md:77 +#: src/stdlib/overview.md:112 src/stdlib/http.md:186 src/stdlib/http.md:349 #: src/plugins/native-extensions.md:61 src/plugins/appstore-review.md:187 #: src/cli/fast-math.md:34 src/cli/dynamic-dispatch.md:101 #: src/cli/dynamic-dispatch.md:117 src/cli/allow-js-runtime.md:44 @@ -2499,7 +2541,8 @@ msgstr "\"src/main.ts\"" #: src/cli/capabilities.md:28 src/cli/allow-perry-features.md:52 #: src/cli/allow-perry-features.md:69 src/cli/allow-perry-features.md:83 #: src/cli/app-updates.md:25 src/cli/app-updates.md:140 -#: src/cli/app-updates.md:151 src/internals/node-api-host.md:438 +#: src/cli/app-updates.md:151 src/internals/node-api-host.md:450 +#: src/internals/node-api-host.md:507 msgid "\"perry\"" msgstr "\"Perry\"" @@ -2508,7 +2551,7 @@ msgstr "\"Perry\"" #: src/getting-started/project-config.md:86 #: src/getting-started/project-config.md:87 src/packages/porting.md:85 #: src/native-libraries/zero-config-and-faithfulness.md:26 -#: src/stdlib/overview.md:114 src/stdlib/http.md:187 src/stdlib/http.md:350 +#: src/stdlib/overview.md:113 src/stdlib/http.md:187 src/stdlib/http.md:350 #: src/cli/allow-perry-features.md:53 src/cli/allow-perry-features.md:56 #: src/cli/allow-perry-features.md:71 src/cli/allow-perry-features.md:83 msgid "\"compilePackages\"" @@ -2554,11 +2597,11 @@ msgstr "" #: src/getting-started/project-config.md:53 msgid "" -"The existing `\"jsx\": \"solid\"` selects `perry-solid`; `\"jsx\": \"default" -"\"` disables automatic Solid detection. A host setting overrides per-file " -"detection. The equivalent TOML setting is `[perry]` with `jsx = { runtime = " -"\"@opentui/solid\" }`; TOML overrides the host's package setting. React/" -"Preact import sources keep their existing JSX behavior." +"The existing `\"jsx\": \"solid\"` selects `perry-solid`; `\"jsx\": " +"\"default\"` disables automatic Solid detection. A host setting overrides " +"per-file detection. The equivalent TOML setting is `[perry]` with `jsx = " +"{ runtime = \"@opentui/solid\" }`; TOML overrides the host's package " +"setting. React/Preact import sources keep their existing JSX behavior." msgstr "" #: src/getting-started/project-config.md:59 @@ -2584,13 +2627,13 @@ msgstr "" #: src/getting-started/project-config.md:71 #: src/getting-started/project-config.md:86 src/packages/porting.md:85 -#: src/stdlib/overview.md:114 +#: src/stdlib/overview.md:113 msgid "\"@noble/curves\"" msgstr "\"@noble/curves\"" #: src/getting-started/project-config.md:71 #: src/getting-started/project-config.md:86 src/packages/porting.md:85 -#: src/stdlib/overview.md:114 +#: src/stdlib/overview.md:113 msgid "\"@noble/hashes\"" msgstr "\"@noble/hashes\"" @@ -2600,8 +2643,8 @@ msgid "" "Compiling third-party TypeScript into your binary is a privileged operation, " "so every entry in `compilePackages` must _also_ be matched by an entry in " "`perry.allow.compilePackages` in the same `package.json` — otherwise the " -"build refuses. Patterns accept exact names, scope wildcards (`\"@scope/*" -"\"`), or the universal `\"*\"`:" +"build refuses. Patterns accept exact names, scope wildcards (`\"@scope/" +"*\"`), or the universal `\"*\"`:" msgstr "" "**Zwei-Tasten-Opt-In.** Die Auflistung eines Pakets ist nicht allein " "ausreichend. Das Kompilieren von TypeScript von Drittanbietern in Ihre " @@ -2965,8 +3008,8 @@ msgstr "**Minimal (beide Plattformen teilen denselben Splash):**" #: src/getting-started/project-config.md:185 #: src/getting-started/project-config.md:198 #: src/getting-started/project-config.md:219 src/platforms/ios.md:169 -#: src/platforms/ios.md:182 src/platforms/android.md:58 -#: src/platforms/android.md:73 +#: src/platforms/ios.md:182 src/platforms/android.md:63 +#: src/platforms/android.md:78 msgid "\"splash\"" msgstr "\"Splash\"" @@ -2974,13 +3017,13 @@ msgstr "\"Splash\"" #: src/getting-started/project-config.md:199 #: src/getting-started/project-config.md:202 #: src/getting-started/project-config.md:206 src/platforms/ios.md:170 -#: src/platforms/android.md:59 +#: src/platforms/android.md:64 msgid "\"image\"" msgstr "\"Bild\"" #: src/getting-started/project-config.md:186 #: src/getting-started/project-config.md:199 src/platforms/ios.md:170 -#: src/platforms/android.md:59 +#: src/platforms/android.md:64 msgid "\"logo/icon-256.png\"" msgstr "\"logo/icon-256.png\"" @@ -2988,13 +3031,13 @@ msgstr "\"logo/icon-256.png\"" #: src/getting-started/project-config.md:200 #: src/getting-started/project-config.md:203 #: src/getting-started/project-config.md:207 src/ui/theming.md:26 -#: src/platforms/ios.md:171 src/platforms/android.md:60 +#: src/platforms/ios.md:171 src/platforms/android.md:65 msgid "\"background\"" msgstr "\"Hintergrund\"" #: src/getting-started/project-config.md:187 #: src/getting-started/project-config.md:200 src/platforms/ios.md:171 -#: src/platforms/android.md:60 +#: src/platforms/android.md:65 msgid "\"#FFF5EE\"" msgstr "\"#FFF5EE\"" @@ -3004,7 +3047,7 @@ msgstr "**Plattformspezifische Überschreibungen:**" #: src/getting-started/project-config.md:201 #: src/getting-started/project-config.md:220 -#: src/native-libraries/authoring-guide.md:299 +#: src/native-libraries/authoring-guide.md:301 #: src/native-libraries/manifest-v1.md:434 src/platforms/ios.md:183 #: src/plugins/native-extensions.md:67 msgid "\"ios\"" @@ -3021,7 +3064,7 @@ msgid "\"#FFFFFF\"" msgstr "\"#FFFFFF\"" #: src/getting-started/project-config.md:205 -#: src/getting-started/project-config.md:223 src/platforms/android.md:74 +#: src/getting-started/project-config.md:223 src/platforms/android.md:79 #: src/plugins/native-extensions.md:72 msgid "\"android\"" msgstr "\"Android\"" @@ -3042,19 +3085,19 @@ msgstr "\"Storyboard\"" msgid "\"splash/LaunchScreen.storyboard\"" msgstr "\"splash/LaunchScreen.storyboard\"" -#: src/getting-started/project-config.md:224 src/platforms/android.md:75 +#: src/getting-started/project-config.md:224 src/platforms/android.md:80 msgid "\"layout\"" msgstr "\"Layout\"" -#: src/getting-started/project-config.md:224 src/platforms/android.md:75 +#: src/getting-started/project-config.md:224 src/platforms/android.md:80 msgid "\"splash/splash_background.xml\"" msgstr "\"splash/splash_background.xml\"" -#: src/getting-started/project-config.md:225 src/platforms/android.md:76 +#: src/getting-started/project-config.md:225 src/platforms/android.md:81 msgid "\"theme\"" msgstr "\"Thema\"" -#: src/getting-started/project-config.md:225 src/platforms/android.md:76 +#: src/getting-started/project-config.md:225 src/platforms/android.md:81 msgid "\"splash/themes.xml\"" msgstr "\"splash/themes.xml\"" @@ -3092,8 +3135,8 @@ msgstr "Feld" #: src/cli/commands.md:268 src/cli/commands.md:283 src/cli/commands.md:295 #: src/cli/flags.md:80 src/cli/flags.md:135 src/cli/flags.md:143 #: src/cli/flags.md:191 src/cli/flags.md:291 src/cli/flags.md:379 -#: src/cli/flags.md:397 src/cli/flags.md:410 src/cli/flags.md:417 -#: src/cli/flags.md:431 src/cli/perry-toml.md:117 src/cli/perry-toml.md:128 +#: src/cli/flags.md:399 src/cli/flags.md:412 src/cli/flags.md:419 +#: src/cli/flags.md:435 src/cli/perry-toml.md:117 src/cli/perry-toml.md:128 #: src/cli/perry-toml.md:156 src/cli/perry-toml.md:172 #: src/cli/perry-toml.md:182 src/cli/perry-toml.md:188 #: src/cli/perry-toml.md:198 src/cli/perry-toml.md:248 @@ -3223,10 +3266,15 @@ msgid "" "// requires: auto-optimize\n" "// run: false\n" "\n" -"// These four imports are Perry's most-used built-in stdlib shims:\n" -"// fastify (HTTP server), mysql2 (db), ioredis (Redis), bcrypt (password\n" -"// hashing). They're compiled to native code via Perry's per-package\n" -"// implementations — no `compilePackages` needed.\n" +"// Four common npm packages: fastify (HTTP server), mysql2 (db), ioredis\n" +"// (Redis), bcrypt (password hashing). With no `perry.compilePackages` " +"entry,\n" +"// Perry compiles each installed package's real source to native code " +"(bcrypt,\n" +"// a Node native addon, routes to Perry's perry-ext-bcrypt wrapper). They " +"must\n" +"// be installed: the doc-tests job runs `npm ci` at the repo root, whose\n" +"// devDependencies list them.\n" "//\n" "// `// run: false` because each one needs a live external service (DB,\n" "// Redis, network port) to actually do anything; the binary still has to\n" @@ -3275,7 +3323,7 @@ msgstr "" "console.log(typeof app, typeof db, typeof redis, hashed.length)\n" "```" -#: src/getting-started/project-config.md:283 +#: src/getting-started/project-config.md:285 msgid "" "These are compiled to native code using Perry's built-in implementations. " "See [Standard Library](../stdlib/overview.md) for the full list." @@ -3284,7 +3332,7 @@ msgstr "" "Implementierungen. Siehe [Standardbibliothek](../stdlib/overview.md) für die " "vollständige Liste." -#: src/getting-started/project-config.md:285 +#: src/getting-started/project-config.md:287 msgid "" "For packages not natively supported, use `compilePackages` for pure TS/JS " "packages, or the JavaScript runtime fallback for complex packages." @@ -3292,47 +3340,47 @@ msgstr "" "Für nicht nativ unterstützte Pakete verwenden Sie `compilePackages` für " "reine TS/JS-Pakete oder den JavaScript-Runtime-Fallback für komplexe Pakete." -#: src/getting-started/project-config.md:287 src/contributing/building.md:155 +#: src/getting-started/project-config.md:289 src/contributing/building.md:177 msgid "Project Structure" msgstr "Projektstruktur" -#: src/getting-started/project-config.md:289 +#: src/getting-started/project-config.md:291 msgid "Perry is flexible about project structure. Common patterns:" msgstr "Perry ist flexibel bei der Projektstruktur. Übliche Muster:" -#: src/getting-started/project-config.md:299 +#: src/getting-started/project-config.md:301 msgid "For UI apps:" msgstr "Für UI-Apps:" -#: src/getting-started/project-config.md:310 src/widgets/watchos.md:60 +#: src/getting-started/project-config.md:312 src/widgets/watchos.md:60 #: src/widgets/wearos.md:61 msgid "Compilation" msgstr "Kompilierung" -#: src/getting-started/project-config.md:313 +#: src/getting-started/project-config.md:315 #, fuzzy msgid "# Compile a file\n" msgstr "# Eine Datei kompilieren" -#: src/getting-started/project-config.md:315 +#: src/getting-started/project-config.md:317 #, fuzzy msgid "# Compile with a specific target\n" msgstr "# Kompilieren mit einem bestimmten Ziel" -#: src/getting-started/project-config.md:318 +#: src/getting-started/project-config.md:320 #, fuzzy msgid "# Debug: print intermediate representation\n" msgstr "# Debug: Zwischendarstellung drucken" -#: src/getting-started/project-config.md:323 +#: src/getting-started/project-config.md:325 msgid "See [CLI Commands](../cli/commands.md) for all options." msgstr "Siehe [CLI-Befehle](../cli/commands.md) für alle Optionen." -#: src/getting-started/project-config.md:327 +#: src/getting-started/project-config.md:329 msgid "[CLI Commands](../cli/commands.md) — All compiler commands and flags" msgstr "[CLI-Befehle](../cli/commands.md) — Alle Compiler-Befehle und Flags" -#: src/getting-started/project-config.md:328 +#: src/getting-started/project-config.md:330 msgid "" "[Supported Features](../language/supported-features.md) — What TypeScript " "features work" @@ -3340,7 +3388,7 @@ msgstr "" "[Unterstützte Funktionen](../language/supported-features.md) — Welche " "TypeScript-Funktionen funktionieren" -#: src/getting-started/project-config.md:329 +#: src/getting-started/project-config.md:331 msgid "[Standard Library](../stdlib/overview.md) — Supported npm packages" msgstr "[Standardbibliothek](../stdlib/overview.md) — Unterstützte npm-Pakete" @@ -3487,13 +3535,13 @@ msgstr "Lokale Benachrichtigung" #: src/platforms/windows-7.md:25 src/container/overview.md:71 #: src/container/security.md:105 src/container/determinism.md:59 #: src/testing/geisterhand.md:87 src/testing/geisterhand.md:101 -#: src/cli/flags.md:558 src/cli/flags.md:664 src/cli/flags.md:665 +#: src/cli/flags.md:562 src/cli/flags.md:668 src/cli/flags.md:669 #: src/cli/dynamic-dispatch.md:123 src/cli/allow-js-runtime.md:67 #: src/cli/sandbox-buildrs.md:25 src/cli/sandbox-buildrs.md:53 -#: src/cli/perry-toml.md:431 src/internals/gc-rooting-invariant.md:258 +#: src/cli/perry-toml.md:431 src/internals/gc-rooting-invariant.md:285 #: src/internals/codegen-mechanisms.md:56 #: src/internals/rfc-rooting-by-construction.md:354 -#: src/contributing/releasing.md:183 +#: src/contributing/releasing.md:202 msgid "1" msgstr "1" @@ -3614,8 +3662,8 @@ msgid "" " // Arrow functions\n" " const double = (x: number) => x * 2;\n" "\n" -" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} sum=" -"${sum(1, 2, 3)} double=${double(5)}`)\n" +" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} " +"sum=${sum(1, 2, 3)} double=${double(5)}`)\n" "}\n" "```" msgstr "" @@ -3638,23 +3686,23 @@ msgstr "" " // Arrow-Funktionen\n" " const double = (x: number) => x * 2;\n" "\n" -" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} sum=" -"${sum(1, 2, 3)} double=${double(5)}`)\n" +" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} " +"sum=${sum(1, 2, 3)} double=${double(5)}`)\n" "}\n" "```" #: src/language/supported-features.md:60 src/api/reference.md:223 #: src/api/reference.md:257 src/api/reference.md:291 src/api/reference.md:349 -#: src/api/reference.md:373 src/api/reference.md:460 src/api/reference.md:507 -#: src/api/reference.md:528 src/api/reference.md:553 src/api/reference.md:828 -#: src/api/reference.md:911 src/api/reference.md:959 src/api/reference.md:979 -#: src/api/reference.md:1088 src/api/reference.md:1166 -#: src/api/reference.md:1205 src/api/reference.md:1254 -#: src/api/reference.md:1282 src/api/reference.md:1443 -#: src/api/reference.md:1651 src/api/reference.md:1674 -#: src/api/reference.md:1728 src/api/reference.md:1759 -#: src/api/reference.md:1813 src/api/reference.md:1876 -#: src/api/reference.md:2008 src/api/reference.md:2150 +#: src/api/reference.md:373 src/api/reference.md:462 src/api/reference.md:509 +#: src/api/reference.md:530 src/api/reference.md:555 src/api/reference.md:830 +#: src/api/reference.md:913 src/api/reference.md:961 src/api/reference.md:981 +#: src/api/reference.md:1090 src/api/reference.md:1168 +#: src/api/reference.md:1207 src/api/reference.md:1256 +#: src/api/reference.md:1284 src/api/reference.md:1445 +#: src/api/reference.md:1653 src/api/reference.md:1676 +#: src/api/reference.md:1730 src/api/reference.md:1761 +#: src/api/reference.md:1815 src/api/reference.md:1859 +#: src/api/reference.md:1993 src/api/reference.md:2135 #: src/api/reference.md:2371 src/api/reference.md:2860 #: src/api/reference.md:2873 src/api/reference.md:2944 #: src/api/reference.md:3006 src/api/reference.md:3115 @@ -3876,11 +3924,11 @@ msgid "" " console.log(item);\n" " }\n" "\n" -" console.log(`arrays: len=${len} doubled=${doubled.length} filtered=" -"${filtered.length} sum=${sum} found=${found} idx=${idx} joined=${joined} " -"sliced=${sliced.length} sorted=${sorted.length} reversed=${reversed.length} " -"includes=${includes} every=${every} some=${some} flat=${flat.length} " -"concatted=${concatted.length} arr=${arr.length}`)\n" +" console.log(`arrays: len=${len} doubled=${doubled.length} " +"filtered=${filtered.length} sum=${sum} found=${found} idx=${idx} " +"joined=${joined} sliced=${sliced.length} sorted=${sorted.length} " +"reversed=${reversed.length} includes=${includes} every=${every} some=${some} " +"flat=${flat.length} concatted=${concatted.length} arr=${arr.length}`)\n" "}\n" "```" msgstr "" @@ -3922,11 +3970,11 @@ msgstr "" " console.log(item);\n" " }\n" "\n" -" console.log(`arrays: len=${len} doubled=${doubled.length} filtered=" -"${filtered.length} sum=${sum} found=${found} idx=${idx} joined=${joined} " -"sliced=${sliced.length} sorted=${sorted.length} reversed=${reversed.length} " -"includes=${includes} every=${every} some=${some} flat=${flat.length} " -"concatted=${concatted.length} arr=${arr.length}`)\n" +" console.log(`arrays: len=${len} doubled=${doubled.length} " +"filtered=${filtered.length} sum=${sum} found=${found} idx=${idx} " +"joined=${joined} sliced=${sliced.length} sorted=${sorted.length} " +"reversed=${reversed.length} includes=${includes} every=${every} some=${some} " +"flat=${flat.length} concatted=${concatted.length} arr=${arr.length}`)\n" "}\n" "```" @@ -4019,8 +4067,8 @@ msgid "" " }\n" "\n" " process(user)\n" -" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} name=" -"${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" +" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} " +"name=${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" "}\n" "```" msgstr "" @@ -4048,8 +4096,8 @@ msgstr "" " }\n" "\n" " process(user)\n" -" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} name=" -"${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" +" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} " +"name=${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" "}\n" "```" @@ -4069,8 +4117,8 @@ msgid "" "`;\n" " const expr = `Result: ${1 + 2}`;\n" "\n" -" console.log(`template-literals: greeting=${greeting} multiline_len=" -"${multiline.length} expr=${expr}`)\n" +" console.log(`template-literals: greeting=${greeting} " +"multiline_len=${multiline.length} expr=${expr}`)\n" "}\n" "```" msgstr "" @@ -4084,8 +4132,8 @@ msgstr "" "`;\n" " const expr = `Result: ${1 + 2}`;\n" "\n" -" console.log(`template-literals: greeting=${greeting} multiline_len=" -"${multiline.length} expr=${expr}`)\n" +" console.log(`template-literals: greeting=${greeting} " +"multiline_len=${multiline.length} expr=${expr}`)\n" "}\n" "```" @@ -4223,9 +4271,10 @@ msgstr "" "```" #: src/language/supported-features.md:319 +#, fuzzy msgid "" -"Perry compiles async functions to a state machine backed by Tokio's async " -"runtime." +"Perry compiles async functions to a state machine driven by its own event " +"loop (turnloop)." msgstr "" "Perry kompiliert async-Funktionen zu einer State Machine auf Basis der Async-" "Laufzeit von Tokio." @@ -5453,8 +5502,8 @@ msgstr "" #: src/language/native-values.md:90 msgid "" "```typescript,no-test\n" -"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/native" -"\";\n" +"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/" +"native\";\n" "\n" "const delta = i8(dynamicDelta);\n" "const offset16 = i16(dynamicOffset);\n" @@ -5468,8 +5517,8 @@ msgid "" "```" msgstr "" "```typescript,no-test\n" -"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/native" -"\";\n" +"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/" +"native\";\n" "\n" "const delta = i8(dynamicDelta);\n" "const offset16 = i16(dynamicOffset);\n" @@ -6082,8 +6131,8 @@ msgstr "Kein eval() oder dynamischer Code" msgid "" "Perry compiles to native code ahead of time. It cannot evaluate a code " "string that is only known at runtime. A _constant_ code string is the " -"exception — `eval(\"1 + 1\")` and `new Function(\"a\", \"b\", \"return a + b" -"\")` are compiled to real native functions (#1679). Only a body built from " +"exception — `eval(\"1 + 1\")` and `new Function(\"a\", \"b\", \"return a + " +"b\")` are compiled to real native functions (#1679). Only a body built from " "runtime data hits this limit:" msgstr "" "Perry kompiliert im Voraus zu nativem Code. Es kann keinen Code String " @@ -6366,10 +6415,10 @@ msgid "" "The same strict controls apply to runtime-computed dynamic `import()` " "(#5230). The broad `perry.strict = true` covers both eval and dynamic " "import. For a knob scoped to dynamic imports only, use `--strict-dynamic-" -"import` or `\"perry\": { \"dynamicImport\": \"error\" }` (accepts `\"defer" -"\"` (default) or `\"error\"`); the dedicated knob overrides the broad `perry." -"strict` for import sites. `PERRY_ALLOW_EVAL=1` is the shared AOT escape " -"hatch — it forces defer for both eval and dynamic import." +"import` or `\"perry\": { \"dynamicImport\": \"error\" }` (accepts " +"`\"defer\"` (default) or `\"error\"`); the dedicated knob overrides the " +"broad `perry.strict` for import sites. `PERRY_ALLOW_EVAL=1` is the shared " +"AOT escape hatch — it forces defer for both eval and dynamic import." msgstr "" "Die gleichen strengen Kontrollen gelten für die Laufzeit berechnet " "dynamische `import()` (#5230). Der breite `perry.strict = true` deckt sowohl " @@ -7104,16 +7153,16 @@ msgstr "" #: src/packages/porting.md:35 msgid "" -"Packages that ship `.node` files, `binding.gyp`, `prebuilds/`, or a `" -"\"gypfile\"` package marker are compiled against Node's native addon ABI. " +"Packages that ship `.node` files, `binding.gyp`, `prebuilds/`, or a " +"`\"gypfile\"` package marker are compiled against Node's native addon ABI. " "The JavaScript entry point is usually just loader glue around a shared " "library that expects Node-API/N-API, NAN, V8, libuv, or Node internals. " "Perry does not host that ABI as part of `compilePackages`. Common examples " "in this category include `node-pty`, `sharp`, `better-sqlite3`, and " "`sqlite3`." msgstr "" -"Pakete, die `.node`-Dateien, `binding.gyp`, `prebuilds/` oder einen `" -"\"gypfile\"`-Paketmarker versenden, werden mit dem nativen Addon ABI von " +"Pakete, die `.node`-Dateien, `binding.gyp`, `prebuilds/` oder einen " +"`\"gypfile\"`-Paketmarker versenden, werden mit dem nativen Addon ABI von " "Node kompiliert. Der JavaScript-Eingangspunkt ist normalerweise nur " "Laderkleber um eine gemeinsame Bibliothek herum, die Node-API/N-API, NAN, " "V8, libuv oder Node Internals erwartet. Perry hostet diese ABI nicht als " @@ -7859,7 +7908,7 @@ msgstr "" "auf, das die Staticlib exportiert, plus deren TypeScript-sichtbare Signatur:" #: src/native-libraries/overview.md:129 -#: src/native-libraries/authoring-guide.md:126 +#: src/native-libraries/authoring-guide.md:128 #: src/native-libraries/manifest-v1.md:517 src/plugins/native-extensions.md:63 #: src/plugins/appstore-review.md:189 msgid "\"functions\"" @@ -7870,7 +7919,7 @@ msgid "\"js_mysql2_create_connection\"" msgstr "\"js_mysql2_create_connection\"" #: src/native-libraries/overview.md:132 src/native-libraries/overview.md:137 -#: src/native-libraries/authoring-guide.md:129 +#: src/native-libraries/authoring-guide.md:131 #: src/native-libraries/manifest-v1.md:518 #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 src/plugins/native-extensions.md:64 @@ -7884,7 +7933,7 @@ msgid "\"jsvalue\"" msgstr "\"jsvalue\"" #: src/native-libraries/overview.md:133 src/native-libraries/overview.md:138 -#: src/native-libraries/authoring-guide.md:130 +#: src/native-libraries/authoring-guide.md:132 #: src/native-libraries/manifest-v1.md:518 #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 src/plugins/native-extensions.md:64 @@ -7906,7 +7955,7 @@ msgid "\"i64\"" msgstr "\"i64\"" #: src/native-libraries/overview.md:137 -#: src/native-libraries/authoring-guide.md:130 +#: src/native-libraries/authoring-guide.md:132 #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 msgid "\"string\"" @@ -7976,12 +8025,13 @@ msgid "5. Runtime" msgstr "5. Laufzeit" #: src/native-libraries/overview.md:172 +#, fuzzy msgid "" "User code runs. Calls into `js_mysql2_*` happen at native speed — function " "call overhead is one register-pass for the receiver handle plus one each per " "param. Promise resolution / closure invocation / async work bridge through " -"perry-ffi's surface (`JsPromise`, `JsClosure`, `spawn_blocking + tokio::" -"Handle::current().block_on`). The wrapper sees Perry's NaN-boxed JsValues " +"perry-ffi's surface (`JsPromise`, `JsClosure`, `spawn_blocking` / `pool::" +"submit`, `turnloop_net`). The wrapper sees Perry's NaN-boxed JsValues " "directly; user TypeScript sees a normal Promise / object / array." msgstr "" "User-Code läuft. Aufrufe in `js_mysql2_*` erfolgen mit nativer " @@ -8212,9 +8262,9 @@ msgstr "(c)" #: src/native-libraries/overview.md:253 #, fuzzy msgid "" -"Compatibility path: `import 'mysql2'` / `import 'mongodb'` route to in-tree " -"Rust wrappers. They remain available until the source-package migration " -"gates pass. `pg` has already migrated off this path — see the row below." +"Compatibility path: `import 'mysql2'` routes to an in-tree Rust wrapper. It " +"remains available until the source-package migration gates pass. `pg` and " +"`mongodb` have already migrated off this path — see the row below." msgstr "" "Kompatibilitätspfad: `import 'mysql2'` / `import 'pg'` / `import 'mongodb'` " "Route zu in-tree Rust Wrappern. Sie bleiben verfügbar, bis die " @@ -8282,17 +8332,17 @@ msgstr "**Wann welche zu wählen ist:**" #: src/native-libraries/overview.md:266 #, fuzzy msgid "" -"**Well-known native (`mysql2` / `mongodb`)** — current zero-install " -"compatibility path; its feature set tracks Perry's release cadence and it is " -"scheduled to yield to compiled package source. `pg` no longer has a native " -"binding: a plain `import ... from \"pg\"` compiles the real npm `pg` package " -"from source instead." +"**Well-known native (`mysql2`)** — current zero-install compatibility path; " +"its feature set tracks Perry's release cadence and it is scheduled to yield " +"to compiled package source. `pg` and `mongodb` no longer have a native " +"binding: a plain `import ... from \"pg\"` or `import { MongoClient } from " +"\"mongodb\"` compiles the real npm package from source instead." msgstr "" "**Bekannte Einheimische (`mysql2` / `pg` / `mongodb`)** — aktueller Null-" "Installations-Kompatibilitätspfad; seine Feature-Set-Tracks Perry-Release-" "Kadenz und es ist geplant, um kompilierte Paketquelle ergeben." -#: src/native-libraries/overview.md:271 +#: src/native-libraries/overview.md:272 msgid "" "**`@perryts/postgres` / `@perryts/mysql` / `@perryts/mongodb` / `@perryts/" "redis`** — you want to read / fork / patch the driver in plain TypeScript; " @@ -8304,7 +8354,7 @@ msgstr "" "patchen möchten; wenn derselbe Code auf Node.js oder Bun als Fallback laufen " "soll; oder wenn Sie ein Feature vor dem nächsten Perry-Release benötigen." -#: src/native-libraries/overview.md:275 +#: src/native-libraries/overview.md:276 msgid "" "**External native binding** — you're wrapping a Rust crate that doesn't have " "a JS-only equivalent (Tursodb's embedded SQLite- compatible engine, Iroh's " @@ -8314,23 +8364,23 @@ msgstr "" "reines JS-Äquivalent hat (Tursodbs eingebettete SQLite-kompatible Engine, " "Irohs QUIC-Transport)." -#: src/native-libraries/overview.md:279 +#: src/native-libraries/overview.md:280 msgid "Concrete how-tos" msgstr "Konkrete Anleitungen" -#: src/native-libraries/overview.md:281 +#: src/native-libraries/overview.md:282 msgid "If you want to …" msgstr "Wenn Sie … möchten" -#: src/native-libraries/overview.md:281 +#: src/native-libraries/overview.md:282 msgid "Read" msgstr "Lesen" -#: src/native-libraries/overview.md:283 +#: src/native-libraries/overview.md:284 msgid "**Use a currently bundled compatibility shim**" msgstr "**Verwenden Sie eine derzeit gebündelte Kompatibilität shim**" -#: src/native-libraries/overview.md:283 +#: src/native-libraries/overview.md:284 msgid "" "`import` it directly, or explicitly select the installed package in `perry." "compilePackages` to exercise the preferred source path." @@ -8338,11 +8388,11 @@ msgstr "" "`import` es direkt, oder explizit wählen Sie das installierte Paket in " "`perry.compilePackages` den bevorzugten Quellpfad auszuüben." -#: src/native-libraries/overview.md:284 +#: src/native-libraries/overview.md:285 msgid "**Use a third-party native binding**" msgstr "**Eine native Drittanbieter-Bindung verwenden**" -#: src/native-libraries/overview.md:284 +#: src/native-libraries/overview.md:285 msgid "" "`bun add `, then `import`. Perry's resolver finds it via " "`node_modules//package.json`." @@ -8350,19 +8400,19 @@ msgstr "" "`bun add `, dann `import`. Perrys Resolver findet es über " "`node_modules//package.json`." -#: src/native-libraries/overview.md:285 +#: src/native-libraries/overview.md:286 msgid "**Find which packages ship out-of-the-box**" msgstr "**Herausfinden, welche Pakete von Haus aus mitgeliefert werden**" -#: src/native-libraries/overview.md:285 src/cli/commands.md:416 +#: src/native-libraries/overview.md:286 src/cli/commands.md:416 msgid "`perry native list`" msgstr "`perry native list`" -#: src/native-libraries/overview.md:286 +#: src/native-libraries/overview.md:287 msgid "**Write your own native binding**" msgstr "**Schreiben Sie Ihre eigene native Bindung**" -#: src/native-libraries/overview.md:286 +#: src/native-libraries/overview.md:287 msgid "" "`perry native init my-bindings` scaffolds the Cargo crate + `package.json` + " "`release.yml` for prebuilds. Then read [`abi.md`](abi.md) for the perry-ffi " @@ -8373,12 +8423,12 @@ msgstr "" "für die perry-ffi-Oberfläche und [`manifest-v1.md`](manifest-v1.md) für das " "Manifest-Schema." -#: src/native-libraries/overview.md:287 +#: src/native-libraries/overview.md:288 msgid "**Verify your binding's manifest matches its `.a`**" msgstr "" "**Überprüfen Sie, dass das Manifest Ihrer Bindung zur `.a`-Datei passt**" -#: src/native-libraries/overview.md:287 +#: src/native-libraries/overview.md:288 msgid "" "`cd my-bindings && perry native validate` (runs `cargo build --release`, " "walks `nm -gP` over the staticlib, diffs against `functions[]`, reports " @@ -8388,11 +8438,11 @@ msgstr "" "aus, läuft `nm -gP` über die Staticlib, diffed gegen `functions[]`, meldet " "fehlende oder nicht deklarierte Symbole)." -#: src/native-libraries/overview.md:288 +#: src/native-libraries/overview.md:289 msgid "**Override a well-known binding**" msgstr "**Eine bekannte Bindung überschreiben**" -#: src/native-libraries/overview.md:288 +#: src/native-libraries/overview.md:289 msgid "" "Install your fork into `node_modules//` with a `perry.nativeLibrary` " "block. Resolution layer (a) wins over layer (c)." @@ -8400,11 +8450,11 @@ msgstr "" "Installieren Sie Ihren Fork in `node_modules//` mit einem `perry." "nativeLibrary`-Block. Auflösungsschicht (a) gewinnt über Schicht (c)." -#: src/native-libraries/overview.md:289 +#: src/native-libraries/overview.md:290 msgid "**See what stdlib APIs Perry implements**" msgstr "**Sehen, welche stdlib-APIs Perry implementiert**" -#: src/native-libraries/overview.md:289 +#: src/native-libraries/overview.md:290 msgid "" "Auto-generated from the manifest: [`docs/src/api/reference.md`](../api/" "reference.md). The `perry types` command writes a current snapshot to `." @@ -8414,20 +8464,20 @@ msgstr "" "reference.md). Der `perry types`-Befehl schreibt einen aktuellen Snapshot " "nach `.perry/types/stdlib/index.d.ts` für Editor-Hervorhebungen." -#: src/native-libraries/overview.md:291 +#: src/native-libraries/overview.md:292 msgid "Authoring a binding — the 60-second tour" msgstr "Eine Bindung erstellen — die 60-Sekunden-Tour" -#: src/native-libraries/overview.md:294 +#: src/native-libraries/overview.md:295 #, fuzzy msgid "# Scaffold\n" msgstr "# Scaffold" -#: src/native-libraries/overview.md:295 +#: src/native-libraries/overview.md:296 msgid "\"PDF rendering bindings\"" msgstr "\"PDF rendering bindings\"" -#: src/native-libraries/overview.md:321 +#: src/native-libraries/overview.md:322 msgid "" "A user can now `bun add my-pdf` and `import { renderPdf } from \"my-pdf\"` " "in their Perry program." @@ -8435,11 +8485,11 @@ msgstr "" "Ein Nutzer kann jetzt `bun add my-pdf` und `import { renderPdf } from \"my-" "pdf\"` in seinem Perry-Programm verwenden." -#: src/native-libraries/overview.md:324 +#: src/native-libraries/overview.md:325 msgid "Versioning policy" msgstr "Versionierungs-Richtlinie" -#: src/native-libraries/overview.md:326 +#: src/native-libraries/overview.md:327 msgid "" "**`perry-ffi`** semver: tracks Perry's minor today (`perry-ffi = \"0.5\"` " "for Perry `0.5.x`). Backwards-incompatible changes to anything documented in " @@ -8453,7 +8503,7 @@ msgstr "" "runtime`. Wrappers deklarieren ABI `0.5` und verwenden eine getestete Perry " "`0.5.x` Revision der Kiste; siehe [Verbrauch heute](#consumption-today-v05x)." -#: src/native-libraries/overview.md:331 +#: src/native-libraries/overview.md:332 msgid "" "**Manifest spec v1**: locked at `abiVersion: \"0.5\"`; missing field is " "warning-only in v0.5.x, hard error from v0.6.0. Schema changes bump the spec " @@ -8464,7 +8514,7 @@ msgstr "" "Änderungen erhöhen die Spezifikations-Version (`v2`) und werden mit einer " "neuen Manifest-Schema-Datei ausgeliefert." -#: src/native-libraries/overview.md:335 +#: src/native-libraries/overview.md:336 msgid "" "**Wrappers**: each ships independent semver; users `bun update` a binding " "without touching Perry." @@ -8472,11 +8522,11 @@ msgstr "" "**Wrapper**: Jeder hat unabhängiges Semver; Nutzer `bun update` eine " "Bindung, ohne Perry anzufassen." -#: src/native-libraries/overview.md:338 +#: src/native-libraries/overview.md:339 msgid "Consumption today (v0.5.x)" msgstr "Verwendung heute (v0.5.x)" -#: src/native-libraries/overview.md:340 +#: src/native-libraries/overview.md:341 msgid "" "`perry-ffi` owns its public ABI types, but it is not currently available " "from crates.io. Publishing it requires publishing the optional `perry-" @@ -8489,21 +8539,21 @@ msgstr "" "Externe Wrapper verwenden die Depository-Abhängigkeit, die `perry native " "init` emittiert:" -#: src/native-libraries/overview.md:345 src/native-libraries/abi.md:26 +#: src/native-libraries/overview.md:346 src/native-libraries/abi.md:26 msgid "" "```toml\n" "[dependencies]\n" -"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = \"main" -"\" }\n" +"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = " +"\"main\" }\n" "```" msgstr "" "```toml\n" "[dependencies]\n" -"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = \"main" -"\" }\n" +"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = " +"\"main\" }\n" "```" -#: src/native-libraries/overview.md:350 +#: src/native-libraries/overview.md:351 msgid "" "Pin a tested Perry tag or commit for a released wrapper rather than " "following `main` indefinitely. Leave the optional `runtime-link` feature off " @@ -8520,11 +8570,11 @@ msgstr "" "Schritt. Siehe [`abi.md`](abi.md#versioning-and-dependency-setup) für den " "genauen Vertrag." -#: src/native-libraries/overview.md:357 +#: src/native-libraries/overview.md:358 msgid "Limits" msgstr "Einschränkungen" -#: src/native-libraries/overview.md:359 +#: src/native-libraries/overview.md:360 msgid "" "Bindings are **build-time linked**. Perry doesn't `dlopen` plugins at " "runtime — the staticlib joins the link line, the binary stands on its own." @@ -8533,7 +8583,7 @@ msgstr "" "`dlopen` von Plugins — die Staticlib wird zur Link-Zeile hinzugefügt, das " "Binary steht für sich allein." -#: src/native-libraries/overview.md:362 +#: src/native-libraries/overview.md:363 msgid "" "Bindings can't bring their own JS runtime — they extend Perry's, not replace " "it. A binding that wants its own GC / event loop / threading is out of scope." @@ -8542,7 +8592,7 @@ msgstr "" "ersetzen sie nicht. Eine Bindung, die einen eigenen GC / Event-Loop / " "Threading möchte, liegt außerhalb des Scopes." -#: src/native-libraries/overview.md:365 +#: src/native-libraries/overview.md:366 msgid "" "Cross-target prebuilds are the binding author's responsibility. The " "scaffolded GitHub Actions workflow handles the common matrix (x86_64+aarch64 " @@ -8552,15 +8602,15 @@ msgstr "" "Gerüst-GitHub-Actions-Workflow behandelt die übliche Matrix (x86_64+aarch64 " "macOS/Linux + Windows); andere Targets benötigen manuelle Hinzufügungen." -#: src/native-libraries/overview.md:370 +#: src/native-libraries/overview.md:371 msgid "Next pages" msgstr "Nächste Seiten" -#: src/native-libraries/overview.md:372 +#: src/native-libraries/overview.md:373 msgid "[`abi.md`](abi.md) — the perry-ffi surface, reference grade." msgstr "[`abi.md`](abi.md) — die perry-ffi-Oberfläche, in Referenz-Qualität." -#: src/native-libraries/overview.md:373 +#: src/native-libraries/overview.md:374 msgid "" "[`manifest-v1.md`](manifest-v1.md) — the `perry.nativeLibrary` schema, every " "field documented." @@ -8568,7 +8618,7 @@ msgstr "" "[`manifest-v1.md`](manifest-v1.md) — das `perry.nativeLibrary`-Schema, jedes " "Feld dokumentiert." -#: src/native-libraries/overview.md:375 +#: src/native-libraries/overview.md:376 msgid "" "[API reference](../api/reference.md) — auto-generated list of every stdlib " "symbol Perry implements." @@ -8607,7 +8657,7 @@ msgstr "" "installierten Abhängigkeitsgraphen der Anwendung wie jedes andere npm-Paket." #: src/native-libraries/governance.md:14 src/ui/multi-window.md:133 -#: src/widgets/data-fetching.md:134 src/internals/node-api-host.md:54 +#: src/widgets/data-fetching.md:134 src/internals/node-api-host.md:58 msgid "Policy" msgstr "Richtlinie" @@ -8850,7 +8900,7 @@ msgstr "Gegenwärtiger Stand" msgid "`perry-ext-ads`" msgstr "`perry-ext-ads`" -#: src/native-libraries/governance.md:101 src/api/reference.md:2187 +#: src/native-libraries/governance.md:101 src/api/reference.md:2172 msgid "`perry/ads`" msgstr "`perry/ads`" @@ -8877,18 +8927,18 @@ msgstr "`argon2`" #: src/native-libraries/governance.md:102 #: src/native-libraries/governance.md:103 #: src/native-libraries/governance.md:104 +#: src/native-libraries/governance.md:110 +#: src/native-libraries/governance.md:111 #: src/native-libraries/governance.md:112 -#: src/native-libraries/governance.md:113 -#: src/native-libraries/governance.md:114 msgid "External integration" msgstr "Externe Integration" #: src/native-libraries/governance.md:102 #: src/native-libraries/governance.md:103 #: src/native-libraries/governance.md:104 +#: src/native-libraries/governance.md:110 +#: src/native-libraries/governance.md:111 #: src/native-libraries/governance.md:112 -#: src/native-libraries/governance.md:113 -#: src/native-libraries/governance.md:114 msgid "Move to an external native package" msgstr "Zu einem externen nativen Paket wechseln" @@ -8898,12 +8948,11 @@ msgstr "Zu einem externen nativen Paket wechseln" #: src/native-libraries/governance.md:105 #: src/native-libraries/governance.md:106 #: src/native-libraries/governance.md:109 +#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:111 #: src/native-libraries/governance.md:112 #: src/native-libraries/governance.md:113 #: src/native-libraries/governance.md:114 -#: src/native-libraries/governance.md:116 -#: src/native-libraries/governance.md:117 msgid "Bundled; migration pending" msgstr "Gebündelt; Migration anhängig" @@ -8927,25 +8976,23 @@ msgstr "`better-sqlite3`" msgid "`perry-ext-cheerio`" msgstr "`perry-ext-cheerio`" -#: src/native-libraries/governance.md:105 src/api/reference.md:487 +#: src/native-libraries/governance.md:105 src/api/reference.md:489 msgid "`cheerio`" msgstr "`cheerio`" #: src/native-libraries/governance.md:105 #: src/native-libraries/governance.md:106 #: src/native-libraries/governance.md:109 -#: src/native-libraries/governance.md:111 -#: src/native-libraries/governance.md:116 -#: src/native-libraries/governance.md:117 +#: src/native-libraries/governance.md:113 +#: src/native-libraries/governance.md:114 msgid "Source package" msgstr "Quellpaket" #: src/native-libraries/governance.md:105 #: src/native-libraries/governance.md:106 #: src/native-libraries/governance.md:109 -#: src/native-libraries/governance.md:111 -#: src/native-libraries/governance.md:116 -#: src/native-libraries/governance.md:117 +#: src/native-libraries/governance.md:113 +#: src/native-libraries/governance.md:114 msgid "Compile the upstream package source" msgstr "Kompilieren der vorgelagerten Paketquelle" @@ -8953,82 +9000,60 @@ msgstr "Kompilieren der vorgelagerten Paketquelle" msgid "`perry-ext-ethers`" msgstr "`perry-ext-ethers`" -#: src/native-libraries/governance.md:106 src/api/reference.md:1192 +#: src/native-libraries/governance.md:106 src/api/reference.md:1194 msgid "`ethers`" msgstr "`ethers`" #: src/native-libraries/governance.md:107 -msgid "`perry-ext-events`" -msgstr "`perry-ext-events`" +msgid "`perry-ext-http`" +msgstr "`perry-ext-http`" -#: src/native-libraries/governance.md:107 src/api/reference.md:1203 -msgid "`events`" -msgstr "`events`" +#: src/native-libraries/governance.md:107 +msgid "`http`
`http2`
`https`" +msgstr "`http`
`http2`
`https`" #: src/native-libraries/governance.md:107 #: src/native-libraries/governance.md:108 -#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:115 -#: src/native-libraries/governance.md:118 -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "Runtime API" msgstr "Laufzeit-API" #: src/native-libraries/governance.md:107 #: src/native-libraries/governance.md:108 -#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:115 -#: src/native-libraries/governance.md:118 -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "Keep near core; consolidate when practical" msgstr "Bleiben Sie in der Nähe des Kerns; konsolidieren, wenn praktisch" #: src/native-libraries/governance.md:107 #: src/native-libraries/governance.md:108 -#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:115 -#: src/native-libraries/governance.md:118 -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "Bundled; retained" msgstr "zusammengeschlossen, behalten" #: src/native-libraries/governance.md:108 -msgid "`perry-ext-http`" -msgstr "`perry-ext-http`" - -#: src/native-libraries/governance.md:108 -msgid "`http`
`http2`
`https`" -msgstr "`http`
`http2`
`https`" - -#: src/native-libraries/governance.md:109 -msgid "`perry-ext-mongodb`" -msgstr "`perry-ext-mongodb`" - -#: src/native-libraries/governance.md:109 src/api/reference.md:1855 -msgid "`mongodb`" -msgstr "`mongodb`" - -#: src/native-libraries/governance.md:110 msgid "`perry-ext-net`" msgstr "`perry-ext-net`" -#: src/native-libraries/governance.md:110 src/api/reference.md:1874 +#: src/native-libraries/governance.md:108 src/api/reference.md:1857 msgid "`net`" msgstr "`net`" -#: src/native-libraries/governance.md:111 +#: src/native-libraries/governance.md:109 msgid "`perry-ext-nodemailer`" msgstr "`perry-ext-nodemailer`" -#: src/native-libraries/governance.md:111 src/api/reference.md:2030 +#: src/native-libraries/governance.md:109 src/api/reference.md:2015 msgid "`nodemailer`" msgstr "`nodemailer`" -#: src/native-libraries/governance.md:112 +#: src/native-libraries/governance.md:110 msgid "`perry-ext-parcel-watcher`" msgstr "`perry-ext-parcel-watcher`" -#: src/native-libraries/governance.md:112 +#: src/native-libraries/governance.md:110 msgid "" "`@parcel/watcher`
`@parcel/watcher-darwin-arm64`
`@parcel/watcher-" "darwin-x64`
`@parcel/watcher-linux-arm64-glibc`
`@parcel/watcher-linux-" @@ -9040,59 +9065,51 @@ msgstr "" "arm64-musl`
`@parcel/watcher-linux-x64-glibc`
`@parcel/watcher-linux-" "x64-musl`
`@parcel/watcher-win32-arm64`
`@parcel/watcher-win32-x64`" -#: src/native-libraries/governance.md:113 +#: src/native-libraries/governance.md:111 msgid "`perry-ext-pdf`" msgstr "`perry-ext-pdf`" -#: src/native-libraries/governance.md:113 src/api/reference.md:192 +#: src/native-libraries/governance.md:111 src/api/reference.md:192 msgid "`@perryts/pdf`" msgstr "`@perryts/pdf`" -#: src/native-libraries/governance.md:114 +#: src/native-libraries/governance.md:112 msgid "`perry-ext-sharp`" msgstr "`perry-ext-sharp`" -#: src/native-libraries/governance.md:114 src/api/reference.md:2914 +#: src/native-libraries/governance.md:112 src/api/reference.md:2914 msgid "`sharp`" msgstr "`sharp`" -#: src/native-libraries/governance.md:115 -msgid "`perry-ext-streams`" -msgstr "`perry-ext-streams`" - -#: src/native-libraries/governance.md:115 src/api/reference.md:3139 -msgid "`streams`" -msgstr "`streams`" - -#: src/native-libraries/governance.md:116 +#: src/native-libraries/governance.md:113 msgid "`perry-ext-typescript`" msgstr "`perry-ext-typescript`" -#: src/native-libraries/governance.md:116 src/api/reference.md:3363 +#: src/native-libraries/governance.md:113 src/api/reference.md:3363 msgid "`typescript`" msgstr "`typescript`" -#: src/native-libraries/governance.md:117 +#: src/native-libraries/governance.md:114 msgid "`perry-ext-undici`" msgstr "`perry-ext-undici`" -#: src/native-libraries/governance.md:117 src/api/reference.md:3376 +#: src/native-libraries/governance.md:114 src/api/reference.md:3376 msgid "`undici`" msgstr "`undici`" -#: src/native-libraries/governance.md:118 +#: src/native-libraries/governance.md:115 msgid "`perry-ext-ws`" msgstr "`perry-ext-ws`" -#: src/native-libraries/governance.md:118 src/api/reference.md:3681 +#: src/native-libraries/governance.md:115 src/api/reference.md:3681 msgid "`ws`" msgstr "`ws`" -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "`perry-ext-zlib`" msgstr "`perry-ext-zlib`" -#: src/native-libraries/governance.md:119 src/api/reference.md:3721 +#: src/native-libraries/governance.md:116 src/api/reference.md:3721 msgid "`zlib`" msgstr "`zlib`" @@ -9189,12 +9206,12 @@ msgid "" msgstr "" #: src/native-libraries/authoring-guide.md:65 -#: src/native-libraries/authoring-guide.md:360 -#: src/native-libraries/authoring-guide.md:396 -#: src/native-libraries/authoring-guide.md:401 -#: src/native-libraries/authoring-guide.md:436 -#: src/native-libraries/authoring-guide.md:445 src/native-libraries/abi.md:106 -#: src/native-libraries/abi.md:148 src/native-libraries/abi.md:157 +#: src/native-libraries/authoring-guide.md:369 +#: src/native-libraries/authoring-guide.md:415 +#: src/native-libraries/authoring-guide.md:420 +#: src/native-libraries/authoring-guide.md:455 +#: src/native-libraries/authoring-guide.md:464 src/native-libraries/abi.md:106 +#: src/native-libraries/abi.md:177 src/native-libraries/abi.md:186 #: src/plugins/native-extensions.md:183 src/plugins/native-extensions.md:191 #: src/plugins/native-extensions.md:283 msgid "\"C\"" @@ -9233,19 +9250,19 @@ msgstr "" #: src/native-libraries/authoring-guide.md:89 msgid "" -"**Async returns `*mut Promise`**. Pattern: `JsPromise::new()` → " -"`spawn_blocking(move || { tokio::runtime::Handle::current().block_on(async " -"{...}); promise.resolve(...) })` → return `promise.as_raw()`." +"**Async returns `*mut Promise`**. Pattern: `JsPromise::new()` → `perry_ffi::" +"pool::submit(work, deliver)` (bounded CPU work; `deliver` settles the " +"promise on the owning thread) or `spawn_blocking(move || { …; promise." +"resolve_with(...) })` → return `promise.as_raw()`. There is no tokio runtime " +"to `block_on`: Perry runs on turnloop, and socket I/O goes through " +"`perry_ffi::turnloop_net`." msgstr "" -"**Async gibt `*mut Promise` zurück**. Muster: `JsPromise::new()` → " -"`spawn_blocking(move || { tokio::runtime::Handle::current().block_on(async " -"{...}); promise.resolve(...) })` → `promise.as_raw()` zurückgeben." -#: src/native-libraries/authoring-guide.md:93 +#: src/native-libraries/authoring-guide.md:95 msgid "`src/index.ts`" msgstr "`src/index.ts`" -#: src/native-libraries/authoring-guide.md:95 +#: src/native-libraries/authoring-guide.md:97 msgid "" "Declare the FFI symbol from your manifest, then export the TypeScript " "surface user code imports. Perry's FFI dispatch keys on the call-site " @@ -9258,12 +9275,12 @@ msgstr "" "explizit das `js_*`-Symbol aufrufen, das in `perry.nativeLibrary." "functions[]` aufgeführt ist." -#: src/native-libraries/authoring-guide.md:111 src/cli/perry-toml.md:583 +#: src/native-libraries/authoring-guide.md:113 src/cli/perry-toml.md:583 #: src/cli/perry-toml.md:584 msgid "`package.json`" msgstr "`package.json`" -#: src/native-libraries/authoring-guide.md:113 +#: src/native-libraries/authoring-guide.md:115 msgid "" "The `perry.nativeLibrary` block tells Perry's compiler about every `extern " "\"C\"` export plus the build config. Schema details in [`manifest-v1.md`]" @@ -9273,23 +9290,23 @@ msgstr "" "Export plus die Build-Konfiguration mit. Schema-Details in [`manifest-v1.md`]" "(manifest-v1.md)." -#: src/native-libraries/authoring-guide.md:119 +#: src/native-libraries/authoring-guide.md:121 msgid "\"my-bindings\"" msgstr "\"meine Bindungen\"" -#: src/native-libraries/authoring-guide.md:121 -#: src/native-libraries/authoring-guide.md:122 +#: src/native-libraries/authoring-guide.md:123 +#: src/native-libraries/authoring-guide.md:124 #: src/plugins/native-extensions.md:60 msgid "\"src/index.ts\"" msgstr "\"src/index.ts\"" -#: src/native-libraries/authoring-guide.md:122 +#: src/native-libraries/authoring-guide.md:124 msgid "\"types\"" msgstr "\"Typen\"" -#: src/native-libraries/authoring-guide.md:124 -#: src/native-libraries/authoring-guide.md:272 -#: src/native-libraries/authoring-guide.md:297 src/native-libraries/abi.md:50 +#: src/native-libraries/authoring-guide.md:126 +#: src/native-libraries/authoring-guide.md:274 +#: src/native-libraries/authoring-guide.md:299 src/native-libraries/abi.md:50 #: src/native-libraries/manifest-v1.md:32 #: src/native-libraries/manifest-v1.md:515 src/plugins/native-extensions.md:62 #: src/plugins/appstore-review.md:188 src/cli/allow-perry-features.md:54 @@ -9297,24 +9314,24 @@ msgstr "\"Typen\"" msgid "\"nativeLibrary\"" msgstr "\"nativeLibrary\"" -#: src/native-libraries/authoring-guide.md:125 src/native-libraries/abi.md:51 +#: src/native-libraries/authoring-guide.md:127 src/native-libraries/abi.md:51 #: src/native-libraries/manifest-v1.md:33 #: src/native-libraries/manifest-v1.md:516 msgid "\"abiVersion\"" msgstr "\"abiVersion\"" -#: src/native-libraries/authoring-guide.md:125 src/native-libraries/abi.md:51 +#: src/native-libraries/authoring-guide.md:127 src/native-libraries/abi.md:51 #: src/native-libraries/manifest-v1.md:33 #: src/native-libraries/manifest-v1.md:516 msgid "\"0.5\"" msgstr "\"0.5\"" -#: src/native-libraries/authoring-guide.md:128 +#: src/native-libraries/authoring-guide.md:130 msgid "\"js_pdf_parse\"" msgstr "\"js_pdf_parse\"" -#: src/native-libraries/authoring-guide.md:129 -#: src/native-libraries/authoring-guide.md:164 +#: src/native-libraries/authoring-guide.md:131 +#: src/native-libraries/authoring-guide.md:166 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:144 #: src/native-libraries/manifest-v1.md:152 @@ -9322,34 +9339,34 @@ msgstr "\"js_pdf_parse\"" #: src/native-libraries/manifest-v1.md:155 #: src/native-libraries/manifest-v1.md:161 #: src/native-libraries/manifest-v1.md:192 -#: src/native-libraries/manifest-v1.md:386 src/cli/flags.md:592 +#: src/native-libraries/manifest-v1.md:386 src/cli/flags.md:596 msgid "\"kind\"" msgstr "\"gütig\"" -#: src/native-libraries/authoring-guide.md:129 +#: src/native-libraries/authoring-guide.md:131 #: src/native-libraries/manifest-v1.md:153 msgid "\"buffer+len\"" msgstr "\"Puffer+len\"" -#: src/native-libraries/authoring-guide.md:133 -#: src/native-libraries/authoring-guide.md:273 -#: src/native-libraries/authoring-guide.md:298 +#: src/native-libraries/authoring-guide.md:135 +#: src/native-libraries/authoring-guide.md:275 +#: src/native-libraries/authoring-guide.md:300 #: src/native-libraries/manifest-v1.md:374 #: src/native-libraries/manifest-v1.md:433 #: src/native-libraries/manifest-v1.md:522 src/plugins/native-extensions.md:66 msgid "\"targets\"" msgstr "\"Ziele\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:274 +#: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:276 #: src/native-libraries/manifest-v1.md:375 #: src/native-libraries/manifest-v1.md:523 src/plugins/native-extensions.md:77 msgid "\"macos\"" msgstr "\"Macos\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 #: src/native-libraries/manifest-v1.md:435 #: src/native-libraries/manifest-v1.md:523 #: src/native-libraries/manifest-v1.md:524 src/plugins/native-extensions.md:68 @@ -9357,15 +9374,15 @@ msgstr "\"Macos\"" msgid "\"crate\"" msgstr "\"Crate\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 msgid "\"native\"" msgstr "\"Einheimische\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 #: src/native-libraries/manifest-v1.md:436 #: src/native-libraries/manifest-v1.md:523 #: src/native-libraries/manifest-v1.md:524 src/plugins/native-extensions.md:69 @@ -9373,31 +9390,31 @@ msgstr "\"Einheimische\"" msgid "\"lib\"" msgstr "\"Lieb\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 msgid "\"perry_ext_my_bindings\"" msgstr "\"perry_ext_my_bindings\"" -#: src/native-libraries/authoring-guide.md:135 -#: src/native-libraries/authoring-guide.md:275 -#: src/native-libraries/authoring-guide.md:310 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:277 +#: src/native-libraries/authoring-guide.md:312 #: src/native-libraries/manifest-v1.md:524 msgid "\"linux\"" msgstr "\"Linux\"" -#: src/native-libraries/authoring-guide.md:136 -#: src/native-libraries/authoring-guide.md:276 -#: src/native-libraries/authoring-guide.md:319 +#: src/native-libraries/authoring-guide.md:138 +#: src/native-libraries/authoring-guide.md:278 +#: src/native-libraries/authoring-guide.md:321 #: src/native-libraries/manifest-v1.md:395 msgid "\"windows\"" msgstr "\"Fenster\"" -#: src/native-libraries/authoring-guide.md:143 +#: src/native-libraries/authoring-guide.md:145 msgid "Every entry in `functions[]` must:" msgstr "Jeder Eintrag in `functions[]` muss:" -#: src/native-libraries/authoring-guide.md:144 +#: src/native-libraries/authoring-guide.md:146 msgid "" "have a `name` matching exactly the symbol the staticlib exports (Perry's " "`perry native validate` verifies this for you)" @@ -9406,30 +9423,30 @@ msgstr "" "Staticlib exportiert (Perrys `perry native validate` verifiziert dies für " "Sie)" -#: src/native-libraries/authoring-guide.md:146 +#: src/native-libraries/authoring-guide.md:148 msgid "declare `params` and `returns` so codegen knows the calling convention" msgstr "" "`params` und `returns` deklarieren, damit Codegen die Aufrufkonvention kennt" -#: src/native-libraries/authoring-guide.md:148 +#: src/native-libraries/authoring-guide.md:150 msgid "" "Manifest descriptors are native ABI descriptors, not TypeScript surface " -"types. Existing strings such as `\"string\"`, `\"number\"`, `\"i64\"`, and `" -"\"void\"` still work. Use the explicit vocabulary when you need native " -"precision or metadata: `\"f32\"`, `\"u32\"`, `\"u64\"`, `\"usize\"`, `" -"\"buffer_len\"`, `{ \"kind\": \"buffer+len\" }`, `{ \"kind\": \"handle\", " -"\"type\": \"MyThing\" }`, and `{ \"kind\": \"promise\", \"result\": \"jsvalue" -"\" }`." +"types. Existing strings such as `\"string\"`, `\"number\"`, `\"i64\"`, and " +"`\"void\"` still work. Use the explicit vocabulary when you need native " +"precision or metadata: `\"f32\"`, `\"u32\"`, `\"u64\"`, `\"usize\"`, " +"`\"buffer_len\"`, `{ \"kind\": \"buffer+len\" }`, `{ \"kind\": \"handle\", " +"\"type\": \"MyThing\" }`, and `{ \"kind\": \"promise\", \"result\": " +"\"jsvalue\" }`." msgstr "" "Manifest-Deskriptoren sind native ABI-Deskriptoren, keine TypeScript-" -"Oberflächentypen. Vorhandene Zeichenketten wie `\"string\"`, `\"number\"`, `" -"\"i64\"` und `\"void\"` funktionieren weiterhin. Verwenden Sie das explizite " -"Vokabular, wenn Sie native Präzision oder Metadaten benötigen: `\"f32\"`, `" -"\"u32\"`, `\"u64\"`, `\"usize\"`, `\"buffer_len\"`, `{ \"kind\": \"buffer+len" -"\" }`, `{ \"kind\": \"handle\", \"type\": \"MyThing\" }` und `{ \"kind\": " -"\"promise\", \"result\": \"jsvalue\" }`." +"Oberflächentypen. Vorhandene Zeichenketten wie `\"string\"`, `\"number\"`, " +"`\"i64\"` und `\"void\"` funktionieren weiterhin. Verwenden Sie das " +"explizite Vokabular, wenn Sie native Präzision oder Metadaten benötigen: " +"`\"f32\"`, `\"u32\"`, `\"u64\"`, `\"usize\"`, `\"buffer_len\"`, `{ \"kind\": " +"\"buffer+len\" }`, `{ \"kind\": \"handle\", \"type\": \"MyThing\" }` und " +"`{ \"kind\": \"promise\", \"result\": \"jsvalue\" }`." -#: src/native-libraries/authoring-guide.md:156 +#: src/native-libraries/authoring-guide.md:158 msgid "" "Handles are opaque Perry native handle objects in JavaScript, not raw " "numbers. Legacy `\"handle\"` and `\"handle\"` descriptors still parse as " @@ -9442,7 +9459,7 @@ msgstr "" "können Eigentümerschaft, Nullbarkeit, Thread-Zugehörigkeit, Debug-Namen und " "einen Finalizer für eigene Rückgaben hinzufügen:" -#: src/native-libraries/authoring-guide.md:164 +#: src/native-libraries/authoring-guide.md:166 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:144 src/testing/geisterhand.md:68 #: src/testing/geisterhand.md:69 src/testing/geisterhand.md:70 @@ -9452,58 +9469,58 @@ msgstr "" msgid "\"handle\"" msgstr "\"Handgriff\"" -#: src/native-libraries/authoring-guide.md:165 +#: src/native-libraries/authoring-guide.md:167 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:145 #: src/native-libraries/manifest-v1.md:159 -#: src/native-libraries/manifest-v1.md:160 +#: src/native-libraries/manifest-v1.md:160 src/cli/debugging.md:40 msgid "\"type\"" msgstr "\"Typ\"" -#: src/native-libraries/authoring-guide.md:165 -#: src/native-libraries/authoring-guide.md:169 +#: src/native-libraries/authoring-guide.md:167 +#: src/native-libraries/authoring-guide.md:171 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:145 #: src/native-libraries/manifest-v1.md:150 msgid "\"MyThing\"" msgstr "\"MyThing\"" -#: src/native-libraries/authoring-guide.md:166 +#: src/native-libraries/authoring-guide.md:168 #: src/native-libraries/manifest-v1.md:146 msgid "\"ownership\"" msgstr "\"Eigentum\"" -#: src/native-libraries/authoring-guide.md:166 +#: src/native-libraries/authoring-guide.md:168 #: src/native-libraries/manifest-v1.md:146 msgid "\"owned\"" msgstr "\"Eigentum\"" -#: src/native-libraries/authoring-guide.md:167 +#: src/native-libraries/authoring-guide.md:169 #: src/native-libraries/manifest-v1.md:148 msgid "\"thread\"" msgstr "\"Gewinde\"" -#: src/native-libraries/authoring-guide.md:167 +#: src/native-libraries/authoring-guide.md:169 #: src/native-libraries/manifest-v1.md:148 msgid "\"creator\"" msgstr "\"Schöpfer\"" -#: src/native-libraries/authoring-guide.md:168 +#: src/native-libraries/authoring-guide.md:170 #: src/native-libraries/manifest-v1.md:149 msgid "\"finalizer\"" msgstr "\"Finalisator\"" -#: src/native-libraries/authoring-guide.md:168 +#: src/native-libraries/authoring-guide.md:170 #: src/native-libraries/manifest-v1.md:149 msgid "\"my_thing_free\"" msgstr "\"my_thing_free\"" -#: src/native-libraries/authoring-guide.md:169 +#: src/native-libraries/authoring-guide.md:171 #: src/native-libraries/manifest-v1.md:150 msgid "\"debugName\"" msgstr "\"debugName\"" -#: src/native-libraries/authoring-guide.md:173 +#: src/native-libraries/authoring-guide.md:175 msgid "" "The finalizer symbol must use `void(ptr, ptr)` ABI and must only free native " "resources. It can run from GC finalization, so it must not call Perry JS " @@ -9516,11 +9533,11 @@ msgstr "" "Verwenden Sie `\"ptr\"`, wenn eine API absichtlich einen rohen Zeiger-" "Payload anstelle eines verwalteten Handles akzeptiert." -#: src/native-libraries/authoring-guide.md:179 +#: src/native-libraries/authoring-guide.md:181 msgid "3. Verify" msgstr "3. Überprüfen" -#: src/native-libraries/authoring-guide.md:185 +#: src/native-libraries/authoring-guide.md:187 msgid "" "This runs `cargo build --release`, locates the resulting `.a`, walks `nm -" "gP` over its symbols, and diffs against the manifest's `functions[]`. The " @@ -9530,7 +9547,7 @@ msgstr "" "läuft `nm -gP` über ihre Symbole und diffed gegen `functions[]` des " "Manifests. Die Ausgabe markiert zwei Fehlermodi:" -#: src/native-libraries/authoring-guide.md:189 +#: src/native-libraries/authoring-guide.md:191 msgid "" "**❌ declared function has NO matching symbol** — your manifest lists a " "function the staticlib doesn't export. Either you typo'd the name, or you " @@ -9540,7 +9557,7 @@ msgstr "" "eine Funktion auf, die die Staticlib nicht exportiert. Entweder haben Sie " "sich beim Namen vertippt oder `#[no_mangle]` vergessen." -#: src/native-libraries/authoring-guide.md:192 +#: src/native-libraries/authoring-guide.md:194 msgid "" "**⚠ `js_*` symbol NOT in the manifest** — your staticlib exports a function " "user code can't reach. Either add it to `functions[]`, rename it (drop the " @@ -9551,28 +9568,28 @@ msgstr "" "`functions[]` hinzu, benennen Sie sie um (lassen Sie das `js_`-Präfix weg) " "oder entfernen Sie sie." -#: src/native-libraries/authoring-guide.md:196 +#: src/native-libraries/authoring-guide.md:198 msgid "A green run looks like:" msgstr "Ein erfolgreicher Lauf sieht so aus:" -#: src/native-libraries/authoring-guide.md:209 +#: src/native-libraries/authoring-guide.md:211 msgid "4. Test in a Perry program" msgstr "4. In einem Perry-Programm testen" -#: src/native-libraries/authoring-guide.md:211 +#: src/native-libraries/authoring-guide.md:213 msgid "In a separate directory:" msgstr "In einem separaten Verzeichnis:" -#: src/native-libraries/authoring-guide.md:216 +#: src/native-libraries/authoring-guide.md:218 #, fuzzy msgid "# or any path your tooling supports\n" msgstr "# oder jeden Pfad, den Ihr Tooling unterstützt" -#: src/native-libraries/authoring-guide.md:219 +#: src/native-libraries/authoring-guide.md:221 msgid "Add to your TS:" msgstr "Zu Ihrem TS hinzufügen:" -#: src/native-libraries/authoring-guide.md:221 +#: src/native-libraries/authoring-guide.md:223 msgid "" "```typescript\n" "import { parse } from \"my-bindings\";\n" @@ -9586,19 +9603,19 @@ msgstr "" "console.log(parse(buf));\n" "```" -#: src/native-libraries/authoring-guide.md:227 +#: src/native-libraries/authoring-guide.md:229 msgid "Then `perry compile main.ts -o main && ./main`." msgstr "Dann `perry compile main.ts -o main && ./main`." -#: src/native-libraries/authoring-guide.md:229 +#: src/native-libraries/authoring-guide.md:231 msgid "5. Publish" msgstr "5. Veröffentlichen" -#: src/native-libraries/authoring-guide.md:231 +#: src/native-libraries/authoring-guide.md:233 msgid "Tag a release" msgstr "Ein Release taggen" -#: src/native-libraries/authoring-guide.md:238 +#: src/native-libraries/authoring-guide.md:240 msgid "" "The scaffolded `.github/workflows/release.yml` builds prebuilt staticlibs " "for x86_64 + aarch64 macOS/Linux + Windows on tag and attaches them to the " @@ -9610,11 +9627,11 @@ msgstr "" "GitHub-Release an. Fügen Sie nach Bedarf Targets im `matrix`-Block des " "Workflows hinzu oder entfernen sie." -#: src/native-libraries/authoring-guide.md:243 +#: src/native-libraries/authoring-guide.md:245 msgid "npm publish" msgstr "npm publish" -#: src/native-libraries/authoring-guide.md:249 +#: src/native-libraries/authoring-guide.md:251 msgid "" "The scaffolded `package.json` includes the right `files: [...]` list to " "bundle `src/` + `Cargo.toml` + the README. If you also vendor the prebuilt " @@ -9625,37 +9642,37 @@ msgstr "" "Artefakte auch im npm-Tarball mitliefern, fügen Sie sie dem `files`-Block " "hinzu." -#: src/native-libraries/authoring-guide.md:253 +#: src/native-libraries/authoring-guide.md:255 msgid "Two distribution models" msgstr "Zwei Distributionsmodelle" -#: src/native-libraries/authoring-guide.md:255 +#: src/native-libraries/authoring-guide.md:257 msgid "There are two ways your users get the staticlib:" msgstr "Es gibt zwei Wege, wie Ihre Nutzer die staticlib bekommen:" -#: src/native-libraries/authoring-guide.md:257 +#: src/native-libraries/authoring-guide.md:259 msgid "Model" msgstr "Modell" -#: src/native-libraries/authoring-guide.md:257 +#: src/native-libraries/authoring-guide.md:259 msgid "What ships in the npm tarball" msgstr "Was im npm-Tarball mitgeliefert wird" -#: src/native-libraries/authoring-guide.md:257 +#: src/native-libraries/authoring-guide.md:259 msgid "Trade-off" msgstr "Trade-off" -#: src/native-libraries/authoring-guide.md:259 +#: src/native-libraries/authoring-guide.md:261 msgid "**Vendor prebuilts**" msgstr "**Vendor-Prebuilds**" -#: src/native-libraries/authoring-guide.md:259 +#: src/native-libraries/authoring-guide.md:261 msgid "" "`src/`, `Cargo.toml`, AND `prebuilt//lib.a` for every target" msgstr "" "`src/`, `Cargo.toml` UND `prebuilt//lib.a` für jedes Target" -#: src/native-libraries/authoring-guide.md:259 +#: src/native-libraries/authoring-guide.md:261 msgid "" "Bigger npm tarball; install is fast (no compile); user doesn't need a Rust " "toolchain" @@ -9663,15 +9680,15 @@ msgstr "" "Größerer npm-Tarball; Installation ist schnell (kein Kompilieren); Nutzer " "braucht keine Rust-Toolchain" -#: src/native-libraries/authoring-guide.md:260 +#: src/native-libraries/authoring-guide.md:262 msgid "**Source-only**" msgstr "**Nur Quellcode**" -#: src/native-libraries/authoring-guide.md:260 +#: src/native-libraries/authoring-guide.md:262 msgid "`src/`, `Cargo.toml`, no prebuilts" msgstr "`src/`, `Cargo.toml`, keine Prebuilds" -#: src/native-libraries/authoring-guide.md:260 +#: src/native-libraries/authoring-guide.md:262 msgid "" "Tiny tarball; first `perry compile` runs `cargo build --release` (slow); " "user needs Rust" @@ -9679,7 +9696,7 @@ msgstr "" "Winziger Tarball; das erste `perry compile` führt `cargo build --release` " "aus (langsam); Nutzer braucht Rust" -#: src/native-libraries/authoring-guide.md:262 +#: src/native-libraries/authoring-guide.md:264 msgid "" "Vendoring is the friendlier default for npm consumers. Source-only makes " "sense if your matrix is too big for one tarball or if you're publishing a " @@ -9689,7 +9706,7 @@ msgstr "" "Quellcode macht Sinn, wenn Ihre Matrix zu groß für einen Tarball ist oder " "wenn Sie einen privaten Wrapper an ein kleines Publikum veröffentlichen." -#: src/native-libraries/authoring-guide.md:266 +#: src/native-libraries/authoring-guide.md:268 msgid "" "The manifest's `targets..prebuilt` field tells Perry where to find a " "prebuilt for the user's compile target:" @@ -9697,30 +9714,30 @@ msgstr "" "Das `targets..prebuilt`-Feld des Manifests teilt Perry mit, wo ein " "Prebuild für das Compile-Target des Nutzers zu finden ist:" -#: src/native-libraries/authoring-guide.md:274 -#: src/native-libraries/authoring-guide.md:275 #: src/native-libraries/authoring-guide.md:276 -#: src/native-libraries/authoring-guide.md:300 -#: src/native-libraries/authoring-guide.md:311 -#: src/native-libraries/authoring-guide.md:320 +#: src/native-libraries/authoring-guide.md:277 +#: src/native-libraries/authoring-guide.md:278 +#: src/native-libraries/authoring-guide.md:302 +#: src/native-libraries/authoring-guide.md:313 +#: src/native-libraries/authoring-guide.md:322 #: src/native-libraries/manifest-v1.md:376 #: src/native-libraries/manifest-v1.md:396 msgid "\"prebuilt\"" msgstr "\"vorgefertigt\"" -#: src/native-libraries/authoring-guide.md:274 +#: src/native-libraries/authoring-guide.md:276 msgid "\"./prebuilt/macos/libperry_ext_my_bindings.a\"" msgstr "\"./prebuilt/macos/libperry_ext_my_bindings.a\"" -#: src/native-libraries/authoring-guide.md:275 +#: src/native-libraries/authoring-guide.md:277 msgid "\"./prebuilt/linux/libperry_ext_my_bindings.a\"" msgstr "\"./prebuilt/linux/libperry_ext_my_bindings.a\"" -#: src/native-libraries/authoring-guide.md:276 +#: src/native-libraries/authoring-guide.md:278 msgid "\"./prebuilt/windows/perry_ext_my_bindings.lib\"" msgstr "\"./prebuilt/windows/perry_ext_my_bindings.lib\"" -#: src/native-libraries/authoring-guide.md:283 +#: src/native-libraries/authoring-guide.md:285 msgid "" "If a `prebuilt` field is present, Perry treats the archive as required for " "that target and fails with a diagnostic when it cannot be resolved or " @@ -9733,11 +9750,11 @@ msgstr "" "`crate` / `lib` an, wenn das Ziel stattdessen aus dem Quellcode gebaut " "werden soll." -#: src/native-libraries/authoring-guide.md:288 +#: src/native-libraries/authoring-guide.md:290 msgid "Backend-aware packaging" msgstr "Backend-bewusstes Packaging" -#: src/native-libraries/authoring-guide.md:290 +#: src/native-libraries/authoring-guide.md:292 msgid "" "Graphics or compute wrappers can describe backend-owned artifacts without " "adding app-specific APIs to Perry. Put backend metadata under the target " @@ -9747,52 +9764,52 @@ msgstr "" "ohne anwendungsspezifische APIs zu Perry hinzuzufügen. Platzieren Sie " "Backend-Metadaten unter dem Ziel, das sie tatsächlich verwenden kann:" -#: src/native-libraries/authoring-guide.md:300 +#: src/native-libraries/authoring-guide.md:302 msgid "\"./prebuilt/ios/libdemo.a\"" msgstr "\"./prebuilt/ios/libdemo.a\"" -#: src/native-libraries/authoring-guide.md:301 -#: src/native-libraries/authoring-guide.md:312 -#: src/native-libraries/authoring-guide.md:321 +#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:314 +#: src/native-libraries/authoring-guide.md:323 #: src/native-libraries/manifest-v1.md:377 #: src/native-libraries/manifest-v1.md:397 msgid "\"backends\"" msgstr "\"Rückschläge\"" -#: src/native-libraries/authoring-guide.md:302 +#: src/native-libraries/authoring-guide.md:304 #: src/native-libraries/manifest-v1.md:378 msgid "\"metal\"" msgstr "\"Metall\"" -#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:305 #: src/native-libraries/manifest-v1.md:379 src/plugins/native-extensions.md:70 #: src/plugins/native-extensions.md:75 src/plugins/native-extensions.md:80 msgid "\"frameworks\"" msgstr "\"Rahmen\"" -#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:305 #: src/native-libraries/manifest-v1.md:379 msgid "\"Metal\"" msgstr "\"Metal\"" -#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:305 #: src/native-libraries/manifest-v1.md:379 msgid "\"QuartzCore\"" msgstr "\"QuartzCore\"" -#: src/native-libraries/authoring-guide.md:304 +#: src/native-libraries/authoring-guide.md:306 #: src/native-libraries/manifest-v1.md:380 msgid "\"shaderSources\"" msgstr "\"shaderSources\"" -#: src/native-libraries/authoring-guide.md:304 +#: src/native-libraries/authoring-guide.md:306 #: src/native-libraries/manifest-v1.md:380 msgid "\"shaders/default.metal\"" msgstr "\"shaders/default.metal\"" -#: src/native-libraries/authoring-guide.md:305 -#: src/native-libraries/authoring-guide.md:315 -#: src/native-libraries/authoring-guide.md:324 +#: src/native-libraries/authoring-guide.md:307 +#: src/native-libraries/authoring-guide.md:317 +#: src/native-libraries/authoring-guide.md:326 #: src/native-libraries/manifest-v1.md:381 #: src/native-libraries/manifest-v1.md:391 #: src/native-libraries/manifest-v1.md:400 @@ -9800,75 +9817,75 @@ msgstr "\"shaders/default.metal\"" msgid "\"shaderOutputs\"" msgstr "\"shaderOutputs\"" -#: src/native-libraries/authoring-guide.md:305 +#: src/native-libraries/authoring-guide.md:307 #: src/native-libraries/manifest-v1.md:381 msgid "\"prebuilt/default.metallib\"" msgstr "\"prebuilt/default.metallib\"" -#: src/native-libraries/authoring-guide.md:306 +#: src/native-libraries/authoring-guide.md:308 #: src/native-libraries/manifest-v1.md:382 msgid "\"resources\"" msgstr "\"Ressourcen\"" -#: src/native-libraries/authoring-guide.md:306 +#: src/native-libraries/authoring-guide.md:308 #: src/native-libraries/manifest-v1.md:382 msgid "\"resources/metal\"" msgstr "\"resources/metal\"" -#: src/native-libraries/authoring-guide.md:311 +#: src/native-libraries/authoring-guide.md:313 msgid "\"./prebuilt/linux/libdemo.a\"" msgstr "\"./prebuilt/linux/libdemo.a\"" -#: src/native-libraries/authoring-guide.md:313 -#: src/native-libraries/authoring-guide.md:314 +#: src/native-libraries/authoring-guide.md:315 +#: src/native-libraries/authoring-guide.md:316 #: src/native-libraries/manifest-v1.md:389 #: src/native-libraries/manifest-v1.md:390 #: src/native-libraries/manifest-v1.md:402 msgid "\"vulkan\"" msgstr "\"Vulkan\"" -#: src/native-libraries/authoring-guide.md:314 -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:316 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:390 #: src/native-libraries/manifest-v1.md:399 #: src/native-libraries/manifest-v1.md:403 msgid "\"libs\"" msgstr "\"Limits\"" -#: src/native-libraries/authoring-guide.md:315 +#: src/native-libraries/authoring-guide.md:317 #: src/native-libraries/manifest-v1.md:391 #: src/native-libraries/manifest-v1.md:404 msgid "\"prebuilt/default.spv\"" msgstr "\"prebuilt/default.spv\"" -#: src/native-libraries/authoring-guide.md:320 +#: src/native-libraries/authoring-guide.md:322 #: src/native-libraries/manifest-v1.md:396 msgid "\"./prebuilt/windows/demo.lib\"" msgstr "\"./prebuilt/windows/demo.lib\"" -#: src/native-libraries/authoring-guide.md:322 -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:324 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:398 #: src/native-libraries/manifest-v1.md:399 msgid "\"d3d12\"" msgstr "\"d3d12\"" -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:399 msgid "\"dxgi\"" msgstr "\"dxgi\"" -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:399 msgid "\"dxguid\"" msgstr "\"dxguid\"" -#: src/native-libraries/authoring-guide.md:324 +#: src/native-libraries/authoring-guide.md:326 #: src/native-libraries/manifest-v1.md:400 msgid "\"prebuilt/default.dxil\"" msgstr "\"prebuilt/default.dxil\"" -#: src/native-libraries/authoring-guide.md:334 +#: src/native-libraries/authoring-guide.md:336 msgid "" "Perry validates the backend/target pairing early: Metal is Apple-only, " "Vulkan is available on macOS/Linux/Windows/Android/HarmonyOS, and D3D12 is " @@ -9880,11 +9897,11 @@ msgstr "" "D3D12 ist nur für Windows. Vorkompilierte Shader-Ausgaben und Ressourcen " "werden unter `NativeLibraries///` in App-Bundles kopiert." -#: src/native-libraries/authoring-guide.md:339 +#: src/native-libraries/authoring-guide.md:341 msgid "6. Update over time" msgstr "6. Aktualisierung im Laufe der Zeit" -#: src/native-libraries/authoring-guide.md:341 +#: src/native-libraries/authoring-guide.md:343 msgid "" "**A new perry-ffi feature lands**: bump your `Cargo.toml`'s `perry-ffi` " "version, rebuild prebuilts, tag a new release. Users `bun update` to pick it " @@ -9895,7 +9912,7 @@ msgstr "" "Release. Nutzer machen `bun update`, um es zu erhalten. Perrys Manifest-" "Spezifikation bleibt bei v1, sofern das Schema sich nicht ändert." -#: src/native-libraries/authoring-guide.md:345 +#: src/native-libraries/authoring-guide.md:347 msgid "" "**A new Perry minor**: same — `perry-ffi`'s semver moves with Perry's minor. " "The git-URL consumption (v0.5.x) means rebuilding against `main` picks it up " @@ -9905,7 +9922,7 @@ msgstr "" "mit Perrys Minor. Die git-URL-Nutzung (v0.5.x) bedeutet, dass ein Neubauen " "gegen `main` es automatisch übernimmt." -#: src/native-libraries/authoring-guide.md:348 +#: src/native-libraries/authoring-guide.md:350 msgid "" "**Breaking change to the `js_*` surface you exported**: bump your package's " "major version (`1.0.0` → `2.0.0`). Users who pin a major aren't affected." @@ -9914,19 +9931,61 @@ msgstr "" "erhöhen Sie die Major-Version Ihres Pakets (`1.0.0` → `2.0.0`). Nutzer, die " "einen Major pinnen, sind nicht betroffen." -#: src/native-libraries/authoring-guide.md:352 +#: src/native-libraries/authoring-guide.md:354 msgid "Common patterns" msgstr "Häufige Muster" -#: src/native-libraries/authoring-guide.md:354 -msgid "Async one-shot (HTTP request, DB query)" -msgstr "Async-Einmalvorgang (HTTP-Anfrage, DB-Abfrage)" +#: src/native-libraries/authoring-guide.md:356 +msgid "Async one-shot (hashing, compression, a blocking client call)" +msgstr "" + +#: src/native-libraries/authoring-guide.md:360 +msgid "" +"/// Stand-in for your real CPU-bound work. Owned Rust data in, owned out.\n" +msgstr "" + +#: src/native-libraries/authoring-guide.md:363 +msgid "\"{:08x}\"" +msgstr "" -#: src/native-libraries/authoring-guide.md:371 -msgid "\"fetch: {}\"" -msgstr "\"fetch: {}\"" +#: src/native-libraries/authoring-guide.md:365 +#, fuzzy +msgid "" +"/// # Safety\n" +"/// `input_ptr` must be null or a Perry-runtime `StringHeader`.\n" +msgstr "" +"**Dokumentieren Sie `# Safety` für unsafe-fns** — mindestens \"der Zeiger " +"muss null oder ein Perry-runtime-`
` sein\"." + +#: src/native-libraries/authoring-guide.md:372 +msgid "// Copy the argument out of the JS heap before crossing threads.\n" +msgstr "" -#: src/native-libraries/authoring-guide.md:378 +#: src/native-libraries/authoring-guide.md:377 +msgid "" +"// `work` runs on a pool thread with owned Rust data only; `deliver` runs\n" +" // on the thread that owns the JS heap, where the promise is settled.\n" +msgstr "" + +#: src/native-libraries/authoring-guide.md:384 +#, fuzzy +msgid "\"cancelled\"" +msgstr "\"aktiviert\"" + +#: src/native-libraries/authoring-guide.md:385 +#, fuzzy +msgid "\"digest panicked\"" +msgstr "\"Test passed\"" + +#: src/native-libraries/authoring-guide.md:392 +msgid "" +"Perry has no tokio runtime (it runs on turnloop), so there is nothing for " +"`Handle::current().block_on` to find. Network I/O belongs on `perry_ffi::" +"turnloop_net`; the old `spawn_async` / `spawn_blocking_with_reactor` entry " +"points were retired with tokio (see the ABI reference)." +msgstr "" + +#: src/native-libraries/authoring-guide.md:397 msgid "" "`reject_string(message)` rejects with a real JavaScript `Error`: consumers " "can use `error instanceof Error`, `error.message`, and `error.stack`. Use " @@ -9941,11 +10000,11 @@ msgstr "" "`reject_with(...)`, wenn der Fehler strukturierte Felder auf dem Hauptthread " "benötigt." -#: src/native-libraries/authoring-guide.md:384 +#: src/native-libraries/authoring-guide.md:403 msgid "Sync handle-based class" msgstr "Synchrone Handle-basierte Klasse" -#: src/native-libraries/authoring-guide.md:386 +#: src/native-libraries/authoring-guide.md:405 msgid "" "Use a `handle` descriptor for synchronous resource-style APIs. The native " "function receives or returns the raw resource pointer as `i64`, while " @@ -9955,16 +10014,16 @@ msgstr "" "APIs. Die native Funktion empfängt oder gibt den rohen Ressourcenzeiger als " "`i64` zurück, während TypeScript-Aufrufer nur das opake Handle-Objekt sehen." -#: src/native-libraries/authoring-guide.md:406 +#: src/native-libraries/authoring-guide.md:425 msgid "Event listeners (`.on(event, cb)`)" msgstr "Event-Listener (`.on(event, cb)`)" -#: src/native-libraries/authoring-guide.md:415 +#: src/native-libraries/authoring-guide.md:434 #, fuzzy msgid "// closure pointers, kept alive by the GC scanner below\n" msgstr "// Verschlusszeiger, am Leben gehalten durch den GC-Scanner unten" -#: src/native-libraries/authoring-guide.md:458 +#: src/native-libraries/authoring-guide.md:477 msgid "" "The GC scanner is **load-bearing**: without it, a malloc-triggered GC " "between `.on(cb)` and `.emit()` will sweep the closure and the next emit " @@ -9976,11 +10035,11 @@ msgstr "" "ruft freigegebenen Speicher auf. Registrieren Sie immer einen Scanner, wenn " "Ihre Handles Closure-Zeiger speichern." -#: src/native-libraries/authoring-guide.md:463 +#: src/native-libraries/authoring-guide.md:482 msgid "When to extend the perry-ffi surface" msgstr "Wann die perry-ffi-Oberfläche erweitert werden sollte" -#: src/native-libraries/authoring-guide.md:465 +#: src/native-libraries/authoring-guide.md:484 msgid "" "If your binding genuinely needs something perry-ffi doesn't expose, file an " "issue against [`PerryTS/perry`](https://github.com/PerryTS/perry/issues) " @@ -9990,19 +10049,19 @@ msgstr "" "eröffnen Sie ein Issue gegen [`PerryTS/perry`](https://github.com/PerryTS/" "perry/issues), das Folgendes beschreibt:" -#: src/native-libraries/authoring-guide.md:469 +#: src/native-libraries/authoring-guide.md:488 msgid "the binding you're writing," msgstr "die Bindung, die Sie schreiben," -#: src/native-libraries/authoring-guide.md:470 +#: src/native-libraries/authoring-guide.md:489 msgid "the perry-runtime function/type you'd otherwise reach into," msgstr "die perry-runtime-Funktion/-Typ, auf die Sie sonst zugreifen würden," -#: src/native-libraries/authoring-guide.md:471 +#: src/native-libraries/authoring-guide.md:490 msgid "why a higher-level perry-ffi entry would generalize." msgstr "warum ein höherer perry-ffi-Eintrag verallgemeinern würde." -#: src/native-libraries/authoring-guide.md:473 +#: src/native-libraries/authoring-guide.md:492 msgid "" "The bar for adding to perry-ffi is high — every helper is a forever " "commitment — but real wrappers driving real needs is exactly the right " @@ -10016,7 +10075,7 @@ msgstr "" "+ Buffer in v0.5.556, JSON-stringify + Event-Pump in v0.5.567-Followups) " "kamen alle von spezifischen Wrappern, die sie brauchten." -#: src/native-libraries/authoring-guide.md:479 +#: src/native-libraries/authoring-guide.md:498 msgid "" "Don't reach into `perry_runtime::*` directly to \"unblock\" your wrapper " "today — it'll break the next time those internals change." @@ -10025,7 +10084,7 @@ msgstr "" "zu \"entsperren\" — es bricht beim nächsten Mal, wenn sich diese Interna " "ändern." -#: src/native-libraries/authoring-guide.md:482 src/container/containers.md:223 +#: src/native-libraries/authoring-guide.md:501 src/container/containers.md:223 #: src/container/compose.md:358 src/container/networking.md:183 #: src/container/volumes.md:184 src/container/security.md:216 #: src/container/production-patterns.md:298 src/cli/allow-js-runtime.md:81 @@ -10036,19 +10095,19 @@ msgstr "" msgid "See also" msgstr "Siehe auch" -#: src/native-libraries/authoring-guide.md:484 +#: src/native-libraries/authoring-guide.md:503 msgid "[`overview.md`](overview.md) — the architectural picture." msgstr "[`overview.md`](overview.md) — das architektonische Bild." -#: src/native-libraries/authoring-guide.md:485 +#: src/native-libraries/authoring-guide.md:504 msgid "[`abi.md`](abi.md) — perry-ffi reference." msgstr "[`abi.md`](abi.md) — perry-ffi-Referenz." -#: src/native-libraries/authoring-guide.md:486 +#: src/native-libraries/authoring-guide.md:505 msgid "[`manifest-v1.md`](manifest-v1.md) — the manifest schema in full." msgstr "[`manifest-v1.md`](manifest-v1.md) — das vollständige Manifest-Schema." -#: src/native-libraries/authoring-guide.md:487 +#: src/native-libraries/authoring-guide.md:506 msgid "" "[`PerryTS/tursodb-bindings`](https://github.com/PerryTS/tursodb-bindings) " "and [`PerryTS/iroh-bindings`](https://github.com/PerryTS/iroh-bindings) for " @@ -10190,7 +10249,7 @@ msgstr "" "perry-ffi/src/lib.rs) und ihre Rust Dokumentation sind die Quelle der " "Wahrheit für genaue Signaturen und Sicherheitsanforderungen." -#: src/native-libraries/abi.md:71 src/internals/node-api-host.md:41 +#: src/native-libraries/abi.md:71 src/internals/node-api-host.md:45 msgid "Area" msgstr "Area" @@ -10255,9 +10314,10 @@ msgid "Async work" msgstr "Async-Arbeit" #: src/native-libraries/abi.md:78 +#, fuzzy msgid "" -"`JsPromise`, `JsNativeAsyncCompletion`, `spawn_async`, `spawn_blocking`, " -"`spawn_blocking_with_reactor`, `run_pending`" +"`JsPromise`, `JsNativeAsyncCompletion`, `spawn_blocking`, `run_pending`, " +"`pool::{submit, run, cancel, turn}`, `agent_post`, `turnloop_net`" msgstr "" "`JsPromise`, `JsNativeAsyncCompletion`, `spawn_async`, `spawn_blocking`, " "`spawn_blocking_with_reactor`, `run_pending`" @@ -10307,10 +10367,83 @@ msgid "Use `perry_ffi::StringHeader` in exported signatures:" msgstr "Verwenden Sie `perry_ffi::StringHeader` in exportierten Signaturen:" #: src/native-libraries/abi.md:109 +msgid "Retired: `spawn_async` and `spawn_blocking_with_reactor`" +msgstr "" + +#: src/native-libraries/abi.md:111 +msgid "" +"Both were removed together with tokio, which Perry no longer contains in any " +"crate. Their contract was \"tokio's I/O reactor is ambient\": `spawn_async` " +"drove a boxed tokio future on perry-stdlib's shared runtime, and " +"`spawn_blocking_with_reactor` ran a closure on a tokio blocking thread that " +"carried that reactor. Nothing can honour that contract without tokio, so the " +"Rust functions and their C symbols (`perry_ffi_spawn_async`, " +"`perry_ffi_spawn_blocking_with_reactor`) were deleted rather than stubbed: a " +"wrapper that still calls them fails to compile against current `perry-ffi` " +"(or, if prebuilt, fails to link naming the symbol) instead of aborting at " +"its first socket. No in-tree or known out-of-tree wrapper used them when " +"they were retired — every in-tree caller had moved to turnloop first." +msgstr "" + +#: src/native-libraries/abi.md:123 +msgid "" +"This is a backwards-incompatible change to the `0.5.x` surface, made without " +"a major bump because `perry-ffi` tracks Perry's workspace version (there is " +"no independent major to raise) and the symbols had no remaining users. " +"Migrate as follows:" +msgstr "" + +#: src/native-libraries/abi.md:128 +#, fuzzy +msgid "Was" +msgstr "Watches" + +#: src/native-libraries/abi.md:128 +#, fuzzy +msgid "Use instead" +msgstr "Anwendungsfall" + +#: src/native-libraries/abi.md:130 +msgid "`spawn_async(future)` for socket / TLS / HTTP I/O" +msgstr "" + +#: src/native-libraries/abi.md:130 +msgid "" +"`perry_ffi::turnloop_net` (sockets on the agent's turnloop loop) and " +"`perry_ffi::agent_post`" +msgstr "" + +#: src/native-libraries/abi.md:131 +msgid "`spawn_blocking_with_reactor(closure)`" +msgstr "" + +#: src/native-libraries/abi.md:131 +msgid "" +"`spawn_blocking` for work that holds its thread, `pool::submit` for bounded " +"CPU work" +msgstr "" + +#: src/native-libraries/abi.md:132 +msgid "`Handle::current().block_on(…)` inside `spawn_blocking`" +msgstr "" + +#: src/native-libraries/abi.md:132 +msgid "a blocking client, or turnloop I/O; there is no ambient runtime" +msgstr "" + +#: src/native-libraries/abi.md:134 +msgid "" +"`spawn_blocking` and `run_pending` are unchanged in signature: " +"`spawn_blocking` runs on turnloop's long-occupancy worker set (one plain OS " +"thread when the caller has no event loop), and `run_pending` takes one " +"bounded loop turn." +msgstr "" + +#: src/native-libraries/abi.md:138 msgid "Async promise rejection" msgstr "Async Versprechen Ablehnung" -#: src/native-libraries/abi.md:111 +#: src/native-libraries/abi.md:140 msgid "" "`JsPromise::reject_string(message)` copies the message and rejects with a " "real JavaScript `Error` allocated on the runtime's main thread. Its `." @@ -10328,11 +10461,11 @@ msgstr "" "Wert ablehnen. Verwenden Sie `JsPromise::reject_with`, um einen " "strukturierten Abstoßwert sicher auf dem Hauptgewinde zu erstellen." -#: src/native-libraries/abi.md:118 +#: src/native-libraries/abi.md:147 msgid "ABI boundaries and thread safety" msgstr "ABI-Grenzen und Gewindesicherheit" -#: src/native-libraries/abi.md:120 +#: src/native-libraries/abi.md:149 msgid "" "Use the exported constructors, accessors, and `JsValue` conversions. Do not " "depend on private runtime field offsets or hard-code pointer tags." @@ -10341,7 +10474,7 @@ msgstr "" "Konvertierungen. Verlassen Sie sich nicht auf private Runtime-Feld-Offsets " "oder Hard-Code-Pointer-Tags." -#: src/native-libraries/abi.md:123 +#: src/native-libraries/abi.md:152 msgid "" "JavaScript heap allocation is tied to Perry's main-thread arena. If worker-" "thread work must produce an object, array, or other complex `JsValue`, carry " @@ -10353,7 +10486,7 @@ msgstr "" "`JsValue` erzeugen muss, tragen Sie einfache `Send`-Daten zurück und " "konstruieren den Wert mit `JsPromise::resolve_with` auf dem Hauptgewinde." -#: src/native-libraries/abi.md:127 +#: src/native-libraries/abi.md:156 msgid "" "Register native values that retain JavaScript references with the handle/" "root-scanner APIs. Use `TransientRootScope` for temporary values that must " @@ -10363,7 +10496,7 @@ msgstr "" "scanner-APIs speichern. Verwenden Sie `TransientRootScope` für temporäre " "Werte, die eine Zuweisungs- oder Sammelstelle überleben müssen." -#: src/native-libraries/abi.md:130 +#: src/native-libraries/abi.md:159 msgid "" "Respect the `unsafe` contracts on raw pointer constructors and FFI entry " "points. `perry-ffi` stabilizes the interface; it cannot prove that a caller " @@ -10374,7 +10507,7 @@ msgstr "" "beweisen, dass ein Anrufer einen Livepointer des angegebenen Typs geliefert " "hat." -#: src/native-libraries/abi.md:133 +#: src/native-libraries/abi.md:162 msgid "" "Keep `runtime-link` out of production wrapper dependencies unless the crate " "genuinely needs a Cargo-level `perry-runtime` link. It is normally enabled " @@ -10384,7 +10517,7 @@ msgstr "" "denn, die Kiste benötigt wirklich eine Cargo-Level-`perry-runtime`-" "Verbindung. Es wird normalerweise nur in Wrappertests aktiviert." -#: src/native-libraries/abi.md:137 +#: src/native-libraries/abi.md:166 msgid "" "Any new ABI helper should be documented and covered by a focused test in " "`crates/perry-ffi` in the same change." @@ -10392,28 +10525,28 @@ msgstr "" "Jeder neue ABI-Helfer sollte in derselben Änderung durch einen fokussierten " "Test in `crates/perry-ffi` dokumentiert und abgedeckt werden." -#: src/native-libraries/abi.md:140 +#: src/native-libraries/abi.md:169 msgid "Reference example: `perry-ext-dotenv`" msgstr "Referenzbeispiel: `perry-ext-dotenv`" -#: src/native-libraries/abi.md:142 +#: src/native-libraries/abi.md:171 msgid "The smallest in-tree wrapper demonstrates string input and output:" msgstr "Die kleinste in-tree Wrapper zeigt String-Ein- und -Ausgabe:" -#: src/native-libraries/abi.md:152 +#: src/native-libraries/abi.md:181 msgid "\".env\"" msgstr "\".env\"" -#: src/native-libraries/abi.md:153 +#: src/native-libraries/abi.md:182 #, fuzzy msgid "// … read file, set env vars, return 1.0 / 0.0 …\n" msgstr "// ... Datei lesen, env vars einstellen, 1.0 / 0.0 zurückgeben " -#: src/native-libraries/abi.md:165 +#: src/native-libraries/abi.md:194 msgid "\"{}\"" msgstr "\"{}\"" -#: src/native-libraries/abi.md:170 +#: src/native-libraries/abi.md:199 msgid "" "Source: [`crates/perry-ext-dotenv/src/lib.rs`](https://github.com/PerryTS/" "perry/blob/main/crates/perry-ext-dotenv/src/lib.rs). The crate's normal " @@ -10426,11 +10559,11 @@ msgstr "" "`runtime-link`, so dass der FFI-Rundstreifentest Laufzeitsymbole verknüpfen " "kann." -#: src/native-libraries/abi.md:174 +#: src/native-libraries/abi.md:203 msgid "Tooling and implementation status" msgstr "Werkzeug- und Implementierungsstatus" -#: src/native-libraries/abi.md:176 +#: src/native-libraries/abi.md:205 msgid "" "The native-library work tracked by [\\#466](https://github.com/PerryTS/perry/" "issues/466) has landed:" @@ -10438,16 +10571,16 @@ msgstr "" "Die von [\\#466](https://github.com/PerryTS/perry/issues/466) verfolgte " "native Bibliotheksarbeit ist gelandet:" -#: src/native-libraries/abi.md:178 +#: src/native-libraries/abi.md:207 msgid "manifests declare their native functions and ABI version;" msgstr "Manifeste erklären ihre nativen Funktionen und ABI-Version;" -#: src/native-libraries/abi.md:179 +#: src/native-libraries/abi.md:208 msgid "incompatible declared ABI ranges are rejected during resolution;" msgstr "" "inkompatible erklärten ABI-Bereiche werden während der Auflösung abgelehnt;" -#: src/native-libraries/abi.md:180 +#: src/native-libraries/abi.md:209 msgid "" "`perry native init`, `perry native validate`, and `perry native list` " "provide authoring and inspection workflows;" @@ -10455,13 +10588,13 @@ msgstr "" "`perry native init`, `perry native validate` und `perry native list` bieten " "Autoren- und Inspektionsworkflows;" -#: src/native-libraries/abi.md:182 +#: src/native-libraries/abi.md:211 msgid "the well-known bindings table routes supported package imports; and" msgstr "" "die bekannten Bindungstabellenrouten, die die Paketeinfuhren unterstützten, " "und" -#: src/native-libraries/abi.md:183 +#: src/native-libraries/abi.md:212 msgid "" "wrappers can depend on the repository's stable `perry-ffi` API instead of " "`perry-runtime` internals." @@ -10469,7 +10602,7 @@ msgstr "" "Wrapper können von der stabilen `perry-ffi` API des Projektarchivs anstelle " "von `perry-runtime` Internalen abhängen." -#: src/native-libraries/abi.md:186 +#: src/native-libraries/abi.md:215 msgid "" "Issue #466 is retained as the historical design record. Open a new issue for " "a missing ABI helper or a new native-library capability." @@ -10716,9 +10849,9 @@ msgstr "Erforderlich" #: src/platforms/tvos.md:149 src/platforms/watchos.md:137 #: src/platforms/wearos.md:23 src/container/containers.md:133 #: src/system/media.md:37 src/testing/geisterhand.md:257 src/cli/flags.md:96 -#: src/cli/cache-dir.md:42 src/internals/node-api-host.md:548 -#: src/internals/node-api-host.md:584 src/internals/node-api-host.md:598 -#: src/internals/node-api-host.md:609 +#: src/cli/cache-dir.md:42 src/internals/node-api-host.md:588 +#: src/internals/node-api-host.md:624 src/internals/node-api-host.md:638 +#: src/internals/node-api-host.md:649 msgid "Notes" msgstr "Anmerkungen" @@ -10781,16 +10914,17 @@ msgstr "string" #: src/testing/http2-conformance.md:424 src/testing/http2-conformance.md:425 #: src/testing/http2-conformance.md:426 src/testing/http2-conformance.md:427 #: src/testing/http2-conformance.md:428 src/testing/http2-conformance.md:429 -#: src/testing/ci-tiers.md:26 src/testing/ci-tiers.md:27 -#: src/testing/ci-tiers.md:28 src/testing/ci-tiers.md:29 -#: src/testing/ci-tiers.md:30 src/testing/ci-tiers.md:33 -#: src/testing/ci-tiers.md:34 src/testing/ci-tiers.md:35 -#: src/testing/ci-tiers.md:36 src/testing/ci-tiers.md:37 -#: src/testing/ci-tiers.md:38 src/testing/ci-tiers.md:39 -#: src/testing/ci-tiers.md:40 src/testing/ci-tiers.md:41 -#: src/testing/ci-tiers.md:42 src/testing/ci-tiers.md:43 -#: src/testing/ci-tiers.md:44 src/testing/ci-tiers.md:45 -#: src/testing/ci-tiers.md:46 src/testing/ci-tiers.md:47 +#: src/testing/ci-tiers.md:39 src/testing/ci-tiers.md:40 +#: src/testing/ci-tiers.md:41 src/testing/ci-tiers.md:42 +#: src/testing/ci-tiers.md:43 src/testing/ci-tiers.md:45 +#: src/testing/ci-tiers.md:46 src/testing/ci-tiers.md:48 +#: src/testing/ci-tiers.md:49 src/testing/ci-tiers.md:50 +#: src/testing/ci-tiers.md:51 src/testing/ci-tiers.md:52 +#: src/testing/ci-tiers.md:53 src/testing/ci-tiers.md:54 +#: src/testing/ci-tiers.md:55 src/testing/ci-tiers.md:56 +#: src/testing/ci-tiers.md:57 src/testing/ci-tiers.md:58 +#: src/testing/ci-tiers.md:59 src/testing/ci-tiers.md:60 +#: src/testing/ci-tiers.md:61 src/testing/ci-tiers.md:62 #: src/internals/rfc-rooting-by-construction.md:277 #: src/internals/rfc-rooting-by-construction.md:278 #: src/internals/rfc-rooting-by-construction.md:279 @@ -10862,8 +10996,8 @@ msgid "" "Unlike handles and promises, `pod` has no string-only spelling; use object " "form so the field order and scalar ABI types are explicit. `json` is " "parameter-only: it serializes its argument with `JSON.stringify` at the " -"callsite and passes the result in a `string`\\-shaped slot (see \"Param types" -"\")." +"callsite and passes the result in a `string`\\-shaped slot (see \"Param " +"types\")." msgstr "" "`number` ist ein Kompatibilitätsalias für `f64`; `js_value` und `boolean` " "sind Kompatibilitätsalias für `jsvalue` und `bool`. Bare `handle` ist das " @@ -11066,7 +11200,7 @@ msgid "symbol string" msgstr "Symbol-Zeichenkette" #: src/native-libraries/manifest-v1.md:179 src/cli/app-updates.md:61 -#: src/cli/app-updates.md:66 src/contributing/releasing.md:278 +#: src/cli/app-updates.md:66 src/contributing/releasing.md:297 msgid "none" msgstr "keiner" @@ -11555,8 +11689,8 @@ msgstr "" #: src/native-libraries/manifest-v1.md:276 msgid "" "Note on `\"string\"` vs. `\"i64_str\"`: both produce a string on the " -"TypeScript side, but they differ in how Rust returns the pointer. Use `" -"\"string\"` / `\"ptr\"` when your `extern \"C\" fn` is declared `-> *const " +"TypeScript side, but they differ in how Rust returns the pointer. Use " +"`\"string\"` / `\"ptr\"` when your `extern \"C\" fn` is declared `-> *const " "u8` (or `*const StringHeader`); use `\"i64_str\"` when it's `-> i64` and the " "value happens to be a `StringHeader` address (closes [\\#222](https://github." "com/PerryTS/perry/issues/222))." @@ -11571,15 +11705,15 @@ msgstr "" #: src/native-libraries/manifest-v1.md:283 msgid "" -"`\"void\"` is valid only as a return descriptor. `\"buffer+len\"`, `\"json" -"\"`, and `{ \"kind\": \"pod\", ... }` are valid only as parameter " +"`\"void\"` is valid only as a return descriptor. `\"buffer+len\"`, " +"`\"json\"`, and `{ \"kind\": \"pod\", ... }` are valid only as parameter " "descriptors: `\"buffer+len\"` expands one JavaScript argument into two " "native ABI slots, while `pod` lowers one object-shaped argument to a pointer " "to verifier-backed C-layout storage." msgstr "" "`\"void\"` gilt nur als Rückgabedeskriptor. `\"buffer+len\"`, `\"json\"` und " -"`{ \"kind\": \"pod\", ... }` sind nur als Parameterdeskriptoren gültig: `" -"\"buffer+len\"` erweitert ein JavaScript-Argument in zwei native ABI-Slots, " +"`{ \"kind\": \"pod\", ... }` sind nur als Parameterdeskriptoren gültig: " +"`\"buffer+len\"` erweitert ein JavaScript-Argument in zwei native ABI-Slots, " "während `pod` ein objektförmiges Argument auf einen Zeiger auf einen " "prüfergestützten C-Layout-Speicher senkt." @@ -12428,19 +12562,17 @@ msgstr "" #, fuzzy msgid "" "```toml\n" -"[bindings.mongodb]\n" -"crate = \"perry-ext-mongodb\"\n" -"lib = \"perry_ext_mongodb\"\n" +"[bindings.bcrypt]\n" +"crate = \"perry-ext-bcrypt\"\n" +"lib = \"perry_ext_bcrypt\"\n" "tracking = \"#466\"\n" "\n" -"[bindings.mongodb.upstream]\n" -"version = \"7.5.0\" # pinned npm release (immutable dist)\n" -"sha256 = \"4d93c312…\" # sha256 of the registry tarball at pin " +"[bindings.bcrypt.upstream]\n" +"version = \"6.0.0\" # pinned npm release (immutable dist)\n" +"sha256 = \"3b2478cd…\" # sha256 of the registry tarball at pin " "time\n" -"repo = \"https://github.com/mongodb/node-mongodb-native\"\n" -"ref = \"c4368315…\" # publisher's gitHead for the release, when " -"known\n" -"ported-at = \"7.5.0\" # release the wrapper was last REVIEWED " +"repo = \"https://github.com/kelektiv/node.bcrypt.js\"\n" +"ported-at = \"6.0.0\" # release the wrapper was last REVIEWED " "against\n" "date = \"2026-07-30\"\n" "```" @@ -12463,11 +12595,11 @@ msgstr "" "date = \"2026-07-30\"\n" "```" -#: src/native-libraries/upstream-pins.md:25 +#: src/native-libraries/upstream-pins.md:24 msgid "The lock-step rule" msgstr "Die Lock-step-Regel" -#: src/native-libraries/upstream-pins.md:27 +#: src/native-libraries/upstream-pins.md:26 msgid "" "**`ported-at` must equal `version`.** Re-pinning a binding to a newer " "upstream release without re-reviewing the wrapper against the upstream diff " @@ -12484,15 +12616,15 @@ msgstr "" "über die Überprüfung laufen, die sie verlangt: Beugen `version` zwingt Sie, " "`ported-at` zu fördern, was die Überprüfung zwingt." -#: src/native-libraries/upstream-pins.md:34 +#: src/native-libraries/upstream-pins.md:33 msgid "Exempt entries" msgstr "Keine Einträge" -#: src/native-libraries/upstream-pins.md:36 +#: src/native-libraries/upstream-pins.md:35 msgid "Three kinds of row carry no pin:" msgstr "Drei Arten von Reihen tragen keine Nadel:" -#: src/native-libraries/upstream-pins.md:38 +#: src/native-libraries/upstream-pins.md:37 msgid "" "**Node builtins** (`node-builtin = true`): `zlib`, `events`, `net`, `http`, " "`https`, `http2`, `streams`. Their upstream is Node core, not an npm dist." @@ -12500,7 +12632,7 @@ msgstr "" "**Node builtins** (`node-builtin = true`): `zlib`, `events`, `net`, `http`, " "`https`, `http2`, `streams`. Deren Upstream ist Node Core, kein npm Dist." -#: src/native-libraries/upstream-pins.md:40 +#: src/native-libraries/upstream-pins.md:39 msgid "" "**Aliases** (`alias-of = \"\"`): a package subpath (`mysql2/" "promise`) or a bare-name alias (`fetch` → `node-fetch`) that shares its " @@ -12510,11 +12642,11 @@ msgstr "" "promise`) oder ein Alias mit bloßem Namen (`fetch` → `node-fetch`), der die " "Provenienz seines Ziels teilt." -#: src/native-libraries/upstream-pins.md:43 +#: src/native-libraries/upstream-pins.md:42 msgid "**Perry-owned packages** (`@perryts/*`, `perry/*`)." msgstr "**Perry-eigene Verpackungen** (`@perryts/*`, `perry/*`)." -#: src/native-libraries/upstream-pins.md:45 +#: src/native-libraries/upstream-pins.md:44 #, fuzzy msgid "" "Note that a distinct npm package served by a shared wrapper crate is **not** " @@ -12526,11 +12658,11 @@ msgstr "" "beide `perry-ext-ioredis`, werden aber separat veröffentlicht und " "versioniert, so dass jeder einen eigenen Pin trägt." -#: src/native-libraries/upstream-pins.md:49 +#: src/native-libraries/upstream-pins.md:48 msgid "Tooling — `scripts/binding_pins.mjs`" msgstr "Werkzeugbau — `scripts/binding_pins.mjs`" -#: src/native-libraries/upstream-pins.md:52 +#: src/native-libraries/upstream-pins.md:51 #, fuzzy msgid "" "# Provision or bump one pin to a specific version (default: latest stable)\n" @@ -12538,12 +12670,12 @@ msgstr "" "# Bereitstellung oder Beugung eines Pins zu einer bestimmten Version " "(Standard: aktueller stabiler)" -#: src/native-libraries/upstream-pins.md:54 +#: src/native-libraries/upstream-pins.md:53 #, fuzzy msgid "# Provision every currently-unpinned binding at its latest stable\n" msgstr "# Bereitstellung jeder aktuell ungepinnten Bindung spätestens stabil" -#: src/native-libraries/upstream-pins.md:57 +#: src/native-libraries/upstream-pins.md:56 #, fuzzy msgid "" "# Offline gate (CI): pins present, lock-stepped, crates exist. Exit 1 on " @@ -12552,7 +12684,7 @@ msgstr "" "# Offline-Gate (CI): Stifte vorhanden, verriegelt, Kisten vorhanden. Ausgang " "1 auf jeder" -#: src/native-libraries/upstream-pins.md:61 +#: src/native-libraries/upstream-pins.md:60 #, fuzzy msgid "" "# Advisory: additionally flag pins whose upstream has a newer stable " @@ -12561,7 +12693,7 @@ msgstr "" "# Advisory: zusätzlich Flag Pins, deren Upstream eine neuere stabile " "Freigabe hat" -#: src/native-libraries/upstream-pins.md:65 +#: src/native-libraries/upstream-pins.md:64 #, fuzzy msgid "" "# Materialize the upstream repo at the pinned ref into gitignored upstream/" @@ -12570,7 +12702,7 @@ msgstr "" "# Materialisieren Sie die Upstream-Repo an der gepinnten Ref in gitignored " "upstream/" -#: src/native-libraries/upstream-pins.md:71 +#: src/native-libraries/upstream-pins.md:70 msgid "" "Never hand-edit `version` / `sha256` / `ref` — the tarball hash can't be " "recomputed at edit time. Use `--set`, which fetches the registry tarball, " @@ -12581,11 +12713,11 @@ msgstr "" "Registrierung Tarball holt, hashes es, zeichnet den Herausgeber `gitHead`, " "und Briefmarken `ported-at`/`date`." -#: src/native-libraries/upstream-pins.md:75 +#: src/native-libraries/upstream-pins.md:74 msgid "Cadence" msgstr "Cadence" -#: src/native-libraries/upstream-pins.md:77 +#: src/native-libraries/upstream-pins.md:76 msgid "" "The `--check` gate runs on every PR (offline). The weekly dependency-update " "job runs `--check --refresh`, so a newly-soaked upstream release surfaces as " @@ -12971,7 +13103,7 @@ msgid "**Deno**" msgstr "**Deno**" #: src/threading/overview.md:41 src/threading/overview.md:42 -#: src/api/reference.md:530 src/api/reference.md:3640 +#: src/api/reference.md:532 src/api/reference.md:3640 msgid "`Worker`" msgstr "`Worker`" @@ -14534,8 +14666,8 @@ msgid "" " score: u.score * 2,\n" " }))\n" "\n" -" console.log(`parallel-filter-combined active=${active.length} profiles=" -"${profiles.length}`)\n" +" console.log(`parallel-filter-combined active=${active.length} " +"profiles=${profiles.length}`)\n" "}\n" "```" msgstr "" @@ -14559,8 +14691,8 @@ msgstr "" " score: u.score * 2,\n" " }))\n" "\n" -" console.log(`parallel-filter-combined active=${active.length} profiles=" -"${profiles.length}`)\n" +" console.log(`parallel-filter-combined active=${active.length} " +"profiles=${profiles.length}`)\n" "}\n" "```" @@ -15073,8 +15205,8 @@ msgid "" " return { total, count: rawData.items.length }\n" " })\n" "\n" -" console.log(`spawn-api-then-process total=${processed.total} count=" -"${processed.count}`)\n" +" console.log(`spawn-api-then-process total=${processed.total} " +"count=${processed.count}`)\n" "}\n" "```" msgstr "" @@ -15091,8 +15223,8 @@ msgstr "" " return { total, count: rawData.items.length }\n" " })\n" "\n" -" console.log(`spawn-api-then-process total=${processed.total} count=" -"${processed.count}`)\n" +" console.log(`spawn-api-then-process total=${processed.total} " +"count=${processed.count}`)\n" "}\n" "```" @@ -15781,7 +15913,7 @@ msgstr "`
`. **iOS**, " -"**Android**, **Linux/GTK4**, **Windows**, **tvOS**, **visionOS**, and " -"**watchOS** link no-op stubs so cross-platform code compiles everywhere — " -"the table renders nothing and `tableGetSelectedRow` returns `-1`. For " -"production lists on platforms without a real impl, use `LazyVStack` (see " -"[Layout](layout.md))." +"+ `NSScrollView`) and **Android** (scrollable native widget rows); the " +"**Web** target uses an HTML `
`. **iOS**, **Linux/GTK4**, **Windows**, " +"**tvOS**, **visionOS**, and **watchOS** link no-op stubs so cross-platform " +"code compiles everywhere — the table renders nothing and " +"`tableGetSelectedRow` returns `-1`. For production lists on platforms " +"without a real impl, use `LazyVStack` (see [Layout](layout.md))." msgstr "" "**Plattform-Unterstützung:** echte Implementierung lebt auf **macOS** " "(`NSTableView` + `NSScrollView`); das **Web**-Target verwendet ein HTML-" @@ -22353,11 +22542,11 @@ msgstr "" "Plattformen ohne echte Implementierung verwenden Sie `LazyVStack` (siehe " "[Layout](layout.md))." -#: src/ui/table.md:14 +#: src/ui/table.md:15 msgid "Creating a Table" msgstr "Eine Tabelle erstellen" -#: src/ui/table.md:22 +#: src/ui/table.md:23 msgid "" "`Table(rowCount, colCount, renderCell)` creates a table. The render callback " "receives `(row, col)` and must return a `Widget` (typically `Text(...)`). " @@ -22370,11 +22559,18 @@ msgstr "" "als Zellen-View auf, was Zellen ermöglicht, Bilder, Stacks oder Composites " "zu rendern — nicht nur reine Strings." -#: src/ui/table.md:28 +#: src/ui/table.md:29 +msgid "" +"Android renders all cells when the table is created or its row count is " +"updated. Headers and rows share column widths, with horizontal and vertical " +"scrolling when the content exceeds the available space." +msgstr "" + +#: src/ui/table.md:33 msgid "Column Headers" msgstr "Spalten-Kopfzeilen" -#: src/ui/table.md:30 +#: src/ui/table.md:35 msgid "" "```ts\n" "const userTable = Table(users.length, 3, (row: number, col: number) => {\n" @@ -22402,11 +22598,11 @@ msgstr "" "tableSetColumnHeader(userTable, 2, \"Role\")\n" "```" -#: src/ui/table.md:43 +#: src/ui/table.md:48 msgid "Column Widths" msgstr "Spaltenbreiten" -#: src/ui/table.md:45 +#: src/ui/table.md:50 msgid "" "```ts\n" "tableSetColumnWidth(userTable, 0, 150) // Name column\n" @@ -22420,11 +22616,11 @@ msgstr "" "tableSetColumnWidth(userTable, 2, 100) // Role column\n" "```" -#: src/ui/table.md:51 +#: src/ui/table.md:56 msgid "Row Selection" msgstr "Zeilenauswahl" -#: src/ui/table.md:53 +#: src/ui/table.md:58 msgid "" "```ts\n" "const selectedRow = State(-1)\n" @@ -22450,15 +22646,15 @@ msgstr "" "const current = tableGetSelectedRow(userTable)\n" "```" -#: src/ui/table.md:65 +#: src/ui/table.md:70 msgid "Dynamic Row Count" msgstr "Dynamische Zeilenanzahl" -#: src/ui/table.md:67 +#: src/ui/table.md:72 msgid "Update the number of rows after creation:" msgstr "Die Anzahl der Zeilen nach der Erstellung aktualisieren:" -#: src/ui/table.md:75 +#: src/ui/table.md:80 msgid "" "```ts\n" "const selectedName = State(\"None\")\n" @@ -22524,11 +22720,11 @@ msgstr "" "})\n" "```" -#: src/ui/table.md:107 +#: src/ui/table.md:112 msgid "Sort, filter, multi-select (issue #473)" msgstr "Sortieren, filtern, Mehrfachauswahl (Issue #473)" -#: src/ui/table.md:109 +#: src/ui/table.md:114 msgid "" "Since v0.5.636 the macOS `Table` exposes a column-sort callback, multi-row " "selection, and a passive filter-text slot the user wires to their own row-" @@ -22538,7 +22734,7 @@ msgstr "" "Mehrfach-Zeilen-Auswahl und einen passiven Filter-Text-Slot, den der Nutzer " "mit seiner eigenen Zeilen-Verstecken-Logik verdrahtet." -#: src/ui/table.md:113 +#: src/ui/table.md:118 msgid "" "```typescript,no-test\n" "import {\n" @@ -22610,16 +22806,16 @@ msgstr "" "console.log(tableGetFilterText(table));\n" "```" -#: src/ui/table.md:147 +#: src/ui/table.md:152 msgid "" -"These are real impls on macOS via `NSTableView.sortDescriptors` and " -"`selectedRowIndexes`; other platforms link safe-default stubs." +"These are implemented on macOS via `NSTableView.sortDescriptors` and " +"`selectedRowIndexes`, and on Android. On Android, tapping a header toggles " +"its sort direction and invokes the callback; multi-selection toggles rows on " +"tap. The filter slot is passive on both platforms. Other platforms link safe-" +"default stubs." msgstr "" -"Diese sind echte Implementierungen auf macOS via `NSTableView." -"sortDescriptors` und `selectedRowIndexes`; andere Plattformen linken Safe-" -"Default-Stubs." -#: src/ui/table.md:154 +#: src/ui/table.md:162 msgid "[Events](events.md) — Event handling" msgstr "[Events](events.md) — Event-Handling" @@ -23250,15 +23446,17 @@ msgstr "" #: src/ui/multi-window.md:118 msgid "" -"**macOS materials:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, `\"menu" -"\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, `\"windowBackground\"`, `" -"\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, `\"contentBackground\"`, `" -"\"underWindowBackground\"`, `\"underPageBackground\"`" +"**macOS materials:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, " +"`\"menu\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, " +"`\"windowBackground\"`, `\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, " +"`\"contentBackground\"`, `\"underWindowBackground\"`, " +"`\"underPageBackground\"`" msgstr "" -"**macOS-Materialien:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, `" -"\"menu\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, `\"windowBackground" -"\"`, `\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, `\"contentBackground" -"\"`, `\"underWindowBackground\"`, `\"underPageBackground\"`" +"**macOS-Materialien:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, " +"`\"menu\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, " +"`\"windowBackground\"`, `\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, " +"`\"contentBackground\"`, `\"underWindowBackground\"`, " +"`\"underPageBackground\"`" #: src/ui/multi-window.md:125 msgid "`NSVisualEffectView` with the specified material" @@ -24248,13 +24446,13 @@ msgid "" "\n" "const auth = WebView({\n" " url: \"https://accounts.google.com/o/oauth2/auth?client_id=..." -"&redirect_uri=https://myapp.com/oauth/callback&response_type=code&scope=email" -"\",\n" +"&redirect_uri=https://myapp.com/oauth/" +"callback&response_type=code&scope=email\",\n" " // Hard host-level allowlist — blocked at the native delegate\n" " // without round-tripping into TS. Exact match or subdomain match\n" " // (so \"google.com\" allows \"accounts.google.com\").\n" -" allowedDomains: [\"accounts.google.com\", \"google.com\", \"myapp.com" -"\"],\n" +" allowedDomains: [\"accounts.google.com\", \"google.com\", \"myapp." +"com\"],\n" " onShouldNavigate: (url) => {\n" " if (url.startsWith(\"https://myapp.com/oauth/callback?\")) {\n" " const code = new URL(url).searchParams.get(\"code\") ?? \"\"\n" @@ -24277,13 +24475,13 @@ msgstr "" "\n" "const auth = WebView({\n" " url: \"https://accounts.google.com/o/oauth2/auth?client_id=..." -"&redirect_uri=https://myapp.com/oauth/callback&response_type=code&scope=email" -"\",\n" +"&redirect_uri=https://myapp.com/oauth/" +"callback&response_type=code&scope=email\",\n" " // Hard host-level allowlist — blocked at the native delegate\n" " // without round-tripping into TS. Exact match or subdomain match\n" " // (so \"google.com\" allows \"accounts.google.com\").\n" -" allowedDomains: [\"accounts.google.com\", \"google.com\", \"myapp.com" -"\"],\n" +" allowedDomains: [\"accounts.google.com\", \"google.com\", \"myapp." +"com\"],\n" " onShouldNavigate: (url) => {\n" " if (url.startsWith(\"https://myapp.com/oauth/callback?\")) {\n" " const code = new URL(url).searchParams.get(\"code\") ?? \"\"\n" @@ -25025,8 +25223,8 @@ msgstr "" #: src/tui/overview.md:18 msgid "" -"The smallest interactive `perry/tui` program — a counter that increments on `" -"+`, decrements on `-`, and quits on `q`:" +"The smallest interactive `perry/tui` program — a counter that increments on " +"`+`, decrements on `-`, and quits on `q`:" msgstr "" "Das kleinste interaktive `perry/tui`-Programm — ein Zähler, der bei `+` " "erhöht, bei `-` verringert und bei `q` beendet wird:" @@ -26185,14 +26383,14 @@ msgstr "" #: src/tui/hooks.md:161 msgid "" "The `s` argument is the raw byte chunk as a string. ANSI escape sequences " -"like arrow keys arrive as a single chunk (`\\x1b[A`, `\\x1b[B`, `\\x1b[C`, `" -"\\x1b[D`); printable characters as one byte; control codes (Ctrl+C, Tab, " +"like arrow keys arrive as a single chunk (`\\x1b[A`, `\\x1b[B`, `\\x1b[C`, " +"`\\x1b[D`); printable characters as one byte; control codes (Ctrl+C, Tab, " "Enter, Backspace) as their literal byte." msgstr "" "Das Argument `s` ist der rohe Byte-Chunk als String. ANSI-Escape-Sequenzen " -"wie Pfeiltasten kommen als einzelner Chunk an (`\\x1b[A`, `\\x1b[B`, `" -"\\x1b[C`, `\\x1b[D`); druckbare Zeichen als ein Byte; Steuerzeichen (Ctrl+C, " -"Tab, Enter, Backspace) als ihr wörtliches Byte." +"wie Pfeiltasten kommen als einzelner Chunk an (`\\x1b[A`, `\\x1b[B`, " +"`\\x1b[C`, `\\x1b[D`); druckbare Zeichen als ein Byte; Steuerzeichen " +"(Ctrl+C, Tab, Enter, Backspace) als ihr wörtliches Byte." #: src/tui/hooks.md:163 msgid "" @@ -26769,10 +26967,10 @@ msgid "" "Ctrl+C (or whatever exit key the program defines), and restores everything " "cleanly on exit. Your scrollback is untouched." msgstr "" -"Das Binary öffnet den Alternativbildschirm, übernimmt das Terminal, bis Ctrl" -"+C gedrückt wird (oder welche Exit-Taste auch immer das Programm definiert), " -"und stellt beim Beenden alles sauber wieder her. Der Scrollback-Puffer " -"bleibt unberührt." +"Das Binary öffnet den Alternativbildschirm, übernimmt das Terminal, bis " +"Ctrl+C gedrückt wird (oder welche Exit-Taste auch immer das Programm " +"definiert), und stellt beim Beenden alles sauber wieder her. Der Scrollback-" +"Puffer bleibt unberührt." #: src/tui/examples.md:205 msgid "" @@ -26829,7 +27027,7 @@ msgstr "Target-Flag" #: src/platforms/overview.md:7 src/platforms/macos.md:20 #: src/platforms/ios.md:46 src/platforms/tvos.md:46 -#: src/platforms/watchos.md:133 src/platforms/android.md:20 +#: src/platforms/watchos.md:133 src/platforms/android.md:25 #: src/platforms/wearos.md:95 src/platforms/windows.md:45 #: src/platforms/linux.md:33 msgid "UI Toolkit" @@ -27190,7 +27388,7 @@ msgid "Perry maps UI widgets to AppKit controls:" msgstr "Perry bildet UI-Widgets auf AppKit-Steuerelemente ab:" #: src/platforms/macos.md:24 src/platforms/ios.md:50 src/platforms/tvos.md:50 -#: src/platforms/watchos.md:137 src/platforms/android.md:24 +#: src/platforms/watchos.md:137 src/platforms/android.md:29 #: src/platforms/windows.md:49 src/platforms/linux.md:37 #: src/platforms/wasm.md:55 msgid "Perry Widget" @@ -27221,7 +27419,7 @@ msgid "NSPopUpButton" msgstr "NSPopUpButton" #: src/platforms/macos.md:33 src/platforms/ios.md:59 src/platforms/tvos.md:58 -#: src/platforms/watchos.md:148 src/platforms/android.md:33 +#: src/platforms/watchos.md:148 src/platforms/android.md:38 #: src/platforms/windows.md:59 src/platforms/linux.md:47 #: src/widgets/components.md:80 msgid "Image" @@ -27799,7 +27997,7 @@ msgstr "" msgid "See [Widgets (WidgetKit)](../widgets/overview.md) for details." msgstr "Siehe [Widgets (WidgetKit)](../widgets/overview.md) für Details." -#: src/platforms/ios.md:162 src/platforms/android.md:51 +#: src/platforms/ios.md:162 src/platforms/android.md:56 msgid "Splash Screen" msgstr "Splash-Screen" @@ -27821,7 +28019,7 @@ msgstr "" "Das Bild wird bei 128x128pt mit `scaleAspectFit` zentriert. Sie können für " "volle Kontrolle ein benutzerdefiniertes Storyboard bereitstellen:" -#: src/platforms/ios.md:189 src/platforms/android.md:83 +#: src/platforms/ios.md:189 src/platforms/android.md:88 msgid "" "See [Project Configuration](../getting-started/project-config.md#splash) for " "the full config reference." @@ -27900,14 +28098,14 @@ msgid "[Widgets (WidgetKit)](../widgets/overview.md) — iOS home screen widgets msgstr "[Widgets (WidgetKit)](../widgets/overview.md) — iOS-Homescreen-Widgets" #: src/platforms/ios.md:210 src/platforms/tvos.md:184 -#: src/platforms/watchos.md:321 src/platforms/android.md:95 +#: src/platforms/watchos.md:321 src/platforms/android.md:100 #: src/platforms/windows.md:146 src/platforms/linux.md:86 #: src/platforms/wasm.md:193 msgid "[Platform Overview](overview.md) — All platforms" msgstr "[Plattform-Überblick](overview.md) — Alle Plattformen" #: src/platforms/ios.md:211 src/platforms/watchos.md:322 -#: src/platforms/android.md:96 src/platforms/windows.md:147 +#: src/platforms/android.md:101 src/platforms/windows.md:147 #: src/platforms/linux.md:87 src/platforms/wasm.md:194 msgid "[UI Overview](../ui/overview.md) — UI system" msgstr "[UI-Überblick](../ui/overview.md) — UI-System" @@ -28720,7 +28918,7 @@ msgid "Build environment variables" msgstr "Umgebungsvariablen erstellen" #: src/platforms/watchos.md:82 src/container/overview.md:112 -#: src/cli/flags.md:397 src/cli/flags.md:431 src/cli/perry-toml.md:518 +#: src/cli/flags.md:399 src/cli/flags.md:435 src/cli/perry-toml.md:518 #: src/cli/perry-toml.md:530 src/cli/perry-toml.md:540 msgid "Variable" msgstr "Variable" @@ -28916,7 +29114,7 @@ msgstr "Liste" msgid "Maps to List on watchOS" msgstr "Wird auf watchOS auf List abgebildet" -#: src/platforms/watchos.md:153 src/platforms/android.md:39 +#: src/platforms/watchos.md:153 src/platforms/android.md:44 #: src/platforms/linux.md:53 msgid "NavigationStack" msgstr "NavigationStack" @@ -29367,7 +29565,7 @@ msgstr "" msgid "So there are exactly two valid shapes:" msgstr "Es gibt also genau zwei gültige Formen:" -#: src/platforms/watchos-app-store.md:17 src/contributing/building.md:27 +#: src/platforms/watchos-app-store.md:17 src/contributing/building.md:29 msgid "Build" msgstr "Build" @@ -29648,91 +29846,99 @@ msgstr "Android SDK" msgid "Rust Android targets:" msgstr "Rust Android-Targets:" -#: src/platforms/android.md:22 +#: src/platforms/android.md:20 +msgid "" +"Local Android and Wear OS runs extract the Gradle project and Kotlin/Java " +"bridge from the Perry executable. Release installs do not need a Perry " +"source checkout or `PERRY_WORKSPACE_ROOT` to obtain this template. The local " +"build still requires the Android SDK, Gradle, and Java toolchain." +msgstr "" + +#: src/platforms/android.md:27 msgid "Perry maps UI widgets to Android views via JNI:" msgstr "Perry bildet UI-Widgets über JNI auf Android-Views ab:" -#: src/platforms/android.md:24 +#: src/platforms/android.md:29 msgid "Android Class" msgstr "Android-Klasse" -#: src/platforms/android.md:26 +#: src/platforms/android.md:31 msgid "TextView" msgstr "TextView" -#: src/platforms/android.md:28 +#: src/platforms/android.md:33 msgid "EditText" msgstr "EditText" -#: src/platforms/android.md:29 +#: src/platforms/android.md:34 msgid "EditText (ES_PASSWORD)" msgstr "EditText (ES_PASSWORD)" -#: src/platforms/android.md:30 +#: src/platforms/android.md:35 msgid "Switch" msgstr "Switch" -#: src/platforms/android.md:31 +#: src/platforms/android.md:36 msgid "SeekBar" msgstr "SeekBar" -#: src/platforms/android.md:32 +#: src/platforms/android.md:37 msgid "Spinner + ArrayAdapter" msgstr "Spinner + ArrayAdapter" -#: src/platforms/android.md:33 +#: src/platforms/android.md:38 msgid "ImageView" msgstr "ImageView" -#: src/platforms/android.md:34 +#: src/platforms/android.md:39 msgid "LinearLayout (vertical)" msgstr "LinearLayout (vertikal)" -#: src/platforms/android.md:35 +#: src/platforms/android.md:40 msgid "LinearLayout (horizontal)" msgstr "LinearLayout (horizontal)" -#: src/platforms/android.md:36 src/platforms/android.md:39 +#: src/platforms/android.md:41 src/platforms/android.md:44 msgid "FrameLayout" msgstr "FrameLayout" -#: src/platforms/android.md:38 +#: src/platforms/android.md:43 msgid "Canvas + Bitmap" msgstr "Canvas + Bitmap" -#: src/platforms/android.md:41 +#: src/platforms/android.md:46 msgid "Android-Specific APIs" msgstr "Android-spezifische APIs" -#: src/platforms/android.md:43 +#: src/platforms/android.md:48 msgid "**Dark mode**: `Configuration.uiMode` detection" msgstr "**Dark Mode**: `Configuration.uiMode`-Erkennung" -#: src/platforms/android.md:44 +#: src/platforms/android.md:49 msgid "**Preferences**: SharedPreferences" msgstr "**Einstellungen**: SharedPreferences" -#: src/platforms/android.md:45 +#: src/platforms/android.md:50 msgid "**Keychain**: Android Keystore" msgstr "**Keychain**: Android Keystore" -#: src/platforms/android.md:46 +#: src/platforms/android.md:51 msgid "**Notifications**: NotificationManager" msgstr "**Benachrichtigungen**: NotificationManager" -#: src/platforms/android.md:47 +#: src/platforms/android.md:52 msgid "**Open URL**: `Intent.ACTION_VIEW`" msgstr "**URL öffnen**: `Intent.ACTION_VIEW`" -#: src/platforms/android.md:48 +#: src/platforms/android.md:53 msgid "**Alerts**: `PerryBridge.showAlert`" msgstr "**Alerts**: `PerryBridge.showAlert`" -#: src/platforms/android.md:49 +#: src/platforms/android.md:54 msgid "**Sheets**: Dialog (modal)" msgstr "**Sheets**: Dialog (modal)" -#: src/platforms/android.md:53 +#: src/platforms/android.md:58 msgid "" "Perry's Android template includes a splash theme (`Theme.Perry.Splash`) that " "displays a `windowBackground` drawable during cold start. Configure it via " @@ -29742,7 +29948,7 @@ msgstr "" "während des Kaltstarts ein `windowBackground`-Drawable anzeigt. " "Konfigurieren Sie es via `perry.splash` in `package.json`:" -#: src/platforms/android.md:66 +#: src/platforms/android.md:71 msgid "" "The image is centered via a `layer-list` drawable with a solid background " "color. The activity switches to the normal theme in `onCreate` before " @@ -29753,33 +29959,33 @@ msgstr "" "Inflate des Layouts auf das normale Theme, sodass der Splash verschwindet, " "sobald die App bereit ist." -#: src/platforms/android.md:68 +#: src/platforms/android.md:73 msgid "For full control, provide custom drawable and theme XML files:" msgstr "" "Für volle Kontrolle stellen Sie benutzerdefinierte Drawable- und Theme-XML-" "Dateien bereit:" -#: src/platforms/android.md:85 +#: src/platforms/android.md:90 msgid "Differences from Desktop" msgstr "Unterschiede zum Desktop" -#: src/platforms/android.md:87 +#: src/platforms/android.md:92 msgid "**Touch-only**: No hover events, no right-click context menus" msgstr "**Nur Touch**: Keine Hover-Events, keine Rechtsklick-Kontextmenüs" -#: src/platforms/android.md:88 +#: src/platforms/android.md:93 msgid "**Single window**: Multi-window maps to Dialog views" msgstr "**Einzelnes Fenster**: Multi-Window wird auf Dialog-Views abgebildet" -#: src/platforms/android.md:89 +#: src/platforms/android.md:94 msgid "**Toolbar**: Horizontal LinearLayout" msgstr "**Toolbar**: Horizontales LinearLayout" -#: src/platforms/android.md:90 +#: src/platforms/android.md:95 msgid "**Font**: Typeface-based font family support" msgstr "**Schrift**: Typeface-basierte Schriftfamilien-Unterstützung" -#: src/platforms/android.md:94 +#: src/platforms/android.md:99 msgid "[Wear OS](wearos.md) — full watch apps on the same Android backend" msgstr "" "[Wear OS](wearos.md) — volle Überwachung apps auf der gleichen Android " @@ -30965,13 +31171,13 @@ msgstr "" #: src/platforms/windows.md:19 msgid "" -"`perry setup windows` downloads ~700 MB (unpacks to ~1.5 GB) at `" -"%LOCALAPPDATA%\\perry\\windows-sdk` after prompting you to accept the " +"`perry setup windows` downloads ~700 MB (unpacks to ~1.5 GB) at " +"`%LOCALAPPDATA%\\perry\\windows-sdk` after prompting you to accept the " "Microsoft redistributable license. Pass `--accept-license` to skip the " "prompt in CI. Partial downloads resume safely on re-run." msgstr "" -"`perry setup windows` lädt ~700 MB herunter (entpackt auf ~1,5 GB) nach `" -"%LOCALAPPDATA%\\perry\\windows-sdk`, nachdem Sie aufgefordert werden, die " +"`perry setup windows` lädt ~700 MB herunter (entpackt auf ~1,5 GB) nach " +"`%LOCALAPPDATA%\\perry\\windows-sdk`, nachdem Sie aufgefordert werden, die " "Microsoft-Redistributable-Lizenz zu akzeptieren. Übergeben Sie `--accept-" "license`, um den Prompt in CI zu überspringen. Teilweise Downloads werden " "bei einem erneuten Lauf sicher fortgesetzt." @@ -31180,15 +31386,15 @@ msgstr "`LNK1181: cannot open input file 'user32.lib'`" #: src/platforms/windows.md:115 msgid "" "The linker couldn't find the Windows SDK libraries. Perry probes the " -"registry (`KitsRoot10`) and the standard `Windows Kits\\10\\Lib\\\\um" -"\\x64` install paths; when the probe fails it prints a warning listing the " -"paths it tried. Fixes, in order of preference:" +"registry (`KitsRoot10`) and the standard `Windows " +"Kits\\10\\Lib\\\\um\\x64` install paths; when the probe fails it prints " +"a warning listing the paths it tried. Fixes, in order of preference:" msgstr "" "Der Linker konnte die Windows SDK-Bibliotheken nicht finden. Perry ertastert " -"die Registry (`KitsRoot10`) und die Standard-`Windows Kits\\10\\Lib\\" -"\\um\\x64`-Installationspfade; wenn die Sonde fehlschlägt, gibt sie eine " -"Warnung aus, die die von ihr ausprobierten Pfade auflistet. Befestigt in der " -"Reihenfolge der Präferenz:" +"die Registry (`KitsRoot10`) und die Standard-`Windows " +"Kits\\10\\Lib\\\\um\\x64`-Installationspfade; wenn die Sonde " +"fehlschlägt, gibt sie eine Warnung aus, die die von ihr ausprobierten Pfade " +"auflistet. Befestigt in der Reihenfolge der Präferenz:" #: src/platforms/windows.md:117 msgid "" @@ -32854,141 +33060,137 @@ msgstr "" "**Brötchen: Sqlit** / **Knoten:Sqlite** / **besserer sqlit3** — SQLite, " "unterstützt durch die native Perry-Engine" -#: src/stdlib/overview.md:40 -msgid "**mongodb** — MongoDB client" -msgstr "**mongodb** — MongoDB-Client" - -#: src/stdlib/overview.md:43 +#: src/stdlib/overview.md:42 msgid "**bcrypt** — Password hashing" msgstr "**bcrypt** — Passwort-Hashing" -#: src/stdlib/overview.md:44 +#: src/stdlib/overview.md:43 msgid "**argon2** — Password hashing (Argon2)" msgstr "**argon2** — Passwort-Hashing (Argon2)" -#: src/stdlib/overview.md:45 +#: src/stdlib/overview.md:44 msgid "**jsonwebtoken** — JWT signing/verification" msgstr "**jsonwebtoken** — JWT-Signierung/-Verifizierung" -#: src/stdlib/overview.md:46 +#: src/stdlib/overview.md:45 msgid "**crypto** — Node.js crypto module" msgstr "**crypto** — Node.js-Crypto-Modul" -#: src/stdlib/overview.md:47 +#: src/stdlib/overview.md:46 msgid "**ethers** — Ethereum library" msgstr "**ethers** — Ethereum-Bibliothek" -#: src/stdlib/overview.md:50 +#: src/stdlib/overview.md:49 msgid "**lodash** — Utility functions" msgstr "**lodash** — Utility-Funktionen" -#: src/stdlib/overview.md:51 +#: src/stdlib/overview.md:50 msgid "**dayjs** / **moment** — Date manipulation" msgstr "**dayjs** / **moment** — Datums-Manipulation" -#: src/stdlib/overview.md:52 +#: src/stdlib/overview.md:51 msgid "**uuid** — UUID generation" msgstr "**uuid** — UUID-Generierung" -#: src/stdlib/overview.md:53 +#: src/stdlib/overview.md:52 msgid "**nanoid** — ID generation" msgstr "**nanoid** — ID-Generierung" -#: src/stdlib/overview.md:54 +#: src/stdlib/overview.md:53 msgid "**validator** — String validation" msgstr "**validator** — String-Validierung" -#: src/stdlib/overview.md:57 +#: src/stdlib/overview.md:56 msgid "**sharp** — Image processing" msgstr "**sharp** — Bildverarbeitung" -#: src/stdlib/overview.md:58 +#: src/stdlib/overview.md:57 msgid "**cheerio** — HTML parsing" msgstr "**cheerio** — HTML-Parsing" -#: src/stdlib/overview.md:59 +#: src/stdlib/overview.md:58 msgid "**nodemailer** — Email sending" msgstr "**nodemailer** — E-Mail-Versand" -#: src/stdlib/overview.md:60 +#: src/stdlib/overview.md:59 msgid "**zlib** — Compression" msgstr "**zlib** — Komprimierung" -#: src/stdlib/overview.md:61 +#: src/stdlib/overview.md:60 msgid "**cron** — Job scheduling" msgstr "**cron** — Job-Scheduling" -#: src/stdlib/overview.md:62 +#: src/stdlib/overview.md:61 msgid "**worker_threads** — Background workers" msgstr "**worker_threads** — Hintergrund-Worker" -#: src/stdlib/overview.md:63 +#: src/stdlib/overview.md:62 msgid "**exponential-backoff** — Retry logic" msgstr "**exponential-backoff** — Retry-Logik" -#: src/stdlib/overview.md:64 +#: src/stdlib/overview.md:63 msgid "**async_hooks** — AsyncLocalStorage" msgstr "**async_hooks** — AsyncLocalStorage" -#: src/stdlib/overview.md:65 +#: src/stdlib/overview.md:64 msgid "**perry/container** — OCI container management" msgstr "**perry/container** — OCI-Container-Verwaltung" -#: src/stdlib/overview.md:66 +#: src/stdlib/overview.md:65 msgid "**perry/compose** — Multi-container orchestration" msgstr "**perry/compose** — Multi-Container-Orchestrierung" -#: src/stdlib/overview.md:68 +#: src/stdlib/overview.md:67 msgid "Node.js Built-ins" msgstr "Node.js-Built-ins" -#: src/stdlib/overview.md:69 +#: src/stdlib/overview.md:68 msgid "**fs** — File system" msgstr "**fs** — Dateisystem" -#: src/stdlib/overview.md:70 +#: src/stdlib/overview.md:69 msgid "**path** — Path manipulation" msgstr "**path** — Pfad-Manipulation" -#: src/stdlib/overview.md:71 +#: src/stdlib/overview.md:70 msgid "**child_process** — Process spawning" msgstr "**child_process** — Prozess-Spawnen" -#: src/stdlib/overview.md:72 +#: src/stdlib/overview.md:71 msgid "**crypto** — Cryptographic functions" msgstr "**crypto** — Kryptographische Funktionen" -#: src/stdlib/overview.md:76 +#: src/stdlib/overview.md:75 msgid "Perry automatically detects which stdlib features your code uses:" msgstr "" "Perry erkennt automatisch, welche stdlib-Funktionen Ihr Code verwendet:" -#: src/stdlib/overview.md:78 src/system/preferences.md:8 +#: src/stdlib/overview.md:77 src/system/preferences.md:8 #: src/system/keychain.md:8 msgid "Usage" msgstr "Verwendung" -#: src/stdlib/overview.md:80 +#: src/stdlib/overview.md:79 msgid "No stdlib imports" msgstr "Keine stdlib-Importe" -#: src/stdlib/overview.md:81 +#: src/stdlib/overview.md:80 msgid "fs + path only" msgstr "Nur fs + path" -#: src/stdlib/overview.md:82 +#: src/stdlib/overview.md:81 msgid "Full stdlib" msgstr "Vollständige stdlib" -#: src/stdlib/overview.md:84 +#: src/stdlib/overview.md:83 msgid "The compiler links only the required runtime components." msgstr "Der Compiler linkt nur die erforderlichen Laufzeitkomponenten." -#: src/stdlib/overview.md:86 src/stdlib/other.md:314 +#: src/stdlib/overview.md:85 src/stdlib/other.md:314 msgid "External native bindings" msgstr "Externe native Bindungen" -#: src/stdlib/overview.md:88 +#: src/stdlib/overview.md:87 msgid "" "Two packages live in their own GitHub repos with their own semver but plug " "into the same well-known registry:" @@ -32996,7 +33198,7 @@ msgstr "" "Zwei Pakete leben in ihren eigenen GitHub-Repos mit eigenem Semver, klinken " "sich aber in dieselbe Well-Known-Registry ein:" -#: src/stdlib/overview.md:91 +#: src/stdlib/overview.md:90 msgid "" "**`@perryts/tursodb`** — Turso (libSQL fork) database client. [PerryTS/" "tursodb-bindings](https://github.com/PerryTS/tursodb-bindings)." @@ -33004,7 +33206,7 @@ msgstr "" "**`@perryts/tursodb`** — Turso (libSQL-Fork)-Datenbank-Client. [PerryTS/" "tursodb-bindings](https://github.com/PerryTS/tursodb-bindings)." -#: src/stdlib/overview.md:93 +#: src/stdlib/overview.md:92 msgid "" "**`@perryts/iroh`** — Iroh peer-to-peer networking. [PerryTS/iroh-bindings]" "(https://github.com/PerryTS/iroh-bindings)." @@ -33012,30 +33214,30 @@ msgstr "" "**`@perryts/iroh`** — Iroh-Peer-to-Peer-Netzwerk. [PerryTS/iroh-bindings]" "(https://github.com/PerryTS/iroh-bindings)." -#: src/stdlib/overview.md:96 +#: src/stdlib/overview.md:95 msgid "Pure-TypeScript drivers compiled via `compilePackages` (no Rust):" msgstr "" "Reine TypeScript-Treiber, kompiliert über `compilePackages` (kein Rust):" -#: src/stdlib/overview.md:98 +#: src/stdlib/overview.md:97 msgid "**`@perryts/postgres`** — pg-compatible wire-protocol driver." msgstr "**`@perryts/postgres`** — pg-kompatibler Wire-Protokoll-Treiber." -#: src/stdlib/overview.md:99 +#: src/stdlib/overview.md:98 msgid "**`@perryts/mysql`** — mysql2-compatible wire-protocol driver." msgstr "**`@perryts/mysql`** — mysql2-kompatibler Wire-Protokoll-Treiber." -#: src/stdlib/overview.md:100 +#: src/stdlib/overview.md:99 msgid "**`@perryts/mongodb`** — mongodb-compatible wire-protocol driver." msgstr "**`@perryts/mongodb`** — mongodb-kompatibler Wire-Protokoll-Treiber." -#: src/stdlib/overview.md:101 +#: src/stdlib/overview.md:100 msgid "" "**`@perryts/redis`** — Redis / Valkey RESP2 + RESP3 wire-protocol driver." msgstr "" "**`@perryts/redis`** — Redis / Valkey RESP2 + RESP3 Wire-Protocol-Treiber." -#: src/stdlib/overview.md:103 +#: src/stdlib/overview.md:102 msgid "" "Each of these also runs unmodified on Node.js / Bun. See [Native Bindings — " "Overview](../native-libraries/overview.md) for the contract they follow." @@ -33044,11 +33246,11 @@ msgstr "" "— Überblick](../native-libraries/overview.md) für den Vertrag, dem sie " "folgen." -#: src/stdlib/overview.md:107 +#: src/stdlib/overview.md:106 msgid "compilePackages" msgstr "compilePackages" -#: src/stdlib/overview.md:109 +#: src/stdlib/overview.md:108 msgid "" "For npm packages not natively supported, you can compile pure TypeScript/" "JavaScript packages natively:" @@ -33056,7 +33258,7 @@ msgstr "" "Für npm-Pakete, die nicht nativ unterstützt werden, können Sie reine " "TypeScript-/JavaScript-Pakete nativ kompilieren:" -#: src/stdlib/overview.md:119 +#: src/stdlib/overview.md:118 msgid "" "See [Project Configuration](../getting-started/project-config.md) for " "details." @@ -33064,11 +33266,11 @@ msgstr "" "Siehe [Projektkonfiguration](../getting-started/project-config.md) für " "Details." -#: src/stdlib/overview.md:121 +#: src/stdlib/overview.md:120 msgid "JavaScript Runtime Fallback" msgstr "JavaScript-Runtime-Fallback" -#: src/stdlib/overview.md:123 +#: src/stdlib/overview.md:122 msgid "" "For packages that can't be compiled natively (native addons, dynamic code, " "etc.), Perry includes a QuickJS-based JavaScript runtime as a fallback. The " @@ -33079,7 +33281,7 @@ msgstr "" "Laufzeit als Fallback. Die genaue API-Oberfläche ist heute nur intern; der " "untenstehende Import ist illustrativ:" -#: src/stdlib/overview.md:125 +#: src/stdlib/overview.md:124 msgid "" "```text\n" "import { jsEval } from \"perry/jsruntime\"; // illustrative — not yet a " @@ -33091,31 +33293,31 @@ msgstr "" "public export\n" "```" -#: src/stdlib/overview.md:131 +#: src/stdlib/overview.md:130 msgid "[File System](fs.md)" msgstr "[Dateisystem](fs.md)" -#: src/stdlib/overview.md:132 src/stdlib/fs.md:100 +#: src/stdlib/overview.md:131 src/stdlib/fs.md:100 msgid "[HTTP & Networking](http.md)" msgstr "[HTTP & Netzwerk](http.md)" -#: src/stdlib/overview.md:133 src/stdlib/http.md:410 +#: src/stdlib/overview.md:132 src/stdlib/http.md:410 msgid "[Databases](database.md)" msgstr "[Datenbanken](database.md)" -#: src/stdlib/overview.md:134 src/stdlib/database.md:109 +#: src/stdlib/overview.md:133 src/stdlib/database.md:114 msgid "[Cryptography](crypto.md)" msgstr "[Kryptographie](crypto.md)" -#: src/stdlib/overview.md:135 +#: src/stdlib/overview.md:134 msgid "[Containers](container.md)" msgstr "[Container](container.md)" -#: src/stdlib/overview.md:136 src/stdlib/crypto.md:89 +#: src/stdlib/overview.md:135 src/stdlib/crypto.md:89 msgid "[Utilities](utilities.md)" msgstr "[Utilities](utilities.md)" -#: src/stdlib/overview.md:137 src/stdlib/utilities.md:98 +#: src/stdlib/overview.md:136 src/stdlib/utilities.md:98 msgid "[Other Modules](other.md)" msgstr "[Andere Module](other.md)" @@ -33322,7 +33524,7 @@ msgstr "" "Übergeben Sie Dateipfade über Thread-Grenzen hinweg und öffnen Sie Dateien " "innerhalb des Workers neu." -#: src/stdlib/fs.md:101 src/stdlib/http.md:411 src/stdlib/database.md:110 +#: src/stdlib/fs.md:101 src/stdlib/http.md:411 src/stdlib/database.md:115 #: src/stdlib/crypto.md:90 src/stdlib/utilities.md:99 src/stdlib/other.md:335 msgid "[Overview](overview.md) — All stdlib modules" msgstr "[Überblick](overview.md) — Alle stdlib-Module" @@ -33337,13 +33539,14 @@ msgid "Node.js compatibility — `node:http` / `node:https` / `node:http2`" msgstr "Node.js-Kompatibilität — `node:http` / `node:https` / `node:http2`" #: src/stdlib/http.md:7 +#, fuzzy msgid "" "Perry exposes a faithful subset of Node.js's stdlib HTTP server modules on " -"top of hyper + rustls + tokio-tungstenite. The whole shape — handler " -"signature, IncomingMessage / ServerResponse properties + methods, TLS opts, " -"ALPN-negotiated HTTP/2, WebSocket upgrade dispatch — works unmodified, so " -"unmodified Node servers (Express / Koa / Polka / hono via `@hono/node-" -"server` / etc.) compile and run natively (issue #577)." +"top of turnloop (Perry's event loop), rustls and turnloop-websocket. The " +"whole shape — handler signature, IncomingMessage / ServerResponse properties " +"+ methods, TLS opts, ALPN-negotiated HTTP/2, WebSocket upgrade dispatch — " +"works unmodified, so unmodified Node servers (Express / Koa / Polka / hono " +"via `@hono/node-server` / etc.) compile and run natively (issue #577)." msgstr "" "Perry exponiert eine treue Teilmenge der stdlib-HTTP-Server-Module von Node." "js auf Basis von hyper + rustls + tokio-tungstenite. Die gesamte Form — " @@ -33917,8 +34120,8 @@ msgid "" " const data = await response.json()\n" "\n" " // POST request\n" -" const result = await fetch(\"https://jsonplaceholder.typicode.com/posts" -"\", {\n" +" const result = await fetch(\"https://jsonplaceholder.typicode.com/" +"posts\", {\n" " method: \"POST\",\n" " headers: { \"Content-Type\": \"application/json\" },\n" " body: JSON.stringify({ title: \"hello\", body: \"world\", userId: " @@ -33937,8 +34140,8 @@ msgstr "" " const data = await response.json()\n" "\n" " // POST request\n" -" const result = await fetch(\"https://jsonplaceholder.typicode.com/posts" -"\", {\n" +" const result = await fetch(\"https://jsonplaceholder.typicode.com/" +"posts\", {\n" " method: \"POST\",\n" " headers: { \"Content-Type\": \"application/json\" },\n" " body: JSON.stringify({ title: \"hello\", body: \"world\", userId: " @@ -34049,11 +34252,11 @@ msgstr "" #: src/stdlib/http.md:333 msgid "" "For manual routing, create `new WebSocketServer({ noServer: true })` and " -"call `wss.handleUpgrade(req, socket, head, (ws, req) => wss.emit(\"connection" -"\", ws, req))` from the HTTP server's `upgrade` listener. The callback runs " -"once; it controls whether the connection event is emitted. The native HTTP " -"transport performs the handshake before dispatching `upgrade`, as described " -"above." +"call `wss.handleUpgrade(req, socket, head, (ws, req) => wss." +"emit(\"connection\", ws, req))` from the HTTP server's `upgrade` listener. " +"The callback runs once; it controls whether the connection event is emitted. " +"The native HTTP transport performs the handshake before dispatching " +"`upgrade`, as described above." msgstr "" #: src/stdlib/http.md:339 @@ -34434,6 +34637,14 @@ msgstr "MongoDB" #: src/stdlib/database.md:72 msgid "" +"`mongodb` has no native binding: `import { MongoClient } from \"mongodb\"` " +"compiles the real npm `mongodb` driver (and `bson`) from source, so the " +"whole driver API — cursors, `bulkWrite`, sessions and transactions, change " +"streams — behaves as it does on Node." +msgstr "" + +#: src/stdlib/database.md:77 +msgid "" "```typescript\n" "import { MongoClient } from \"mongodb\"\n" "\n" @@ -34444,8 +34655,8 @@ msgid "" " const db = client.db(\"mydb\")\n" " const users = db.collection(\"users\")\n" "\n" -" await users.insertOne({ name: \"Perry\", email: \"perry@example.com" -"\" })\n" +" await users.insertOne({ name: \"Perry\", email: \"perry@example." +"com\" })\n" " const user = await users.findOne({ name: \"Perry\" })\n" " console.log(user)\n" "\n" @@ -34463,8 +34674,8 @@ msgstr "" " const db = client.db(\"mydb\")\n" " const users = db.collection(\"users\")\n" "\n" -" await users.insertOne({ name: \"Perry\", email: \"perry@example.com" -"\" })\n" +" await users.insertOne({ name: \"Perry\", email: \"perry@example." +"com\" })\n" " const user = await users.findOne({ name: \"Perry\" })\n" " console.log(user)\n" "\n" @@ -34472,11 +34683,11 @@ msgstr "" "}\n" "```" -#: src/stdlib/database.md:90 +#: src/stdlib/database.md:95 msgid "Redis" msgstr "Redis" -#: src/stdlib/database.md:92 +#: src/stdlib/database.md:97 msgid "" "```typescript\n" "import Redis from \"ioredis\"\n" @@ -34619,8 +34830,8 @@ msgid "" "\n" "function cryptoExample(): void {\n" " // Hash\n" -" const hash = crypto.createHash(\"sha256\").update(\"data\").digest(\"hex" -"\")\n" +" const hash = crypto.createHash(\"sha256\").update(\"data\")." +"digest(\"hex\")\n" "\n" " // HMAC\n" " const hmac = crypto.createHmac(\"sha256\", \"secret\").update(\"data\")." @@ -34629,8 +34840,8 @@ msgid "" " // Random bytes\n" " const bytes = crypto.randomBytes(32)\n" "\n" -" console.log(`hash_len=${hash.length} hmac_len=${hmac.length} bytes_len=" -"${bytes.length}`)\n" +" console.log(`hash_len=${hash.length} hmac_len=${hmac.length} " +"bytes_len=${bytes.length}`)\n" "}\n" "```" msgstr "" @@ -34639,8 +34850,8 @@ msgstr "" "\n" "function cryptoExample(): void {\n" " // Hash\n" -" const hash = crypto.createHash(\"sha256\").update(\"data\").digest(\"hex" -"\")\n" +" const hash = crypto.createHash(\"sha256\").update(\"data\")." +"digest(\"hex\")\n" "\n" " // HMAC\n" " const hmac = crypto.createHmac(\"sha256\", \"secret\").update(\"data\")." @@ -34649,8 +34860,8 @@ msgstr "" " // Random bytes\n" " const bytes = crypto.randomBytes(32)\n" "\n" -" console.log(`hash_len=${hash.length} hmac_len=${hmac.length} bytes_len=" -"${bytes.length}`)\n" +" console.log(`hash_len=${hash.length} hmac_len=${hmac.length} " +"bytes_len=${bytes.length}`)\n" "}\n" "```" @@ -34909,9 +35120,9 @@ msgstr "" #: src/stdlib/utilities.md:13 #, fuzzy msgid "" -"Use named imports: the default-import receiver form (`import _ from \"lodash" -"\"; _.chunk(...)`) is not routed to these native signatures because it would " -"pass the module object as an extra receiver argument." +"Use named imports: the default-import receiver form (`import _ from " +"\"lodash\"; _.chunk(...)`) is not routed to these native signatures because " +"it would pass the module object as an extra receiver argument." msgstr "" "Benutze benannte Importe: Das Standard-Import-Empfänger-Formular (`import _ " "from \"lodash\"; _.chunk(...)`) wird nicht auf diese nativen Signaturen " @@ -36085,61 +36296,62 @@ msgid "[`module`](#module)" msgstr "[`module`](#module)" #: src/api/reference.md:57 -msgid "[`mongodb`](#mongodb)" -msgstr "[`mongodb`](#mongodb)" - -#: src/api/reference.md:58 msgid "[`net`](#net)" msgstr "[`net`](#net)" -#: src/api/reference.md:59 +#: src/api/reference.md:58 msgid "[`node-fetch`](#node-fetch)" msgstr "[`node-fetch`](#node-fetch)" -#: src/api/reference.md:60 +#: src/api/reference.md:59 msgid "[`node-pty`](#node-pty)" msgstr "[`node-pty`](#node-pty)" -#: src/api/reference.md:61 +#: src/api/reference.md:60 msgid "[`nodemailer`](#nodemailer)" msgstr "[`nodemailer`](#nodemailer)" -#: src/api/reference.md:62 +#: src/api/reference.md:61 msgid "[`os`](#os)" msgstr "[`os`](#os)" -#: src/api/reference.md:63 +#: src/api/reference.md:62 msgid "[`path`](#path)" msgstr "[`path`](#path)" -#: src/api/reference.md:64 +#: src/api/reference.md:63 msgid "[`path/posix`](#pathposix)" msgstr "[`path/posix`](#pathposix)" -#: src/api/reference.md:65 +#: src/api/reference.md:64 msgid "[`path/win32`](#pathwin32)" msgstr "[`path/win32`](#pathwin32)" -#: src/api/reference.md:66 +#: src/api/reference.md:65 msgid "[`perf_hooks`](#perf_hooks)" msgstr "[`perf_hooks`](#perf_hooks)" -#: src/api/reference.md:67 +#: src/api/reference.md:66 msgid "[`perry`](#perry)" msgstr "[`perry`](#perry)" -#: src/api/reference.md:68 +#: src/api/reference.md:67 msgid "[`perry/ads`](#perryads)" msgstr "[`perry/ads`](#perryads)" -#: src/api/reference.md:69 +#: src/api/reference.md:68 msgid "[`perry/audio`](#perryaudio)" msgstr "[`perry/audio`](#perryaudio)" -#: src/api/reference.md:70 +#: src/api/reference.md:69 msgid "[`perry/background`](#perrybackground)" msgstr "[`perry/background`](#perrybackground)" +#: src/api/reference.md:70 +#, fuzzy +msgid "[`perry/component`](#perrycomponent)" +msgstr "[`perry/compose`](#perrycompose)" + #: src/api/reference.md:71 msgid "[`perry/compose`](#perrycompose)" msgstr "[`perry/compose`](#perrycompose)" @@ -36350,25 +36562,25 @@ msgstr "`@lydell/node-pty`" #: src/api/reference.md:188 src/api/reference.md:194 src/api/reference.md:204 #: src/api/reference.md:216 src/api/reference.md:228 src/api/reference.md:262 #: src/api/reference.md:296 src/api/reference.md:324 src/api/reference.md:331 -#: src/api/reference.md:355 src/api/reference.md:377 src/api/reference.md:424 -#: src/api/reference.md:434 src/api/reference.md:454 src/api/reference.md:465 -#: src/api/reference.md:489 src/api/reference.md:511 src/api/reference.md:532 -#: src/api/reference.md:557 src/api/reference.md:838 src/api/reference.md:915 -#: src/api/reference.md:964 src/api/reference.md:983 src/api/reference.md:1092 -#: src/api/reference.md:1170 src/api/reference.md:1194 -#: src/api/reference.md:1210 src/api/reference.md:1262 -#: src/api/reference.md:1268 src/api/reference.md:1293 -#: src/api/reference.md:1398 src/api/reference.md:1457 -#: src/api/reference.md:1656 src/api/reference.md:1680 -#: src/api/reference.md:1732 src/api/reference.md:1763 -#: src/api/reference.md:1779 src/api/reference.md:1818 -#: src/api/reference.md:1857 src/api/reference.md:1884 -#: src/api/reference.md:2016 src/api/reference.md:2022 -#: src/api/reference.md:2032 src/api/reference.md:2040 -#: src/api/reference.md:2072 src/api/reference.md:2098 -#: src/api/reference.md:2124 src/api/reference.md:2160 -#: src/api/reference.md:2178 src/api/reference.md:2189 -#: src/api/reference.md:2201 src/api/reference.md:2230 +#: src/api/reference.md:355 src/api/reference.md:377 src/api/reference.md:426 +#: src/api/reference.md:436 src/api/reference.md:456 src/api/reference.md:467 +#: src/api/reference.md:491 src/api/reference.md:513 src/api/reference.md:534 +#: src/api/reference.md:559 src/api/reference.md:840 src/api/reference.md:917 +#: src/api/reference.md:966 src/api/reference.md:985 src/api/reference.md:1094 +#: src/api/reference.md:1172 src/api/reference.md:1196 +#: src/api/reference.md:1212 src/api/reference.md:1264 +#: src/api/reference.md:1270 src/api/reference.md:1295 +#: src/api/reference.md:1400 src/api/reference.md:1459 +#: src/api/reference.md:1658 src/api/reference.md:1682 +#: src/api/reference.md:1734 src/api/reference.md:1765 +#: src/api/reference.md:1781 src/api/reference.md:1820 +#: src/api/reference.md:1867 src/api/reference.md:2001 +#: src/api/reference.md:2007 src/api/reference.md:2017 +#: src/api/reference.md:2025 src/api/reference.md:2057 +#: src/api/reference.md:2083 src/api/reference.md:2109 +#: src/api/reference.md:2145 src/api/reference.md:2163 +#: src/api/reference.md:2174 src/api/reference.md:2186 +#: src/api/reference.md:2215 src/api/reference.md:2223 #: src/api/reference.md:2238 src/api/reference.md:2252 #: src/api/reference.md:2280 src/api/reference.md:2294 #: src/api/reference.md:2302 src/api/reference.md:2315 @@ -36396,26 +36608,26 @@ msgstr "`@lydell/node-pty`" msgid "Methods" msgstr "Methoden" -#: src/api/reference.md:128 src/api/reference.md:397 src/api/reference.md:426 -#: src/api/reference.md:519 src/api/reference.md:2024 src/api/reference.md:2450 +#: src/api/reference.md:128 src/api/reference.md:399 src/api/reference.md:428 +#: src/api/reference.md:521 src/api/reference.md:2009 src/api/reference.md:2450 msgid "`spawn` — module" msgstr "`spawn` — Modul" #: src/api/reference.md:130 src/api/reference.md:251 src/api/reference.md:285 -#: src/api/reference.md:317 src/api/reference.md:364 src/api/reference.md:409 -#: src/api/reference.md:428 src/api/reference.md:446 src/api/reference.md:482 -#: src/api/reference.md:522 src/api/reference.md:539 src/api/reference.md:586 -#: src/api/reference.md:902 src/api/reference.md:953 src/api/reference.md:973 -#: src/api/reference.md:1027 src/api/reference.md:1136 -#: src/api/reference.md:1186 src/api/reference.md:1243 -#: src/api/reference.md:1276 src/api/reference.md:1391 -#: src/api/reference.md:1436 src/api/reference.md:1641 -#: src/api/reference.md:1666 src/api/reference.md:1722 -#: src/api/reference.md:1751 src/api/reference.md:1773 -#: src/api/reference.md:1844 src/api/reference.md:2026 -#: src/api/reference.md:2063 src/api/reference.md:2088 -#: src/api/reference.md:2114 src/api/reference.md:2140 -#: src/api/reference.md:2170 src/api/reference.md:2183 +#: src/api/reference.md:317 src/api/reference.md:364 src/api/reference.md:411 +#: src/api/reference.md:430 src/api/reference.md:448 src/api/reference.md:484 +#: src/api/reference.md:524 src/api/reference.md:541 src/api/reference.md:588 +#: src/api/reference.md:904 src/api/reference.md:955 src/api/reference.md:975 +#: src/api/reference.md:1029 src/api/reference.md:1138 +#: src/api/reference.md:1188 src/api/reference.md:1245 +#: src/api/reference.md:1278 src/api/reference.md:1393 +#: src/api/reference.md:1438 src/api/reference.md:1643 +#: src/api/reference.md:1668 src/api/reference.md:1724 +#: src/api/reference.md:1753 src/api/reference.md:1775 +#: src/api/reference.md:1846 src/api/reference.md:2011 +#: src/api/reference.md:2048 src/api/reference.md:2073 +#: src/api/reference.md:2099 src/api/reference.md:2125 +#: src/api/reference.md:2155 src/api/reference.md:2168 #: src/api/reference.md:2365 src/api/reference.md:2685 #: src/api/reference.md:2769 src/api/reference.md:2812 #: src/api/reference.md:2830 src/api/reference.md:2893 @@ -36432,16 +36644,16 @@ msgstr "`spawn` — Modul" msgid "Properties" msgstr "Eigenschaften" -#: src/api/reference.md:132 src/api/reference.md:320 src/api/reference.md:430 -#: src/api/reference.md:524 src/api/reference.md:543 src/api/reference.md:823 -#: src/api/reference.md:955 src/api/reference.md:975 src/api/reference.md:1083 -#: src/api/reference.md:1162 src/api/reference.md:1247 -#: src/api/reference.md:1439 src/api/reference.md:1669 -#: src/api/reference.md:1755 src/api/reference.md:1775 -#: src/api/reference.md:1852 src/api/reference.md:2028 -#: src/api/reference.md:2067 src/api/reference.md:2090 -#: src/api/reference.md:2116 src/api/reference.md:2142 -#: src/api/reference.md:2173 src/api/reference.md:2814 +#: src/api/reference.md:132 src/api/reference.md:320 src/api/reference.md:432 +#: src/api/reference.md:526 src/api/reference.md:545 src/api/reference.md:825 +#: src/api/reference.md:957 src/api/reference.md:977 src/api/reference.md:1085 +#: src/api/reference.md:1164 src/api/reference.md:1249 +#: src/api/reference.md:1441 src/api/reference.md:1671 +#: src/api/reference.md:1757 src/api/reference.md:1777 +#: src/api/reference.md:1854 src/api/reference.md:2013 +#: src/api/reference.md:2052 src/api/reference.md:2075 +#: src/api/reference.md:2101 src/api/reference.md:2127 +#: src/api/reference.md:2158 src/api/reference.md:2814 #: src/api/reference.md:2832 src/api/reference.md:2898 #: src/api/reference.md:2912 src/api/reference.md:3102 #: src/api/reference.md:3137 src/api/reference.md:3208 @@ -36465,11 +36677,11 @@ msgstr "`getEventsSince` — Modul" #: src/api/reference.md:140 src/api/reference.md:148 src/api/reference.md:154 #: src/api/reference.md:160 src/api/reference.md:166 src/api/reference.md:172 #: src/api/reference.md:178 src/api/reference.md:184 src/api/reference.md:190 -#: src/api/reference.md:969 +#: src/api/reference.md:971 msgid "`subscribe` — module" msgstr "`subscribe` — Modul" -#: src/api/reference.md:141 src/api/reference.md:971 +#: src/api/reference.md:141 src/api/reference.md:973 msgid "`unsubscribe` — module" msgstr "`unsubscribe` — Modul" @@ -36562,11 +36774,11 @@ msgid "`use` — instance" msgstr "`use` — Instanz" #: src/api/reference.md:218 src/api/reference.md:327 src/api/reference.md:390 -#: src/api/reference.md:879 +#: src/api/reference.md:881 msgid "`hash` — module" msgstr "`hash` — Modul" -#: src/api/reference.md:219 src/api/reference.md:900 +#: src/api/reference.md:219 src/api/reference.md:902 msgid "`verify` — module" msgstr "`verify` — Modul" @@ -36591,7 +36803,7 @@ msgid "`deepStrictEqual` — module" msgstr "`deepStrictEqual` — Modul" #: src/api/reference.md:232 src/api/reference.md:266 src/api/reference.md:336 -#: src/api/reference.md:1264 src/api/reference.md:2018 +#: src/api/reference.md:1266 src/api/reference.md:2003 #: src/api/reference.md:2922 src/api/reference.md:3026 #: src/api/reference.md:3219 msgid "`default` — module" @@ -36729,7 +36941,7 @@ msgstr "`executionAsyncId` — Modul" msgid "`executionAsyncResource` — module" msgstr "`executionAsyncResource` — Modul" -#: src/api/reference.md:309 src/api/reference.md:1180 +#: src/api/reference.md:309 src/api/reference.md:1182 msgid "`exit` — instance" msgstr "`exit` — Instanz" @@ -36737,7 +36949,7 @@ msgstr "`exit` — Instanz" msgid "`getStore` — instance" msgstr "`getStore` — Instanz" -#: src/api/reference.md:311 src/api/reference.md:344 src/api/reference.md:1184 +#: src/api/reference.md:311 src/api/reference.md:344 src/api/reference.md:1186 #: src/api/reference.md:2990 msgid "`run` — instance" msgstr "`run` — Instanz" @@ -36770,9 +36982,8 @@ msgstr "`compare` — Modul" msgid "`all` — instance" msgstr "`all` — Instanz" -#: src/api/reference.md:334 src/api/reference.md:1859 src/api/reference.md:2840 -#: src/api/reference.md:2867 src/api/reference.md:2966 -#: src/api/reference.md:3696 +#: src/api/reference.md:334 src/api/reference.md:2840 src/api/reference.md:2867 +#: src/api/reference.md:2966 src/api/reference.md:3696 msgid "`close` — instance" msgstr "`close` — Instanz" @@ -36816,7 +37027,7 @@ msgstr "`transaction` — Instanz" msgid "`buffer`" msgstr "`buffer`" -#: src/api/reference.md:351 src/api/reference.md:1256 src/api/reference.md:2010 +#: src/api/reference.md:351 src/api/reference.md:1258 src/api/reference.md:1995 msgid "`Blob`" msgstr "`Blob`" @@ -36856,10 +37067,10 @@ msgstr "`transcode` — Modul" msgid "`INSPECT_MAX_BYTES`" msgstr "`INSPECT_MAX_BYTES`" -#: src/api/reference.md:367 src/api/reference.md:584 src/api/reference.md:905 -#: src/api/reference.md:1393 src/api/reference.md:1438 -#: src/api/reference.md:1668 src/api/reference.md:1851 -#: src/api/reference.md:2066 src/api/reference.md:2172 +#: src/api/reference.md:367 src/api/reference.md:586 src/api/reference.md:907 +#: src/api/reference.md:1395 src/api/reference.md:1440 +#: src/api/reference.md:1670 src/api/reference.md:1853 +#: src/api/reference.md:2051 src/api/reference.md:2157 #: src/api/reference.md:3002 src/api/reference.md:3612 #: src/api/reference.md:3786 msgid "`constants`" @@ -36906,8 +37117,8 @@ msgstr "`range` — Modul" msgid "`build` — module" msgstr "`bind` — Modul" -#: src/api/reference.md:384 src/api/reference.md:1658 src/api/reference.md:1861 -#: src/api/reference.md:1911 src/api/reference.md:3305 +#: src/api/reference.md:384 src/api/reference.md:1660 src/api/reference.md:1894 +#: src/api/reference.md:3305 msgid "`connect` — module" msgstr "`connect` — Modul" @@ -36964,3401 +37175,3415 @@ msgstr "`start` — Instanz _(Klasse: `GCProfiler`)_" msgid "`serve` — module" msgstr "`Server` — Modul" +#: src/api/reference.md:397 +#, fuzzy +msgid "`sleep` — module" +msgstr "`seek` — Modul" + #: src/api/reference.md:398 +#, fuzzy +msgid "`sleepSync` — module" +msgstr "`execSync` — Modul" + +#: src/api/reference.md:400 msgid "`stringWidth` — module" msgstr "`stringWidth` — Modul" -#: src/api/reference.md:399 +#: src/api/reference.md:401 #, fuzzy msgid "`stripANSI` — module" msgstr "`strict` — Modul" -#: src/api/reference.md:400 +#: src/api/reference.md:402 #, fuzzy msgid "`transform` — instance _(class: `Transpiler`)_" msgstr "`start` — Instanz _(Klasse: `GCProfiler`)_" -#: src/api/reference.md:401 +#: src/api/reference.md:403 #, fuzzy msgid "`transformSync` — instance _(class: `Transpiler`)_" msgstr "`transaction` — Instanz _(Klasse: `Database`)_" -#: src/api/reference.md:402 +#: src/api/reference.md:404 msgid "`unsupported` — module" msgstr "`unsupported` — Modul" -#: src/api/reference.md:403 +#: src/api/reference.md:405 #, fuzzy msgid "`which` — module" msgstr "`watch` — Modul" -#: src/api/reference.md:404 +#: src/api/reference.md:406 #, fuzzy msgid "`wrapAnsi` — module" msgstr "`warn` — Modul" -#: src/api/reference.md:405 src/api/reference.md:1384 +#: src/api/reference.md:407 src/api/reference.md:1386 msgid "`write` — module" msgstr "`write` — Modul" -#: src/api/reference.md:406 src/api/reference.md:3780 +#: src/api/reference.md:408 src/api/reference.md:3780 msgid "`zstdDecompress` — module" msgstr "`zstdDecompress` — Modul" -#: src/api/reference.md:407 src/api/reference.md:3781 +#: src/api/reference.md:409 src/api/reference.md:3781 msgid "`zstdDecompressSync` — module" msgstr "`zstdDecompressSync` — Modul" -#: src/api/reference.md:411 +#: src/api/reference.md:413 #, fuzzy msgid "`JSONL`" msgstr "JSON" -#: src/api/reference.md:412 +#: src/api/reference.md:414 msgid "`TOML`" msgstr "" -#: src/api/reference.md:413 +#: src/api/reference.md:415 msgid "`YAML`" msgstr "" -#: src/api/reference.md:414 +#: src/api/reference.md:416 msgid "`ant`" msgstr "" -#: src/api/reference.md:415 src/api/reference.md:2185 +#: src/api/reference.md:417 src/api/reference.md:2170 msgid "`isStandaloneExecutable`" msgstr "`isStandaloneExecutable`" -#: src/api/reference.md:416 +#: src/api/reference.md:418 #, fuzzy msgid "`semver`" msgstr "`server`" -#: src/api/reference.md:417 src/api/reference.md:2796 +#: src/api/reference.md:419 src/api/reference.md:2796 msgid "`stderr`" msgstr "`stderr`" -#: src/api/reference.md:418 src/api/reference.md:2797 +#: src/api/reference.md:420 src/api/reference.md:2797 msgid "`stdin`" msgstr "`stdin`" -#: src/api/reference.md:419 src/api/reference.md:2798 +#: src/api/reference.md:421 src/api/reference.md:2798 msgid "`stdout`" msgstr "`stdout`" -#: src/api/reference.md:420 src/api/reference.md:2800 src/api/reference.md:2816 +#: src/api/reference.md:422 src/api/reference.md:2800 src/api/reference.md:2816 #: src/updater/overview.md:109 src/cli/perry-toml.md:120 msgid "`version`" msgstr "`version`" -#: src/api/reference.md:422 +#: src/api/reference.md:424 #, fuzzy msgid "`bun-pty`" msgstr "`node-pty`" -#: src/api/reference.md:432 +#: src/api/reference.md:434 msgid "`bun:ffi`" msgstr "`bun:ffi`" -#: src/api/reference.md:436 +#: src/api/reference.md:438 msgid "`CFunction` — module" msgstr "`CFunction` — Modul" -#: src/api/reference.md:437 +#: src/api/reference.md:439 msgid "`CString` — module" msgstr "`CString` — Modul" -#: src/api/reference.md:438 +#: src/api/reference.md:440 msgid "`JSCallback` — module" msgstr "`JSCallback` — Modul" -#: src/api/reference.md:439 src/api/reference.md:1270 src/api/reference.md:2732 +#: src/api/reference.md:441 src/api/reference.md:1272 src/api/reference.md:2732 msgid "`dlopen` — module" msgstr "`dlopen` — Modul" -#: src/api/reference.md:440 +#: src/api/reference.md:442 msgid "`linkSymbols` — module" msgstr "`linkSymbols` — Modul" -#: src/api/reference.md:441 +#: src/api/reference.md:443 msgid "`ptr` — module" msgstr "`ptr` — Modul" -#: src/api/reference.md:442 src/api/reference.md:1272 +#: src/api/reference.md:444 src/api/reference.md:1274 msgid "`toArrayBuffer` — module" msgstr "`toArrayBuffer` — Modul" -#: src/api/reference.md:443 src/api/reference.md:1273 +#: src/api/reference.md:445 src/api/reference.md:1275 msgid "`toBuffer` — module" msgstr "`toBuffer` — Modul" -#: src/api/reference.md:444 +#: src/api/reference.md:446 msgid "`viewSource` — module" msgstr "`viewSource` — Modul" -#: src/api/reference.md:448 +#: src/api/reference.md:450 msgid "`FFIType`" msgstr "`FFIType`" -#: src/api/reference.md:449 +#: src/api/reference.md:451 msgid "`read`" msgstr "`read`" -#: src/api/reference.md:450 src/api/reference.md:1278 +#: src/api/reference.md:452 src/api/reference.md:1280 msgid "`suffix`" msgstr "`suffix`" -#: src/api/reference.md:452 +#: src/api/reference.md:454 #, fuzzy msgid "`bun:jsc`" msgstr "`bun`" -#: src/api/reference.md:456 +#: src/api/reference.md:458 #, fuzzy msgid "`heapStats` — module" msgstr "`State` — Modul" -#: src/api/reference.md:458 +#: src/api/reference.md:460 msgid "`bun:sqlite`" msgstr "`bun:sqlite`" -#: src/api/reference.md:462 +#: src/api/reference.md:464 msgid "`Database`" msgstr "`Database`" -#: src/api/reference.md:463 +#: src/api/reference.md:465 msgid "`Statement`" msgstr "`Statement`" -#: src/api/reference.md:467 +#: src/api/reference.md:469 msgid "`Database` — module" msgstr "`Database` — Modul" -#: src/api/reference.md:468 +#: src/api/reference.md:470 msgid "`all` — instance _(class: `Statement`)_" msgstr "`all` — Instanz _(Klasse: `Statement`)_" -#: src/api/reference.md:469 +#: src/api/reference.md:471 msgid "`close` — instance _(class: `Database`)_" msgstr "`close` — Instanz _(Klasse: `Database`)_" -#: src/api/reference.md:470 +#: src/api/reference.md:472 msgid "`finalize` — instance _(class: `Statement`)_" msgstr "`finalize` — Instanz _(Klasse: `Statement`)_" -#: src/api/reference.md:471 +#: src/api/reference.md:473 msgid "`get` — instance _(class: `Statement`)_" msgstr "`get` — Instanz _(Klasse: `Statement`)_" -#: src/api/reference.md:472 +#: src/api/reference.md:474 msgid "`loadExtension` — instance _(class: `Database`)_" msgstr "`loadExtension` — Instanz _(Klasse: `Database`)_" -#: src/api/reference.md:473 +#: src/api/reference.md:475 msgid "`prepare` — instance _(class: `Database`)_" msgstr "`prepare` — Instanz _(Klasse: `Database`)_" -#: src/api/reference.md:474 +#: src/api/reference.md:476 msgid "`query` — instance _(class: `Database`)_" msgstr "`query` — Instanz _(Klasse: `Database`)_" -#: src/api/reference.md:475 +#: src/api/reference.md:477 msgid "`run` — instance _(class: `Database`)_" msgstr "`run` — Instanz _(Klasse: `Database`)_" -#: src/api/reference.md:476 +#: src/api/reference.md:478 msgid "`run` — instance _(class: `Statement`)_" msgstr "`run` — Instanz _(Klasse: `Statement`)_" -#: src/api/reference.md:477 +#: src/api/reference.md:479 msgid "`safeIntegers` — instance _(class: `Statement`)_" msgstr "`safeIntegers` — Instanz _(Klasse: `Statement`)_" -#: src/api/reference.md:478 +#: src/api/reference.md:480 msgid "`serialize` — instance _(class: `Database`)_" msgstr "`serialize` — Instanz _(Klasse: `Database`)_" -#: src/api/reference.md:479 +#: src/api/reference.md:481 msgid "`transaction` — instance _(class: `Database`)_" msgstr "`transaction` — Instanz _(Klasse: `Database`)_" -#: src/api/reference.md:480 +#: src/api/reference.md:482 msgid "`values` — instance _(class: `Statement`)_" msgstr "`values` — Instanz _(Klasse: `Statement`)_" -#: src/api/reference.md:484 +#: src/api/reference.md:486 msgid "`filename`" msgstr "`filename`" -#: src/api/reference.md:485 +#: src/api/reference.md:487 msgid "`inTransaction`" msgstr "`inTransaction`" -#: src/api/reference.md:491 +#: src/api/reference.md:493 msgid "`attr` — instance" msgstr "`attr` — Instanz" -#: src/api/reference.md:492 +#: src/api/reference.md:494 msgid "`children` — instance" msgstr "`children` — Instanz" -#: src/api/reference.md:493 +#: src/api/reference.md:495 msgid "`eq` — instance" msgstr "`eq` — Instanz" -#: src/api/reference.md:494 src/api/reference.md:1867 +#: src/api/reference.md:496 msgid "`find` — instance" msgstr "`find` — Instanz" -#: src/api/reference.md:495 +#: src/api/reference.md:497 msgid "`first` — instance" msgstr "`first` — Instanz" -#: src/api/reference.md:496 +#: src/api/reference.md:498 msgid "`hasClass` — instance" msgstr "`hasClass` — Instanz" -#: src/api/reference.md:497 +#: src/api/reference.md:499 msgid "`html` — instance" msgstr "`html` — Instanz" -#: src/api/reference.md:498 +#: src/api/reference.md:500 msgid "`last` — instance" msgstr "`last` — Instanz" -#: src/api/reference.md:499 +#: src/api/reference.md:501 msgid "`length` — instance" msgstr "`length` — Instanz" -#: src/api/reference.md:500 +#: src/api/reference.md:502 msgid "`load` — module" msgstr "`load` — Modul" -#: src/api/reference.md:501 +#: src/api/reference.md:503 msgid "`parent` — instance" msgstr "`parent` — Instanz" -#: src/api/reference.md:502 +#: src/api/reference.md:504 msgid "`select` — instance" msgstr "`select` — Instanz" -#: src/api/reference.md:503 +#: src/api/reference.md:505 msgid "`text` — instance" msgstr "`text` — Instanz" -#: src/api/reference.md:505 +#: src/api/reference.md:507 msgid "`child_process`" msgstr "`child_process`" -#: src/api/reference.md:509 +#: src/api/reference.md:511 msgid "`ChildProcess`" msgstr "`ChildProcess`" -#: src/api/reference.md:513 +#: src/api/reference.md:515 msgid "`_forkChild` — module" msgstr "`_forkChild` — Modul" -#: src/api/reference.md:514 src/api/reference.md:2242 src/api/reference.md:2259 +#: src/api/reference.md:516 src/api/reference.md:2242 src/api/reference.md:2259 #: src/api/reference.md:2284 msgid "`exec` — module" msgstr "`exec` — Modul" -#: src/api/reference.md:515 +#: src/api/reference.md:517 msgid "`execFile` — module" msgstr "`execFile` — Modul" -#: src/api/reference.md:516 +#: src/api/reference.md:518 msgid "`execFileSync` — module" msgstr "`execFileSync` — Modul" -#: src/api/reference.md:517 +#: src/api/reference.md:519 msgid "`execSync` — module" msgstr "`execSync` — Modul" -#: src/api/reference.md:518 src/api/reference.md:535 +#: src/api/reference.md:520 src/api/reference.md:537 msgid "`fork` — module" msgstr "`fork` — Modul" -#: src/api/reference.md:520 +#: src/api/reference.md:522 msgid "`spawnSync` — module" msgstr "`spawnSync` — Modul" -#: src/api/reference.md:526 +#: src/api/reference.md:528 msgid "`cluster`" msgstr "`cluster`" -#: src/api/reference.md:534 +#: src/api/reference.md:536 msgid "`disconnect` — module" msgstr "`disconnect` — Modul" -#: src/api/reference.md:536 +#: src/api/reference.md:538 msgid "`setupMaster` — module" msgstr "`setupMaster` — Modul" -#: src/api/reference.md:537 +#: src/api/reference.md:539 msgid "`setupPrimary` — module" msgstr "`setupPrimary` — Modul" -#: src/api/reference.md:541 +#: src/api/reference.md:543 msgid "`SCHED_NONE`" msgstr "`SCHED_NONE`" -#: src/api/reference.md:542 +#: src/api/reference.md:544 msgid "`SCHED_RR`" msgstr "`SCHED_RR`" -#: src/api/reference.md:544 +#: src/api/reference.md:546 msgid "`isMaster`" msgstr "`isMaster`" -#: src/api/reference.md:545 +#: src/api/reference.md:547 msgid "`isPrimary`" msgstr "`isPrimary`" -#: src/api/reference.md:546 +#: src/api/reference.md:548 msgid "`isWorker`" msgstr "`isWorker`" -#: src/api/reference.md:547 +#: src/api/reference.md:549 msgid "`schedulingPolicy`" msgstr "`schedulingPolicy`" -#: src/api/reference.md:548 +#: src/api/reference.md:550 msgid "`settings`" msgstr "`settings`" -#: src/api/reference.md:549 +#: src/api/reference.md:551 msgid "`workers`" msgstr "`workers`" -#: src/api/reference.md:551 src/api/reference.md:1754 +#: src/api/reference.md:553 src/api/reference.md:1756 msgid "`console`" msgstr "`console`" -#: src/api/reference.md:555 +#: src/api/reference.md:557 msgid "`Console`" msgstr "`Console`" -#: src/api/reference.md:559 +#: src/api/reference.md:561 msgid "`assert` — module" msgstr "`assert` — Modul" -#: src/api/reference.md:560 +#: src/api/reference.md:562 msgid "`clear` — module" msgstr "`clear` — Modul" -#: src/api/reference.md:561 +#: src/api/reference.md:563 msgid "`context` — module" msgstr "`context` — Modul" -#: src/api/reference.md:562 +#: src/api/reference.md:564 msgid "`count` — module" msgstr "`count` — Modul" -#: src/api/reference.md:563 +#: src/api/reference.md:565 msgid "`countReset` — module" msgstr "`countReset` — Modul" -#: src/api/reference.md:564 +#: src/api/reference.md:566 msgid "`createTask` — module" msgstr "`createTask` — Modul" -#: src/api/reference.md:565 src/api/reference.md:3182 src/api/reference.md:3444 +#: src/api/reference.md:567 src/api/reference.md:3182 src/api/reference.md:3444 msgid "`debug` — module" msgstr "`debug` — Modul" -#: src/api/reference.md:566 +#: src/api/reference.md:568 msgid "`dir` — module" msgstr "`dir` — Modul" -#: src/api/reference.md:567 +#: src/api/reference.md:569 msgid "`dirxml` — module" msgstr "`dirxml` — Modul" -#: src/api/reference.md:568 +#: src/api/reference.md:570 msgid "`error` — module" msgstr "`error` — Modul" -#: src/api/reference.md:569 +#: src/api/reference.md:571 msgid "`group` — module" msgstr "`group` — Modul" -#: src/api/reference.md:570 +#: src/api/reference.md:572 msgid "`groupCollapsed` — module" msgstr "`groupCollapsed` — Modul" -#: src/api/reference.md:571 +#: src/api/reference.md:573 msgid "`groupEnd` — module" msgstr "`groupEnd` — Modul" -#: src/api/reference.md:572 +#: src/api/reference.md:574 msgid "`info` — module" msgstr "`info` — Modul" -#: src/api/reference.md:573 +#: src/api/reference.md:575 msgid "`log` — module" msgstr "`log` — Modul" -#: src/api/reference.md:574 +#: src/api/reference.md:576 msgid "`profile` — module" msgstr "`profile` — Modul" -#: src/api/reference.md:575 +#: src/api/reference.md:577 msgid "`profileEnd` — module" msgstr "`profileEnd` — Modul" -#: src/api/reference.md:576 +#: src/api/reference.md:578 msgid "`table` — module" msgstr "`table` — Modul" -#: src/api/reference.md:577 +#: src/api/reference.md:579 msgid "`time` — module" msgstr "`time` — Modul" -#: src/api/reference.md:578 +#: src/api/reference.md:580 msgid "`timeEnd` — module" msgstr "`timeEnd` — Modul" -#: src/api/reference.md:579 +#: src/api/reference.md:581 msgid "`timeLog` — module" msgstr "`timeLog` — Modul" -#: src/api/reference.md:580 +#: src/api/reference.md:582 msgid "`timeStamp` — module" msgstr "`timeStamp` — Modul" -#: src/api/reference.md:581 +#: src/api/reference.md:583 msgid "`trace` — module" msgstr "`trace` — Modul" -#: src/api/reference.md:582 +#: src/api/reference.md:584 msgid "`warn` — module" msgstr "`warn` — Modul" -#: src/api/reference.md:588 +#: src/api/reference.md:590 msgid "`COPYFILE_EXCL`" msgstr "`COPYFILE_EXCL`" -#: src/api/reference.md:589 +#: src/api/reference.md:591 msgid "`COPYFILE_FICLONE`" msgstr "`COPYFILE_FICLONE`" -#: src/api/reference.md:590 +#: src/api/reference.md:592 msgid "`COPYFILE_FICLONE_FORCE`" msgstr "`COPYFILE_FICLONE_FORCE`" -#: src/api/reference.md:591 +#: src/api/reference.md:593 msgid "`DH_CHECK_P_NOT_PRIME`" msgstr "`DH_CHECK_P_NOT_PRIME`" -#: src/api/reference.md:592 +#: src/api/reference.md:594 msgid "`DH_CHECK_P_NOT_SAFE_PRIME`" msgstr "`DH_CHECK_P_NOT_SAFE_PRIME`" -#: src/api/reference.md:593 +#: src/api/reference.md:595 msgid "`DH_NOT_SUITABLE_GENERATOR`" msgstr "`DH_NOT_SUITABLE_GENERATOR`" -#: src/api/reference.md:594 +#: src/api/reference.md:596 msgid "`DH_UNABLE_TO_CHECK_GENERATOR`" msgstr "`DH_UNABLE_TO_CHECK_GENERATOR`" -#: src/api/reference.md:595 +#: src/api/reference.md:597 msgid "`E2BIG`" msgstr "`E2BIG`" -#: src/api/reference.md:596 +#: src/api/reference.md:598 msgid "`EACCES`" msgstr "`EACCES`" -#: src/api/reference.md:597 +#: src/api/reference.md:599 msgid "`EADDRINUSE`" msgstr "`EADDRINUSE`" -#: src/api/reference.md:598 +#: src/api/reference.md:600 msgid "`EADDRNOTAVAIL`" msgstr "`EADDRNOTAVAIL`" -#: src/api/reference.md:599 +#: src/api/reference.md:601 msgid "`EAFNOSUPPORT`" msgstr "`EAFNOSUPPORT`" -#: src/api/reference.md:600 +#: src/api/reference.md:602 msgid "`EAGAIN`" msgstr "`EAGAIN`" -#: src/api/reference.md:601 +#: src/api/reference.md:603 msgid "`EALREADY`" msgstr "`EALREADY`" -#: src/api/reference.md:602 +#: src/api/reference.md:604 msgid "`EBADF`" msgstr "`EBADF`" -#: src/api/reference.md:603 +#: src/api/reference.md:605 msgid "`EBADMSG`" msgstr "`EBADMSG`" -#: src/api/reference.md:604 +#: src/api/reference.md:606 msgid "`EBUSY`" msgstr "`EBUSY`" -#: src/api/reference.md:605 +#: src/api/reference.md:607 msgid "`ECANCELED`" msgstr "`ECANCELED`" -#: src/api/reference.md:606 +#: src/api/reference.md:608 msgid "`ECHILD`" msgstr "`ECHILD`" -#: src/api/reference.md:607 +#: src/api/reference.md:609 msgid "`ECONNABORTED`" msgstr "`ECONNABORTED`" -#: src/api/reference.md:608 +#: src/api/reference.md:610 msgid "`ECONNREFUSED`" msgstr "`ECONNREFUSED`" -#: src/api/reference.md:609 +#: src/api/reference.md:611 msgid "`ECONNRESET`" msgstr "`ECONNRESET`" -#: src/api/reference.md:610 +#: src/api/reference.md:612 msgid "`EDEADLK`" msgstr "`EDEADLK`" -#: src/api/reference.md:611 +#: src/api/reference.md:613 msgid "`EDESTADDRREQ`" msgstr "`EDESTADDRREQ`" -#: src/api/reference.md:612 +#: src/api/reference.md:614 msgid "`EDOM`" msgstr "`EDOM`" -#: src/api/reference.md:613 +#: src/api/reference.md:615 msgid "`EDQUOT`" msgstr "`EDQUOT`" -#: src/api/reference.md:614 +#: src/api/reference.md:616 msgid "`EEXIST`" msgstr "`EEXIST`" -#: src/api/reference.md:615 +#: src/api/reference.md:617 msgid "`EFAULT`" msgstr "`EFAULT`" -#: src/api/reference.md:616 +#: src/api/reference.md:618 msgid "`EFBIG`" msgstr "`EFBIG`" -#: src/api/reference.md:617 +#: src/api/reference.md:619 msgid "`EHOSTUNREACH`" msgstr "`EHOSTUNREACH`" -#: src/api/reference.md:618 +#: src/api/reference.md:620 msgid "`EIDRM`" msgstr "`EIDRM`" -#: src/api/reference.md:619 +#: src/api/reference.md:621 msgid "`EILSEQ`" msgstr "`EILSEQ`" -#: src/api/reference.md:620 +#: src/api/reference.md:622 msgid "`EINPROGRESS`" msgstr "`EINPROGRESS`" -#: src/api/reference.md:621 +#: src/api/reference.md:623 msgid "`EINTR`" msgstr "`EINTR`" -#: src/api/reference.md:622 +#: src/api/reference.md:624 msgid "`EINVAL`" msgstr "`EINVAL`" -#: src/api/reference.md:623 +#: src/api/reference.md:625 msgid "`EIO`" msgstr "`EIO`" -#: src/api/reference.md:624 +#: src/api/reference.md:626 msgid "`EISCONN`" msgstr "`EISCONN`" -#: src/api/reference.md:625 +#: src/api/reference.md:627 msgid "`EISDIR`" msgstr "`EISDIR`" -#: src/api/reference.md:626 +#: src/api/reference.md:628 msgid "`ELOOP`" msgstr "`ELOOP`" -#: src/api/reference.md:627 +#: src/api/reference.md:629 msgid "`EMFILE`" msgstr "`EMFILE`" -#: src/api/reference.md:628 +#: src/api/reference.md:630 msgid "`EMLINK`" msgstr "`EMLINK`" -#: src/api/reference.md:629 +#: src/api/reference.md:631 msgid "`EMSGSIZE`" msgstr "`EMSGSIZE`" -#: src/api/reference.md:630 +#: src/api/reference.md:632 msgid "`EMULTIHOP`" msgstr "`EMULTIHOP`" -#: src/api/reference.md:631 +#: src/api/reference.md:633 msgid "`ENAMETOOLONG`" msgstr "`ENAMETOOLONG`" -#: src/api/reference.md:632 +#: src/api/reference.md:634 msgid "`ENETDOWN`" msgstr "`ENETDOWN`" -#: src/api/reference.md:633 +#: src/api/reference.md:635 msgid "`ENETRESET`" msgstr "`ENETRESET`" -#: src/api/reference.md:634 +#: src/api/reference.md:636 msgid "`ENETUNREACH`" msgstr "`ENETUNREACH`" -#: src/api/reference.md:635 +#: src/api/reference.md:637 msgid "`ENFILE`" msgstr "`ENFILE`" -#: src/api/reference.md:636 +#: src/api/reference.md:638 msgid "`ENGINE_METHOD_ALL`" msgstr "`ENGINE_METHOD_ALL`" -#: src/api/reference.md:637 +#: src/api/reference.md:639 msgid "`ENGINE_METHOD_CIPHERS`" msgstr "`ENGINE_METHOD_CIPHERS`" -#: src/api/reference.md:638 +#: src/api/reference.md:640 msgid "`ENGINE_METHOD_DH`" msgstr "`ENGINE_METHOD_DH`" -#: src/api/reference.md:639 +#: src/api/reference.md:641 msgid "`ENGINE_METHOD_DIGESTS`" msgstr "`ENGINE_METHOD_DIGESTS`" -#: src/api/reference.md:640 +#: src/api/reference.md:642 msgid "`ENGINE_METHOD_DSA`" msgstr "`ENGINE_METHOD_DSA`" -#: src/api/reference.md:641 +#: src/api/reference.md:643 msgid "`ENGINE_METHOD_EC`" msgstr "`ENGINE_METHOD_EC`" -#: src/api/reference.md:642 +#: src/api/reference.md:644 msgid "`ENGINE_METHOD_NONE`" msgstr "`ENGINE_METHOD_NONE`" -#: src/api/reference.md:643 +#: src/api/reference.md:645 msgid "`ENGINE_METHOD_PKEY_ASN1_METHS`" msgstr "`ENGINE_METHOD_PKEY_ASN1_METHS`" -#: src/api/reference.md:644 +#: src/api/reference.md:646 msgid "`ENGINE_METHOD_PKEY_METHS`" msgstr "`ENGINE_METHOD_PKEY_METHS`" -#: src/api/reference.md:645 +#: src/api/reference.md:647 msgid "`ENGINE_METHOD_RAND`" msgstr "`ENGINE_METHOD_RAND`" -#: src/api/reference.md:646 +#: src/api/reference.md:648 msgid "`ENGINE_METHOD_RSA`" msgstr "`ENGINE_METHOD_RSA`" -#: src/api/reference.md:647 +#: src/api/reference.md:649 msgid "`ENOBUFS`" msgstr "`ENOBUFS`" -#: src/api/reference.md:648 +#: src/api/reference.md:650 msgid "`ENODATA`" msgstr "`ENODATA`" -#: src/api/reference.md:649 +#: src/api/reference.md:651 msgid "`ENODEV`" msgstr "`ENODEV`" -#: src/api/reference.md:650 +#: src/api/reference.md:652 msgid "`ENOENT`" msgstr "`ENOENT`" -#: src/api/reference.md:651 +#: src/api/reference.md:653 msgid "`ENOEXEC`" msgstr "`ENOEXEC`" -#: src/api/reference.md:652 +#: src/api/reference.md:654 msgid "`ENOLCK`" msgstr "`ENOLCK`" -#: src/api/reference.md:653 +#: src/api/reference.md:655 msgid "`ENOLINK`" msgstr "`ENOLINK`" -#: src/api/reference.md:654 +#: src/api/reference.md:656 msgid "`ENOMEM`" msgstr "`ENOMEM`" -#: src/api/reference.md:655 +#: src/api/reference.md:657 msgid "`ENOMSG`" msgstr "`ENOMSG`" -#: src/api/reference.md:656 +#: src/api/reference.md:658 msgid "`ENOPROTOOPT`" msgstr "`ENOPROTOOPT`" -#: src/api/reference.md:657 +#: src/api/reference.md:659 msgid "`ENOSPC`" msgstr "`ENOSPC`" -#: src/api/reference.md:658 +#: src/api/reference.md:660 msgid "`ENOSR`" msgstr "`ENOSR`" -#: src/api/reference.md:659 +#: src/api/reference.md:661 msgid "`ENOSTR`" msgstr "`ENOSTR`" -#: src/api/reference.md:660 +#: src/api/reference.md:662 msgid "`ENOSYS`" msgstr "`ENOSYS`" -#: src/api/reference.md:661 +#: src/api/reference.md:663 msgid "`ENOTCONN`" msgstr "`ENOTCONN`" -#: src/api/reference.md:662 +#: src/api/reference.md:664 msgid "`ENOTDIR`" msgstr "`ENOTDIR`" -#: src/api/reference.md:663 +#: src/api/reference.md:665 msgid "`ENOTEMPTY`" msgstr "`ENOTEMPTY`" -#: src/api/reference.md:664 +#: src/api/reference.md:666 msgid "`ENOTSOCK`" msgstr "`ENOTSOCK`" -#: src/api/reference.md:665 +#: src/api/reference.md:667 msgid "`ENOTSUP`" msgstr "`ENOTSUP`" -#: src/api/reference.md:666 +#: src/api/reference.md:668 msgid "`ENOTTY`" msgstr "`ENOTTY`" -#: src/api/reference.md:667 +#: src/api/reference.md:669 msgid "`ENXIO`" msgstr "`ENXIO`" -#: src/api/reference.md:668 +#: src/api/reference.md:670 msgid "`EOPNOTSUPP`" msgstr "`EOPNOTSUPP`" -#: src/api/reference.md:669 +#: src/api/reference.md:671 msgid "`EOVERFLOW`" msgstr "`EOVERFLOW`" -#: src/api/reference.md:670 +#: src/api/reference.md:672 msgid "`EPERM`" msgstr "`EPERM`" -#: src/api/reference.md:671 +#: src/api/reference.md:673 msgid "`EPIPE`" msgstr "`EPIPE`" -#: src/api/reference.md:672 +#: src/api/reference.md:674 msgid "`EPROTO`" msgstr "`EPROTO`" -#: src/api/reference.md:673 +#: src/api/reference.md:675 msgid "`EPROTONOSUPPORT`" msgstr "`EPROTONOSUPPORT`" -#: src/api/reference.md:674 +#: src/api/reference.md:676 msgid "`EPROTOTYPE`" msgstr "`EPROTOTYPE`" -#: src/api/reference.md:675 +#: src/api/reference.md:677 msgid "`ERANGE`" msgstr "`ERANGE`" -#: src/api/reference.md:676 +#: src/api/reference.md:678 msgid "`EROFS`" msgstr "`EROFS`" -#: src/api/reference.md:677 +#: src/api/reference.md:679 msgid "`ESPIPE`" msgstr "`ESPIPE`" -#: src/api/reference.md:678 +#: src/api/reference.md:680 msgid "`ESRCH`" msgstr "`ESRCH`" -#: src/api/reference.md:679 +#: src/api/reference.md:681 msgid "`ESTALE`" msgstr "`ESTALE`" -#: src/api/reference.md:680 +#: src/api/reference.md:682 msgid "`ETIME`" msgstr "`ETIME`" -#: src/api/reference.md:681 +#: src/api/reference.md:683 msgid "`ETIMEDOUT`" msgstr "`ETIMEDOUT`" -#: src/api/reference.md:682 +#: src/api/reference.md:684 msgid "`ETXTBSY`" msgstr "`ETXTBSY`" -#: src/api/reference.md:683 +#: src/api/reference.md:685 msgid "`EWOULDBLOCK`" msgstr "`EWOULDBLOCK`" -#: src/api/reference.md:684 +#: src/api/reference.md:686 msgid "`EXDEV`" msgstr "`EXDEV`" -#: src/api/reference.md:685 +#: src/api/reference.md:687 msgid "`F_OK`" msgstr "`F_OK`" -#: src/api/reference.md:686 +#: src/api/reference.md:688 msgid "`OPENSSL_VERSION_NUMBER`" msgstr "`OPENSSL_VERSION_NUMBER`" -#: src/api/reference.md:687 +#: src/api/reference.md:689 msgid "`O_APPEND`" msgstr "`O_APPEND`" -#: src/api/reference.md:688 +#: src/api/reference.md:690 msgid "`O_CREAT`" msgstr "`O_CREAT`" -#: src/api/reference.md:689 +#: src/api/reference.md:691 msgid "`O_DIRECT`" msgstr "`O_DIRECT`" -#: src/api/reference.md:690 +#: src/api/reference.md:692 msgid "`O_DIRECTORY`" msgstr "`O_DIRECTORY`" -#: src/api/reference.md:691 +#: src/api/reference.md:693 msgid "`O_DSYNC`" msgstr "`O_DSYNC`" -#: src/api/reference.md:692 +#: src/api/reference.md:694 msgid "`O_EXCL`" msgstr "`O_EXCL`" -#: src/api/reference.md:693 +#: src/api/reference.md:695 msgid "`O_NOATIME`" msgstr "`O_NOATIME`" -#: src/api/reference.md:694 +#: src/api/reference.md:696 msgid "`O_NOCTTY`" msgstr "`O_NOCTTY`" -#: src/api/reference.md:695 +#: src/api/reference.md:697 msgid "`O_NOFOLLOW`" msgstr "`O_NOFOLLOW`" -#: src/api/reference.md:696 +#: src/api/reference.md:698 msgid "`O_NONBLOCK`" msgstr "`O_NONBLOCK`" -#: src/api/reference.md:697 +#: src/api/reference.md:699 msgid "`O_RDONLY`" msgstr "`O_RDONLY`" -#: src/api/reference.md:698 +#: src/api/reference.md:700 msgid "`O_RDWR`" msgstr "`O_RDWR`" -#: src/api/reference.md:699 +#: src/api/reference.md:701 msgid "`O_SYMLINK`" msgstr "`O_SYMLINK`" -#: src/api/reference.md:700 +#: src/api/reference.md:702 msgid "`O_SYNC`" msgstr "`O_SYNC`" -#: src/api/reference.md:701 +#: src/api/reference.md:703 msgid "`O_TRUNC`" msgstr "`O_TRUNC`" -#: src/api/reference.md:702 +#: src/api/reference.md:704 msgid "`O_WRONLY`" msgstr "`O_WRONLY`" -#: src/api/reference.md:703 +#: src/api/reference.md:705 msgid "`POINT_CONVERSION_COMPRESSED`" msgstr "`POINT_CONVERSION_COMPRESSED`" -#: src/api/reference.md:704 +#: src/api/reference.md:706 msgid "`POINT_CONVERSION_HYBRID`" msgstr "`POINT_CONVERSION_HYBRID`" -#: src/api/reference.md:705 +#: src/api/reference.md:707 msgid "`POINT_CONVERSION_UNCOMPRESSED`" msgstr "`POINT_CONVERSION_UNCOMPRESSED`" -#: src/api/reference.md:706 +#: src/api/reference.md:708 msgid "`PRIORITY_ABOVE_NORMAL`" msgstr "`PRIORITY_ABOVE_NORMAL`" -#: src/api/reference.md:707 +#: src/api/reference.md:709 msgid "`PRIORITY_BELOW_NORMAL`" msgstr "`PRIORITY_BELOW_NORMAL`" -#: src/api/reference.md:708 +#: src/api/reference.md:710 msgid "`PRIORITY_HIGH`" msgstr "`PRIORITY_HIGH`" -#: src/api/reference.md:709 +#: src/api/reference.md:711 msgid "`PRIORITY_HIGHEST`" msgstr "`PRIORITY_HIGHEST`" -#: src/api/reference.md:710 +#: src/api/reference.md:712 msgid "`PRIORITY_LOW`" msgstr "`PRIORITY_LOW`" -#: src/api/reference.md:711 +#: src/api/reference.md:713 msgid "`PRIORITY_NORMAL`" msgstr "`PRIORITY_NORMAL`" -#: src/api/reference.md:712 +#: src/api/reference.md:714 msgid "`RSA_NO_PADDING`" msgstr "`RSA_NO_PADDING`" -#: src/api/reference.md:713 +#: src/api/reference.md:715 msgid "`RSA_PKCS1_OAEP_PADDING`" msgstr "`RSA_PKCS1_OAEP_PADDING`" -#: src/api/reference.md:714 +#: src/api/reference.md:716 msgid "`RSA_PKCS1_PADDING`" msgstr "`RSA_PKCS1_PADDING`" -#: src/api/reference.md:715 +#: src/api/reference.md:717 msgid "`RSA_PKCS1_PSS_PADDING`" msgstr "`RSA_PKCS1_PSS_PADDING`" -#: src/api/reference.md:716 +#: src/api/reference.md:718 msgid "`RSA_PSS_SALTLEN_AUTO`" msgstr "`RSA_PSS_SALTLEN_AUTO`" -#: src/api/reference.md:717 +#: src/api/reference.md:719 msgid "`RSA_PSS_SALTLEN_DIGEST`" msgstr "`RSA_PSS_SALTLEN_DIGEST`" -#: src/api/reference.md:718 +#: src/api/reference.md:720 msgid "`RSA_PSS_SALTLEN_MAX_SIGN`" msgstr "`RSA_PSS_SALTLEN_MAX_SIGN`" -#: src/api/reference.md:719 +#: src/api/reference.md:721 msgid "`RSA_X931_PADDING`" msgstr "`RSA_X931_PADDING`" -#: src/api/reference.md:720 +#: src/api/reference.md:722 msgid "`RTLD_DEEPBIND`" msgstr "`RTLD_DEEPBIND`" -#: src/api/reference.md:721 +#: src/api/reference.md:723 msgid "`RTLD_GLOBAL`" msgstr "`RTLD_GLOBAL`" -#: src/api/reference.md:722 +#: src/api/reference.md:724 msgid "`RTLD_LAZY`" msgstr "`RTLD_LAZY`" -#: src/api/reference.md:723 +#: src/api/reference.md:725 msgid "`RTLD_LOCAL`" msgstr "`RTLD_LOCAL`" -#: src/api/reference.md:724 +#: src/api/reference.md:726 msgid "`RTLD_NOW`" msgstr "`RTLD_NOW`" -#: src/api/reference.md:725 +#: src/api/reference.md:727 msgid "`R_OK`" msgstr "`R_OK`" -#: src/api/reference.md:726 +#: src/api/reference.md:728 msgid "`SIGABRT`" msgstr "`SIGABRT`" -#: src/api/reference.md:727 +#: src/api/reference.md:729 msgid "`SIGALRM`" msgstr "`SIGALRM`" -#: src/api/reference.md:728 +#: src/api/reference.md:730 msgid "`SIGBUS`" msgstr "`SIGBUS`" -#: src/api/reference.md:729 +#: src/api/reference.md:731 msgid "`SIGCHLD`" msgstr "`SIGCHLD`" -#: src/api/reference.md:730 +#: src/api/reference.md:732 msgid "`SIGCONT`" msgstr "`SIGCONT`" -#: src/api/reference.md:731 +#: src/api/reference.md:733 msgid "`SIGFPE`" msgstr "`SIGFPE`" -#: src/api/reference.md:732 +#: src/api/reference.md:734 msgid "`SIGHUP`" msgstr "`SIGHUP`" -#: src/api/reference.md:733 +#: src/api/reference.md:735 msgid "`SIGILL`" msgstr "`SIGILL`" -#: src/api/reference.md:734 +#: src/api/reference.md:736 msgid "`SIGINFO`" msgstr "`SIGINFO`" -#: src/api/reference.md:735 +#: src/api/reference.md:737 msgid "`SIGINT`" msgstr "`SIGINT`" -#: src/api/reference.md:736 +#: src/api/reference.md:738 msgid "`SIGIO`" msgstr "`SIGIO`" -#: src/api/reference.md:737 +#: src/api/reference.md:739 msgid "`SIGIOT`" msgstr "`SIGIOT`" -#: src/api/reference.md:738 +#: src/api/reference.md:740 msgid "`SIGKILL`" msgstr "`SIGKILL`" -#: src/api/reference.md:739 +#: src/api/reference.md:741 msgid "`SIGPIPE`" msgstr "`SIGPIPE`" -#: src/api/reference.md:740 +#: src/api/reference.md:742 msgid "`SIGPOLL`" msgstr "`SIGPOLL`" -#: src/api/reference.md:741 +#: src/api/reference.md:743 msgid "`SIGPROF`" msgstr "`SIGPROF`" -#: src/api/reference.md:742 +#: src/api/reference.md:744 msgid "`SIGPWR`" msgstr "`SIGPWR`" -#: src/api/reference.md:743 +#: src/api/reference.md:745 msgid "`SIGQUIT`" msgstr "`SIGQUIT`" -#: src/api/reference.md:744 +#: src/api/reference.md:746 msgid "`SIGSEGV`" msgstr "`SIGSEGV`" -#: src/api/reference.md:745 +#: src/api/reference.md:747 msgid "`SIGSTKFLT`" msgstr "`SIGSTKFLT`" -#: src/api/reference.md:746 +#: src/api/reference.md:748 msgid "`SIGSTOP`" msgstr "`SIGSTOP`" -#: src/api/reference.md:747 +#: src/api/reference.md:749 msgid "`SIGSYS`" msgstr "`SIGSYS`" -#: src/api/reference.md:748 +#: src/api/reference.md:750 msgid "`SIGTERM`" msgstr "`SIGTERM`" -#: src/api/reference.md:749 +#: src/api/reference.md:751 msgid "`SIGTRAP`" msgstr "`SIGTRAP`" -#: src/api/reference.md:750 +#: src/api/reference.md:752 msgid "`SIGTSTP`" msgstr "`SIGTSTP`" -#: src/api/reference.md:751 +#: src/api/reference.md:753 msgid "`SIGTTIN`" msgstr "`SIGTTIN`" -#: src/api/reference.md:752 +#: src/api/reference.md:754 msgid "`SIGTTOU`" msgstr "`SIGTTOU`" -#: src/api/reference.md:753 +#: src/api/reference.md:755 msgid "`SIGURG`" msgstr "`SIGURG`" -#: src/api/reference.md:754 +#: src/api/reference.md:756 msgid "`SIGUSR1`" msgstr "`SIGUSR1`" -#: src/api/reference.md:755 +#: src/api/reference.md:757 msgid "`SIGUSR2`" msgstr "`SIGUSR2`" -#: src/api/reference.md:756 +#: src/api/reference.md:758 msgid "`SIGVTALRM`" msgstr "`SIGVTALRM`" -#: src/api/reference.md:757 +#: src/api/reference.md:759 msgid "`SIGWINCH`" msgstr "`SIGWINCH`" -#: src/api/reference.md:758 +#: src/api/reference.md:760 msgid "`SIGXCPU`" msgstr "`SIGXCPU`" -#: src/api/reference.md:759 +#: src/api/reference.md:761 msgid "`SIGXFSZ`" msgstr "`SIGXFSZ`" -#: src/api/reference.md:760 +#: src/api/reference.md:762 msgid "`SSL_OP_ALL`" msgstr "`SSL_OP_ALL`" -#: src/api/reference.md:761 +#: src/api/reference.md:763 msgid "`SSL_OP_ALLOW_NO_DHE_KEX`" msgstr "`SSL_OP_ALLOW_NO_DHE_KEX`" -#: src/api/reference.md:762 +#: src/api/reference.md:764 msgid "`SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION`" msgstr "`SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION`" -#: src/api/reference.md:763 +#: src/api/reference.md:765 msgid "`SSL_OP_CIPHER_SERVER_PREFERENCE`" msgstr "`SSL_OP_CIPHER_SERVER_PREFERENCE`" -#: src/api/reference.md:764 +#: src/api/reference.md:766 msgid "`SSL_OP_CISCO_ANYCONNECT`" msgstr "`SSL_OP_CISCO_ANYCONNECT`" -#: src/api/reference.md:765 +#: src/api/reference.md:767 msgid "`SSL_OP_COOKIE_EXCHANGE`" msgstr "`SSL_OP_COOKIE_EXCHANGE`" -#: src/api/reference.md:766 +#: src/api/reference.md:768 msgid "`SSL_OP_CRYPTOPRO_TLSEXT_BUG`" msgstr "`SSL_OP_CRYPTOPRO_TLSEXT_BUG`" -#: src/api/reference.md:767 +#: src/api/reference.md:769 msgid "`SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS`" msgstr "`SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS`" -#: src/api/reference.md:768 +#: src/api/reference.md:770 msgid "`SSL_OP_LEGACY_SERVER_CONNECT`" msgstr "`SSL_OP_LEGACY_SERVER_CONNECT`" -#: src/api/reference.md:769 +#: src/api/reference.md:771 msgid "`SSL_OP_NO_COMPRESSION`" msgstr "`SSL_OP_NO_COMPRESSION`" -#: src/api/reference.md:770 +#: src/api/reference.md:772 msgid "`SSL_OP_NO_ENCRYPT_THEN_MAC`" msgstr "`SSL_OP_NO_ENCRYPT_THEN_MAC`" -#: src/api/reference.md:771 +#: src/api/reference.md:773 msgid "`SSL_OP_NO_QUERY_MTU`" msgstr "`SSL_OP_NO_QUERY_MTU`" -#: src/api/reference.md:772 +#: src/api/reference.md:774 msgid "`SSL_OP_NO_RENEGOTIATION`" msgstr "`SSL_OP_NO_RENEGOTIATION`" -#: src/api/reference.md:773 +#: src/api/reference.md:775 msgid "`SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION`" msgstr "`SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION`" -#: src/api/reference.md:774 +#: src/api/reference.md:776 msgid "`SSL_OP_NO_SSLv2`" msgstr "`SSL_OP_NO_SSLv2`" -#: src/api/reference.md:775 +#: src/api/reference.md:777 msgid "`SSL_OP_NO_SSLv3`" msgstr "`SSL_OP_NO_SSLv3`" -#: src/api/reference.md:776 +#: src/api/reference.md:778 msgid "`SSL_OP_NO_TICKET`" msgstr "`SSL_OP_NO_TICKET`" -#: src/api/reference.md:777 +#: src/api/reference.md:779 msgid "`SSL_OP_NO_TLSv1`" msgstr "`SSL_OP_NO_TLSv1`" -#: src/api/reference.md:778 +#: src/api/reference.md:780 msgid "`SSL_OP_NO_TLSv1_1`" msgstr "`SSL_OP_NO_TLSv1_1`" -#: src/api/reference.md:779 +#: src/api/reference.md:781 msgid "`SSL_OP_NO_TLSv1_2`" msgstr "`SSL_OP_NO_TLSv1_2`" -#: src/api/reference.md:780 +#: src/api/reference.md:782 msgid "`SSL_OP_NO_TLSv1_3`" msgstr "`SSL_OP_NO_TLSv1_3`" -#: src/api/reference.md:781 +#: src/api/reference.md:783 msgid "`SSL_OP_PRIORITIZE_CHACHA`" msgstr "`SSL_OP_PRIORITIZE_CHACHA`" -#: src/api/reference.md:782 +#: src/api/reference.md:784 msgid "`SSL_OP_TLS_ROLLBACK_BUG`" msgstr "`SSL_OP_TLS_ROLLBACK_BUG`" -#: src/api/reference.md:783 +#: src/api/reference.md:785 msgid "`S_IFBLK`" msgstr "`S_IFBLK`" -#: src/api/reference.md:784 +#: src/api/reference.md:786 msgid "`S_IFCHR`" msgstr "`S_IFCHR`" -#: src/api/reference.md:785 +#: src/api/reference.md:787 msgid "`S_IFDIR`" msgstr "`S_IFDIR`" -#: src/api/reference.md:786 +#: src/api/reference.md:788 msgid "`S_IFIFO`" msgstr "`S_IFIFO`" -#: src/api/reference.md:787 +#: src/api/reference.md:789 msgid "`S_IFLNK`" msgstr "`S_IFLNK`" -#: src/api/reference.md:788 +#: src/api/reference.md:790 msgid "`S_IFMT`" msgstr "`S_IFMT`" -#: src/api/reference.md:789 +#: src/api/reference.md:791 msgid "`S_IFREG`" msgstr "`S_IFREG`" -#: src/api/reference.md:790 +#: src/api/reference.md:792 msgid "`S_IFSOCK`" msgstr "`S_IFSOCK`" -#: src/api/reference.md:791 +#: src/api/reference.md:793 msgid "`S_IRGRP`" msgstr "`S_IRGRP`" -#: src/api/reference.md:792 +#: src/api/reference.md:794 msgid "`S_IROTH`" msgstr "`S_IROTH`" -#: src/api/reference.md:793 +#: src/api/reference.md:795 msgid "`S_IRUSR`" msgstr "`S_IRUSR`" -#: src/api/reference.md:794 +#: src/api/reference.md:796 msgid "`S_IRWXG`" msgstr "`S_IRWXG`" -#: src/api/reference.md:795 +#: src/api/reference.md:797 msgid "`S_IRWXO`" msgstr "`S_IRWXO`" -#: src/api/reference.md:796 +#: src/api/reference.md:798 msgid "`S_IRWXU`" msgstr "`S_IRWXU`" -#: src/api/reference.md:797 +#: src/api/reference.md:799 msgid "`S_IWGRP`" msgstr "`S_IWGRP`" -#: src/api/reference.md:798 +#: src/api/reference.md:800 msgid "`S_IWOTH`" msgstr "`S_IWOTH`" -#: src/api/reference.md:799 +#: src/api/reference.md:801 msgid "`S_IWUSR`" msgstr "`S_IWUSR`" -#: src/api/reference.md:800 +#: src/api/reference.md:802 msgid "`S_IXGRP`" msgstr "`S_IXGRP`" -#: src/api/reference.md:801 +#: src/api/reference.md:803 msgid "`S_IXOTH`" msgstr "`S_IXOTH`" -#: src/api/reference.md:802 +#: src/api/reference.md:804 msgid "`S_IXUSR`" msgstr "`S_IXUSR`" -#: src/api/reference.md:803 +#: src/api/reference.md:805 msgid "`TLS1_1_VERSION`" msgstr "`TLS1_1_VERSION`" -#: src/api/reference.md:804 +#: src/api/reference.md:806 msgid "`TLS1_2_VERSION`" msgstr "`TLS1_2_VERSION`" -#: src/api/reference.md:805 +#: src/api/reference.md:807 msgid "`TLS1_3_VERSION`" msgstr "`TLS1_3_VERSION`" -#: src/api/reference.md:806 +#: src/api/reference.md:808 msgid "`TLS1_VERSION`" msgstr "`TLS1_VERSION`" -#: src/api/reference.md:807 +#: src/api/reference.md:809 msgid "`UV_DIRENT_BLOCK`" msgstr "`UV_DIRENT_BLOCK`" -#: src/api/reference.md:808 +#: src/api/reference.md:810 msgid "`UV_DIRENT_CHAR`" msgstr "`UV_DIRENT_CHAR`" -#: src/api/reference.md:809 +#: src/api/reference.md:811 msgid "`UV_DIRENT_DIR`" msgstr "`UV_DIRENT_DIR`" -#: src/api/reference.md:810 +#: src/api/reference.md:812 msgid "`UV_DIRENT_FIFO`" msgstr "`UV_DIRENT_FIFO`" -#: src/api/reference.md:811 +#: src/api/reference.md:813 msgid "`UV_DIRENT_FILE`" msgstr "`UV_DIRENT_FILE`" -#: src/api/reference.md:812 +#: src/api/reference.md:814 msgid "`UV_DIRENT_LINK`" msgstr "`UV_DIRENT_LINK`" -#: src/api/reference.md:813 +#: src/api/reference.md:815 msgid "`UV_DIRENT_SOCKET`" msgstr "`UV_DIRENT_SOCKET`" -#: src/api/reference.md:814 +#: src/api/reference.md:816 msgid "`UV_DIRENT_UNKNOWN`" msgstr "`UV_DIRENT_UNKNOWN`" -#: src/api/reference.md:815 +#: src/api/reference.md:817 msgid "`UV_FS_COPYFILE_EXCL`" msgstr "`UV_FS_COPYFILE_EXCL`" -#: src/api/reference.md:816 +#: src/api/reference.md:818 msgid "`UV_FS_COPYFILE_FICLONE`" msgstr "`UV_FS_COPYFILE_FICLONE`" -#: src/api/reference.md:817 +#: src/api/reference.md:819 msgid "`UV_FS_COPYFILE_FICLONE_FORCE`" msgstr "`UV_FS_COPYFILE_FICLONE_FORCE`" -#: src/api/reference.md:818 +#: src/api/reference.md:820 msgid "`UV_FS_O_FILEMAP`" msgstr "`UV_FS_O_FILEMAP`" -#: src/api/reference.md:819 +#: src/api/reference.md:821 msgid "`UV_FS_SYMLINK_DIR`" msgstr "`UV_FS_SYMLINK_DIR`" -#: src/api/reference.md:820 +#: src/api/reference.md:822 msgid "`UV_FS_SYMLINK_JUNCTION`" msgstr "`UV_FS_SYMLINK_JUNCTION`" -#: src/api/reference.md:821 +#: src/api/reference.md:823 msgid "`W_OK`" msgstr "`W_OK`" -#: src/api/reference.md:822 +#: src/api/reference.md:824 msgid "`X_OK`" msgstr "`X_OK`" -#: src/api/reference.md:824 +#: src/api/reference.md:826 msgid "`defaultCoreCipherList`" msgstr "`defaultCoreCipherList`" -#: src/api/reference.md:826 src/cli/capabilities.md:52 +#: src/api/reference.md:828 src/cli/capabilities.md:52 msgid "`crypto`" msgstr "`crypto`" -#: src/api/reference.md:830 +#: src/api/reference.md:832 msgid "`Cipheriv`" msgstr "`Cipheriv`" -#: src/api/reference.md:831 +#: src/api/reference.md:833 msgid "`Decipheriv`" msgstr "`Decipheriv`" -#: src/api/reference.md:832 +#: src/api/reference.md:834 msgid "`DiffieHellman`" msgstr "`DiffieHellman`" -#: src/api/reference.md:833 +#: src/api/reference.md:835 msgid "`DiffieHellmanGroup`" msgstr "`DiffieHellmanGroup`" -#: src/api/reference.md:834 +#: src/api/reference.md:836 msgid "`ECDH`" msgstr "`ECDH`" -#: src/api/reference.md:835 +#: src/api/reference.md:837 msgid "`KeyObject`" msgstr "`KeyObject`" -#: src/api/reference.md:836 +#: src/api/reference.md:838 msgid "`X509Certificate`" msgstr "`X509Certificate`" -#: src/api/reference.md:840 +#: src/api/reference.md:842 msgid "`Hash` — module" msgstr "`Hash` — Modul" -#: src/api/reference.md:841 +#: src/api/reference.md:843 msgid "`Hmac` — module" msgstr "`Hmac` — Modul" -#: src/api/reference.md:842 +#: src/api/reference.md:844 msgid "`Sign` — module" msgstr "`Sign` — Modul" -#: src/api/reference.md:843 +#: src/api/reference.md:845 msgid "`Verify` — module" msgstr "`Verify` — Modul" -#: src/api/reference.md:844 +#: src/api/reference.md:846 msgid "`argon2` — module" msgstr "`argon2` — Modul" -#: src/api/reference.md:845 +#: src/api/reference.md:847 msgid "`argon2Sync` — module" msgstr "`argon2Sync` — Modul" -#: src/api/reference.md:846 +#: src/api/reference.md:848 msgid "`checkPrime` — module" msgstr "`checkPrime` — Modul" -#: src/api/reference.md:847 +#: src/api/reference.md:849 msgid "`checkPrimeSync` — module" msgstr "`checkPrimeSync` — Modul" -#: src/api/reference.md:848 +#: src/api/reference.md:850 msgid "`createCipheriv` — module" msgstr "`createCipheriv` — Modul" -#: src/api/reference.md:849 +#: src/api/reference.md:851 msgid "`createDecipheriv` — module" msgstr "`createDecipheriv` — Modul" -#: src/api/reference.md:850 +#: src/api/reference.md:852 msgid "`createDiffieHellman` — module" msgstr "`createDiffieHellman` — Modul" -#: src/api/reference.md:851 +#: src/api/reference.md:853 msgid "`createDiffieHellmanGroup` — module" msgstr "`createDiffieHellmanGroup` — Modul" -#: src/api/reference.md:852 +#: src/api/reference.md:854 msgid "`createECDH` — module" msgstr "`createECDH` — Modul" -#: src/api/reference.md:853 +#: src/api/reference.md:855 msgid "`createHash` — module" msgstr "`createHash` — Modul" -#: src/api/reference.md:854 +#: src/api/reference.md:856 msgid "`createHmac` — module" msgstr "`createHmac` — Modul" -#: src/api/reference.md:855 +#: src/api/reference.md:857 msgid "`createPrivateKey` — module" msgstr "`createPrivateKey` — Modul" -#: src/api/reference.md:856 +#: src/api/reference.md:858 msgid "`createPublicKey` — module" msgstr "`createPublicKey` — Modul" -#: src/api/reference.md:857 +#: src/api/reference.md:859 msgid "`createSecretKey` — module" msgstr "`createSecretKey` — Modul" -#: src/api/reference.md:858 src/api/reference.md:859 +#: src/api/reference.md:860 src/api/reference.md:861 msgid "`createSign` — module" msgstr "`createSign` — Modul" -#: src/api/reference.md:860 src/api/reference.md:861 +#: src/api/reference.md:862 src/api/reference.md:863 msgid "`createVerify` — module" msgstr "`createVerify` — Modul" -#: src/api/reference.md:862 +#: src/api/reference.md:864 msgid "`decapsulate` — module" msgstr "`decapsulate` — Modul" -#: src/api/reference.md:863 +#: src/api/reference.md:865 msgid "`diffieHellman` — module" msgstr "`diffieHellman` — Modul" -#: src/api/reference.md:864 +#: src/api/reference.md:866 msgid "`encapsulate` — module" msgstr "`encapsulate` — Modul" -#: src/api/reference.md:865 +#: src/api/reference.md:867 msgid "`generateKey` — module" msgstr "`generateKey` — Modul" -#: src/api/reference.md:866 +#: src/api/reference.md:868 msgid "`generateKeyPair` — module" msgstr "`generateKeyPair` — Modul" -#: src/api/reference.md:867 src/api/reference.md:868 +#: src/api/reference.md:869 src/api/reference.md:870 msgid "`generateKeyPairSync` — module" msgstr "`generateKeyPairSync` — Modul" -#: src/api/reference.md:869 +#: src/api/reference.md:871 msgid "`generateKeySync` — module" msgstr "`generateKeySync` — Modul" -#: src/api/reference.md:870 +#: src/api/reference.md:872 msgid "`generatePrime` — module" msgstr "`generatePrime` — Modul" -#: src/api/reference.md:871 +#: src/api/reference.md:873 msgid "`generatePrimeSync` — module" msgstr "`generatePrimeSync` — Modul" -#: src/api/reference.md:872 +#: src/api/reference.md:874 msgid "`getCipherInfo` — module" msgstr "`getCipherInfo` — Modul" -#: src/api/reference.md:873 src/api/reference.md:3312 +#: src/api/reference.md:875 src/api/reference.md:3312 msgid "`getCiphers` — module" msgstr "`getCiphers` — Modul" -#: src/api/reference.md:874 +#: src/api/reference.md:876 msgid "`getCurves` — module" msgstr "`getCurves` — Modul" -#: src/api/reference.md:875 +#: src/api/reference.md:877 msgid "`getDiffieHellman` — module" msgstr "`getDiffieHellman` — Modul" -#: src/api/reference.md:876 +#: src/api/reference.md:878 msgid "`getFips` — module" msgstr "`getFips` — Modul" -#: src/api/reference.md:877 +#: src/api/reference.md:879 msgid "`getHashes` — module" msgstr "`getHashes` — Modul" -#: src/api/reference.md:878 +#: src/api/reference.md:880 msgid "`getRandomValues` — module" msgstr "`getRandomValues` — Modul" -#: src/api/reference.md:880 +#: src/api/reference.md:882 msgid "`hkdf` — module" msgstr "`hkdf` — Modul" -#: src/api/reference.md:881 +#: src/api/reference.md:883 msgid "`hkdfSync` — module" msgstr "`hkdfSync` — Modul" -#: src/api/reference.md:882 +#: src/api/reference.md:884 msgid "`pbkdf2` — module" msgstr "`pbkdf2` — Modul" -#: src/api/reference.md:883 +#: src/api/reference.md:885 msgid "`pbkdf2Sync` — module" msgstr "`pbkdf2Sync` — Modul" -#: src/api/reference.md:884 +#: src/api/reference.md:886 msgid "`privateDecrypt` — module" msgstr "`privateDecrypt` — Modul" -#: src/api/reference.md:885 +#: src/api/reference.md:887 msgid "`privateEncrypt` — module" msgstr "`privateEncrypt` — Modul" -#: src/api/reference.md:886 +#: src/api/reference.md:888 msgid "`publicDecrypt` — module" msgstr "`publicDecrypt` — Modul" -#: src/api/reference.md:887 +#: src/api/reference.md:889 msgid "`publicEncrypt` — module" msgstr "`publicEncrypt` — Modul" -#: src/api/reference.md:888 +#: src/api/reference.md:890 msgid "`randomBytes` — module" msgstr "`randomBytes` — Modul" -#: src/api/reference.md:889 +#: src/api/reference.md:891 msgid "`randomFill` — module" msgstr "`randomFill` — Modul" -#: src/api/reference.md:890 +#: src/api/reference.md:892 msgid "`randomFillSync` — module" msgstr "`randomFillSync` — Modul" -#: src/api/reference.md:891 src/api/reference.md:892 +#: src/api/reference.md:893 src/api/reference.md:894 msgid "`randomInt` — module" msgstr "`randomInt` — Modul" -#: src/api/reference.md:893 +#: src/api/reference.md:895 msgid "`randomUUID` — module" msgstr "`randomUUID` — Modul" -#: src/api/reference.md:894 +#: src/api/reference.md:896 msgid "`scrypt` — module" msgstr "`scrypt` — Modul" -#: src/api/reference.md:895 +#: src/api/reference.md:897 msgid "`scryptSync` — module" msgstr "`scryptSync` — Modul" -#: src/api/reference.md:896 +#: src/api/reference.md:898 msgid "`secureHeapUsed` — module" msgstr "`secureHeapUsed` — Modul" -#: src/api/reference.md:897 +#: src/api/reference.md:899 msgid "`setFips` — module" msgstr "`setFips` — Modul" -#: src/api/reference.md:898 +#: src/api/reference.md:900 msgid "`sign` — module" msgstr "`sign` — Modul" -#: src/api/reference.md:899 +#: src/api/reference.md:901 msgid "`timingSafeEqual` — module" msgstr "`timingSafeEqual` — Modul" -#: src/api/reference.md:904 +#: src/api/reference.md:906 msgid "`Certificate`" msgstr "`Certificate`" -#: src/api/reference.md:906 +#: src/api/reference.md:908 msgid "`subtle`" msgstr "`subtle`" -#: src/api/reference.md:907 +#: src/api/reference.md:909 msgid "`webcrypto`" msgstr "`webcrypto`" -#: src/api/reference.md:909 +#: src/api/reference.md:911 msgid "`dgram`" msgstr "`dgram`" -#: src/api/reference.md:913 src/api/reference.md:1880 +#: src/api/reference.md:915 src/api/reference.md:1863 msgid "`Socket`" msgstr "`Socket`" -#: src/api/reference.md:917 src/api/reference.md:1888 +#: src/api/reference.md:919 src/api/reference.md:1871 msgid "`Socket` — module" msgstr "`Socket` — Modul" -#: src/api/reference.md:918 src/api/reference.md:1898 +#: src/api/reference.md:920 src/api/reference.md:1881 msgid "`addListener` — instance _(class: `Socket`)_" msgstr "`addListener` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:919 +#: src/api/reference.md:921 msgid "`addMembership` — instance _(class: `Socket`)_" msgstr "`addMembership` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:920 +#: src/api/reference.md:922 msgid "`addSourceSpecificMembership` — instance _(class: `Socket`)_" msgstr "`addSourceSpecificMembership` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:921 src/api/reference.md:1902 +#: src/api/reference.md:923 src/api/reference.md:1885 msgid "`address` — instance _(class: `Socket`)_" msgstr "`address` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:922 +#: src/api/reference.md:924 msgid "`bind` — instance _(class: `Socket`)_" msgstr "`bind` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:923 +#: src/api/reference.md:925 msgid "`close` — instance _(class: `Socket`)_" msgstr "`close` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:924 src/api/reference.md:1912 +#: src/api/reference.md:926 src/api/reference.md:1895 msgid "`connect` — instance _(class: `Socket`)_" msgstr "`connect` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:925 +#: src/api/reference.md:927 msgid "`createSocket` — module" msgstr "`createSocket` — Modul" -#: src/api/reference.md:926 +#: src/api/reference.md:928 msgid "`disconnect` — instance _(class: `Socket`)_" msgstr "`disconnect` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:927 +#: src/api/reference.md:929 msgid "`dropMembership` — instance _(class: `Socket`)_" msgstr "`dropMembership` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:928 +#: src/api/reference.md:930 msgid "`dropSourceSpecificMembership` — instance _(class: `Socket`)_" msgstr "`dropSourceSpecificMembership` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:929 +#: src/api/reference.md:931 msgid "`emit` — instance _(class: `Socket`)_" msgstr "`emit` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:930 src/api/reference.md:1921 +#: src/api/reference.md:932 src/api/reference.md:1904 msgid "`eventNames` — instance _(class: `Socket`)_" msgstr "`eventNames` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:931 +#: src/api/reference.md:933 msgid "`getRecvBufferSize` — instance _(class: `Socket`)_" msgstr "`getRecvBufferSize` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:932 +#: src/api/reference.md:934 msgid "`getSendBufferSize` — instance _(class: `Socket`)_" msgstr "`getSendBufferSize` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:933 +#: src/api/reference.md:935 msgid "`getSendQueueCount` — instance _(class: `Socket`)_" msgstr "`getSendQueueCount` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:934 +#: src/api/reference.md:936 msgid "`getSendQueueSize` — instance _(class: `Socket`)_" msgstr "`getSendQueueSize` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:935 src/api/reference.md:1948 +#: src/api/reference.md:937 src/api/reference.md:1932 msgid "`listenerCount` — instance _(class: `Socket`)_" msgstr "`listenerCount` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:936 src/api/reference.md:1957 +#: src/api/reference.md:938 src/api/reference.md:1941 msgid "`off` — instance _(class: `Socket`)_" msgstr "`off` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:937 src/api/reference.md:1959 +#: src/api/reference.md:939 src/api/reference.md:1943 msgid "`on` — instance _(class: `Socket`)_" msgstr "`on` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:938 src/api/reference.md:1960 +#: src/api/reference.md:940 src/api/reference.md:1944 msgid "`once` — instance _(class: `Socket`)_" msgstr "`once` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:939 src/api/reference.md:1975 +#: src/api/reference.md:941 src/api/reference.md:1959 msgid "`ref` — instance _(class: `Socket`)_" msgstr "`ref` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:940 src/api/reference.md:1976 +#: src/api/reference.md:942 src/api/reference.md:1960 msgid "`remoteAddress` — instance _(class: `Socket`)_" msgstr "`remoteAddress` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:941 src/api/reference.md:1981 +#: src/api/reference.md:943 src/api/reference.md:1965 msgid "`removeListener` — instance _(class: `Socket`)_" msgstr "`removeListener` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:942 +#: src/api/reference.md:944 msgid "`send` — instance _(class: `Socket`)_" msgstr "`send` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:943 +#: src/api/reference.md:945 msgid "`sendto` — instance _(class: `Socket`)_" msgstr "`sendto` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:944 +#: src/api/reference.md:946 msgid "`setBroadcast` — instance _(class: `Socket`)_" msgstr "`setBroadcast` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:945 +#: src/api/reference.md:947 msgid "`setMulticastInterface` — instance _(class: `Socket`)_" msgstr "`setMulticastInterface` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:946 +#: src/api/reference.md:948 msgid "`setMulticastLoopback` — instance _(class: `Socket`)_" msgstr "`setMulticastLoopback` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:947 +#: src/api/reference.md:949 msgid "`setMulticastTTL` — instance _(class: `Socket`)_" msgstr "`setMulticastTTL` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:948 +#: src/api/reference.md:950 msgid "`setRecvBufferSize` — instance _(class: `Socket`)_" msgstr "`setRecvBufferSize` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:949 +#: src/api/reference.md:951 msgid "`setSendBufferSize` — instance _(class: `Socket`)_" msgstr "`setSendBufferSize` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:950 +#: src/api/reference.md:952 msgid "`setTTL` — instance _(class: `Socket`)_" msgstr "`setTTL` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:951 src/api/reference.md:2000 +#: src/api/reference.md:953 src/api/reference.md:1984 msgid "`unref` — instance _(class: `Socket`)_" msgstr "`unref` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:957 +#: src/api/reference.md:959 msgid "`diagnostics_channel`" msgstr "`diagnostics_channel`" -#: src/api/reference.md:961 +#: src/api/reference.md:963 msgid "`BoundedChannel`" msgstr "`BoundedChannel`" -#: src/api/reference.md:962 +#: src/api/reference.md:964 msgid "`Channel`" msgstr "`Channel`" -#: src/api/reference.md:966 +#: src/api/reference.md:968 msgid "`boundedChannel` — module" msgstr "`boundedChannel` — Modul" -#: src/api/reference.md:967 +#: src/api/reference.md:969 msgid "`channel` — module" msgstr "`channel` — Modul" -#: src/api/reference.md:968 +#: src/api/reference.md:970 msgid "`hasSubscribers` — module" msgstr "`hasSubscribers` — Modul" -#: src/api/reference.md:970 +#: src/api/reference.md:972 msgid "`tracingChannel` — module" msgstr "`tracingChannel` — Modul" -#: src/api/reference.md:977 +#: src/api/reference.md:979 msgid "`dns`" msgstr "`dns`" -#: src/api/reference.md:981 src/api/reference.md:1090 +#: src/api/reference.md:983 src/api/reference.md:1092 msgid "`Resolver`" msgstr "`Resolver`" -#: src/api/reference.md:985 src/api/reference.md:1094 +#: src/api/reference.md:987 src/api/reference.md:1096 msgid "`Resolver` — module" msgstr "`Resolver` — Modul" -#: src/api/reference.md:986 src/api/reference.md:1095 +#: src/api/reference.md:988 src/api/reference.md:1097 msgid "`cancel` — instance _(class: `Resolver`)_" msgstr "`cancel` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:987 src/api/reference.md:1096 +#: src/api/reference.md:989 src/api/reference.md:1098 msgid "`getDefaultResultOrder` — module" msgstr "`getDefaultResultOrder` — Modul" -#: src/api/reference.md:988 src/api/reference.md:1097 +#: src/api/reference.md:990 src/api/reference.md:1099 msgid "`getServers` — module" msgstr "`getServers` — Modul" -#: src/api/reference.md:989 src/api/reference.md:1098 +#: src/api/reference.md:991 src/api/reference.md:1100 msgid "`getServers` — instance _(class: `Resolver`)_" msgstr "`getServers` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:990 src/api/reference.md:1099 +#: src/api/reference.md:992 src/api/reference.md:1101 msgid "`lookup` — module" msgstr "`lookup` — Modul" -#: src/api/reference.md:991 src/api/reference.md:1100 +#: src/api/reference.md:993 src/api/reference.md:1102 msgid "`lookupService` — module" msgstr "`lookupService` — Modul" -#: src/api/reference.md:992 src/api/reference.md:1101 src/api/reference.md:2085 -#: src/api/reference.md:2111 src/api/reference.md:2137 +#: src/api/reference.md:994 src/api/reference.md:1103 src/api/reference.md:2070 +#: src/api/reference.md:2096 src/api/reference.md:2122 #: src/api/reference.md:3416 msgid "`resolve` — module" msgstr "`resolve` — Modul" -#: src/api/reference.md:993 src/api/reference.md:1102 +#: src/api/reference.md:995 src/api/reference.md:1104 msgid "`resolve` — instance _(class: `Resolver`)_" msgstr "`resolve` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:994 src/api/reference.md:1103 +#: src/api/reference.md:996 src/api/reference.md:1105 msgid "`resolve4` — module" msgstr "`resolve4` — Modul" -#: src/api/reference.md:995 src/api/reference.md:1104 +#: src/api/reference.md:997 src/api/reference.md:1106 msgid "`resolve4` — instance _(class: `Resolver`)_" msgstr "`resolve4` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:996 src/api/reference.md:1105 +#: src/api/reference.md:998 src/api/reference.md:1107 msgid "`resolve6` — module" msgstr "`resolve6` — Modul" -#: src/api/reference.md:997 src/api/reference.md:1106 +#: src/api/reference.md:999 src/api/reference.md:1108 msgid "`resolve6` — instance _(class: `Resolver`)_" msgstr "`resolve6` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:998 src/api/reference.md:1107 +#: src/api/reference.md:1000 src/api/reference.md:1109 msgid "`resolveAny` — module" msgstr "`resolveAny` — Modul" -#: src/api/reference.md:999 src/api/reference.md:1108 +#: src/api/reference.md:1001 src/api/reference.md:1110 msgid "`resolveAny` — instance _(class: `Resolver`)_" msgstr "`resolveAny` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1000 src/api/reference.md:1109 +#: src/api/reference.md:1002 src/api/reference.md:1111 msgid "`resolveCaa` — module" msgstr "`resolveCaa` — Modul" -#: src/api/reference.md:1001 src/api/reference.md:1110 +#: src/api/reference.md:1003 src/api/reference.md:1112 msgid "`resolveCaa` — instance _(class: `Resolver`)_" msgstr "`resolveCaa` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1002 src/api/reference.md:1111 +#: src/api/reference.md:1004 src/api/reference.md:1113 msgid "`resolveCname` — module" msgstr "`resolveCname` — Modul" -#: src/api/reference.md:1003 src/api/reference.md:1112 +#: src/api/reference.md:1005 src/api/reference.md:1114 msgid "`resolveCname` — instance _(class: `Resolver`)_" msgstr "`resolveCname` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1004 src/api/reference.md:1113 +#: src/api/reference.md:1006 src/api/reference.md:1115 msgid "`resolveMx` — module" msgstr "`resolveMx` — Modul" -#: src/api/reference.md:1005 src/api/reference.md:1114 +#: src/api/reference.md:1007 src/api/reference.md:1116 msgid "`resolveMx` — instance _(class: `Resolver`)_" msgstr "`resolveMx` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1006 src/api/reference.md:1115 +#: src/api/reference.md:1008 src/api/reference.md:1117 msgid "`resolveNaptr` — module" msgstr "`resolveNaptr` — Modul" -#: src/api/reference.md:1007 src/api/reference.md:1116 +#: src/api/reference.md:1009 src/api/reference.md:1118 msgid "`resolveNaptr` — instance _(class: `Resolver`)_" msgstr "`resolveNaptr` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1008 src/api/reference.md:1117 +#: src/api/reference.md:1010 src/api/reference.md:1119 msgid "`resolveNs` — module" msgstr "`resolveNs` — Modul" -#: src/api/reference.md:1009 src/api/reference.md:1118 +#: src/api/reference.md:1011 src/api/reference.md:1120 msgid "`resolveNs` — instance _(class: `Resolver`)_" msgstr "`resolveNs` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1010 src/api/reference.md:1119 +#: src/api/reference.md:1012 src/api/reference.md:1121 msgid "`resolvePtr` — module" msgstr "`resolvePtr` — Modul" -#: src/api/reference.md:1011 src/api/reference.md:1120 +#: src/api/reference.md:1013 src/api/reference.md:1122 msgid "`resolvePtr` — instance _(class: `Resolver`)_" msgstr "`resolvePtr` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1012 src/api/reference.md:1121 +#: src/api/reference.md:1014 src/api/reference.md:1123 msgid "`resolveSoa` — module" msgstr "`resolveSoa` — Modul" -#: src/api/reference.md:1013 src/api/reference.md:1122 +#: src/api/reference.md:1015 src/api/reference.md:1124 msgid "`resolveSoa` — instance _(class: `Resolver`)_" msgstr "`resolveSoa` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1014 src/api/reference.md:1123 +#: src/api/reference.md:1016 src/api/reference.md:1125 msgid "`resolveSrv` — module" msgstr "`resolveSrv` — Modul" -#: src/api/reference.md:1015 src/api/reference.md:1124 +#: src/api/reference.md:1017 src/api/reference.md:1126 msgid "`resolveSrv` — instance _(class: `Resolver`)_" msgstr "`resolveSrv` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1016 src/api/reference.md:1125 +#: src/api/reference.md:1018 src/api/reference.md:1127 msgid "`resolveTlsa` — module" msgstr "`resolveTlsa` — Modul" -#: src/api/reference.md:1017 src/api/reference.md:1126 +#: src/api/reference.md:1019 src/api/reference.md:1128 msgid "`resolveTlsa` — instance _(class: `Resolver`)_" msgstr "`resolveTlsa` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1018 src/api/reference.md:1127 +#: src/api/reference.md:1020 src/api/reference.md:1129 msgid "`resolveTxt` — module" msgstr "`resolveTxt` — Modul" -#: src/api/reference.md:1019 src/api/reference.md:1128 +#: src/api/reference.md:1021 src/api/reference.md:1130 msgid "`resolveTxt` — instance _(class: `Resolver`)_" msgstr "`resolveTxt` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1020 src/api/reference.md:1129 -#: src/api/reference.md:1801 +#: src/api/reference.md:1022 src/api/reference.md:1131 +#: src/api/reference.md:1803 msgid "`reverse` — module" msgstr "`reverse` — Modul" -#: src/api/reference.md:1021 src/api/reference.md:1130 +#: src/api/reference.md:1023 src/api/reference.md:1132 msgid "`reverse` — instance _(class: `Resolver`)_" msgstr "`reverse` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1022 src/api/reference.md:1131 +#: src/api/reference.md:1024 src/api/reference.md:1133 msgid "`setDefaultResultOrder` — module" msgstr "`setDefaultResultOrder` — Modul" -#: src/api/reference.md:1023 src/api/reference.md:1132 +#: src/api/reference.md:1025 src/api/reference.md:1134 msgid "`setLocalAddress` — instance _(class: `Resolver`)_" msgstr "`setLocalAddress` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1024 src/api/reference.md:1133 +#: src/api/reference.md:1026 src/api/reference.md:1135 msgid "`setServers` — module" msgstr "`setServers` — Modul" -#: src/api/reference.md:1025 src/api/reference.md:1134 +#: src/api/reference.md:1027 src/api/reference.md:1136 msgid "`setServers` — instance _(class: `Resolver`)_" msgstr "`setServers` — Instanz _(Klasse: `Resolver`)_" -#: src/api/reference.md:1029 src/api/reference.md:1030 +#: src/api/reference.md:1031 src/api/reference.md:1032 msgid "`ADDRCONFIG`" msgstr "`ADDRCONFIG`" -#: src/api/reference.md:1031 src/api/reference.md:1032 -#: src/api/reference.md:1138 +#: src/api/reference.md:1033 src/api/reference.md:1034 +#: src/api/reference.md:1140 msgid "`ADDRGETNETWORKPARAMS`" msgstr "`ADDRGETNETWORKPARAMS`" -#: src/api/reference.md:1033 src/api/reference.md:1034 +#: src/api/reference.md:1035 src/api/reference.md:1036 msgid "`ALL`" msgstr "`ALL`" -#: src/api/reference.md:1035 src/api/reference.md:1036 -#: src/api/reference.md:1139 +#: src/api/reference.md:1037 src/api/reference.md:1038 +#: src/api/reference.md:1141 msgid "`BADFAMILY`" msgstr "`BADFAMILY`" -#: src/api/reference.md:1037 src/api/reference.md:1038 -#: src/api/reference.md:1140 +#: src/api/reference.md:1039 src/api/reference.md:1040 +#: src/api/reference.md:1142 msgid "`BADFLAGS`" msgstr "`BADFLAGS`" -#: src/api/reference.md:1039 src/api/reference.md:1040 -#: src/api/reference.md:1141 +#: src/api/reference.md:1041 src/api/reference.md:1042 +#: src/api/reference.md:1143 msgid "`BADHINTS`" msgstr "`BADHINTS`" -#: src/api/reference.md:1041 src/api/reference.md:1042 -#: src/api/reference.md:1142 +#: src/api/reference.md:1043 src/api/reference.md:1044 +#: src/api/reference.md:1144 msgid "`BADNAME`" msgstr "`BADNAME`" -#: src/api/reference.md:1043 src/api/reference.md:1044 -#: src/api/reference.md:1143 +#: src/api/reference.md:1045 src/api/reference.md:1046 +#: src/api/reference.md:1145 msgid "`BADQUERY`" msgstr "`BADQUERY`" -#: src/api/reference.md:1045 src/api/reference.md:1046 -#: src/api/reference.md:1144 +#: src/api/reference.md:1047 src/api/reference.md:1048 +#: src/api/reference.md:1146 msgid "`BADRESP`" msgstr "`BADRESP`" -#: src/api/reference.md:1047 src/api/reference.md:1048 -#: src/api/reference.md:1145 +#: src/api/reference.md:1049 src/api/reference.md:1050 +#: src/api/reference.md:1147 msgid "`BADSTR`" msgstr "`BADSTR`" -#: src/api/reference.md:1049 src/api/reference.md:1050 -#: src/api/reference.md:1146 +#: src/api/reference.md:1051 src/api/reference.md:1052 +#: src/api/reference.md:1148 msgid "`CANCELLED`" msgstr "`CANCELLED`" -#: src/api/reference.md:1051 src/api/reference.md:1052 -#: src/api/reference.md:1147 +#: src/api/reference.md:1053 src/api/reference.md:1054 +#: src/api/reference.md:1149 msgid "`CONNREFUSED`" msgstr "`CONNREFUSED`" -#: src/api/reference.md:1053 src/api/reference.md:1054 -#: src/api/reference.md:1148 +#: src/api/reference.md:1055 src/api/reference.md:1056 +#: src/api/reference.md:1150 msgid "`DESTRUCTION`" msgstr "`DESTRUCTION`" -#: src/api/reference.md:1055 src/api/reference.md:1056 -#: src/api/reference.md:1149 +#: src/api/reference.md:1057 src/api/reference.md:1058 +#: src/api/reference.md:1151 msgid "`EOF`" msgstr "`EOF`" -#: src/api/reference.md:1057 src/api/reference.md:1058 -#: src/api/reference.md:1150 +#: src/api/reference.md:1059 src/api/reference.md:1060 +#: src/api/reference.md:1152 msgid "`FILE`" msgstr "`FILE`" -#: src/api/reference.md:1059 src/api/reference.md:1060 -#: src/api/reference.md:1151 +#: src/api/reference.md:1061 src/api/reference.md:1062 +#: src/api/reference.md:1153 msgid "`FORMERR`" msgstr "`FORMERR`" -#: src/api/reference.md:1061 src/api/reference.md:1062 -#: src/api/reference.md:1152 +#: src/api/reference.md:1063 src/api/reference.md:1064 +#: src/api/reference.md:1154 msgid "`LOADIPHLPAPI`" msgstr "`LOADIPHLPAPI`" -#: src/api/reference.md:1063 src/api/reference.md:1064 -#: src/api/reference.md:1153 +#: src/api/reference.md:1065 src/api/reference.md:1066 +#: src/api/reference.md:1155 msgid "`NODATA`" msgstr "`NODATA`" -#: src/api/reference.md:1065 src/api/reference.md:1066 -#: src/api/reference.md:1154 +#: src/api/reference.md:1067 src/api/reference.md:1068 +#: src/api/reference.md:1156 msgid "`NOMEM`" msgstr "`NOMEM`" -#: src/api/reference.md:1067 src/api/reference.md:1068 -#: src/api/reference.md:1155 +#: src/api/reference.md:1069 src/api/reference.md:1070 +#: src/api/reference.md:1157 msgid "`NONAME`" msgstr "`NONAME`" -#: src/api/reference.md:1069 src/api/reference.md:1070 -#: src/api/reference.md:1156 +#: src/api/reference.md:1071 src/api/reference.md:1072 +#: src/api/reference.md:1158 msgid "`NOTFOUND`" msgstr "`NOTFOUND`" -#: src/api/reference.md:1071 src/api/reference.md:1072 -#: src/api/reference.md:1157 +#: src/api/reference.md:1073 src/api/reference.md:1074 +#: src/api/reference.md:1159 msgid "`NOTIMP`" msgstr "`NOTIMP`" -#: src/api/reference.md:1073 src/api/reference.md:1074 -#: src/api/reference.md:1158 +#: src/api/reference.md:1075 src/api/reference.md:1076 +#: src/api/reference.md:1160 msgid "`NOTINITIALIZED`" msgstr "`NOTINITIALIZED`" -#: src/api/reference.md:1075 src/api/reference.md:1076 -#: src/api/reference.md:1159 +#: src/api/reference.md:1077 src/api/reference.md:1078 +#: src/api/reference.md:1161 msgid "`REFUSED`" msgstr "`REFUSED`" -#: src/api/reference.md:1077 src/api/reference.md:1078 -#: src/api/reference.md:1160 +#: src/api/reference.md:1079 src/api/reference.md:1080 +#: src/api/reference.md:1162 msgid "`SERVFAIL`" msgstr "`SERVFAIL`" -#: src/api/reference.md:1079 src/api/reference.md:1080 -#: src/api/reference.md:1161 +#: src/api/reference.md:1081 src/api/reference.md:1082 +#: src/api/reference.md:1163 msgid "`TIMEOUT`" msgstr "`TIMEOUT`" -#: src/api/reference.md:1081 src/api/reference.md:1082 +#: src/api/reference.md:1083 src/api/reference.md:1084 msgid "`V4MAPPED`" msgstr "`V4MAPPED`" -#: src/api/reference.md:1084 src/api/reference.md:1394 +#: src/api/reference.md:1086 src/api/reference.md:1396 #: src/api/reference.md:3086 src/api/reference.md:3087 #: src/api/reference.md:3276 msgid "`promises`" msgstr "`promises`" -#: src/api/reference.md:1086 +#: src/api/reference.md:1088 msgid "`dns/promises`" msgstr "`dns/promises`" -#: src/api/reference.md:1164 src/api/reference.md:2783 +#: src/api/reference.md:1166 src/api/reference.md:2783 msgid "`domain`" msgstr "`domain`" -#: src/api/reference.md:1168 +#: src/api/reference.md:1170 msgid "`Domain`" msgstr "`Domain`" -#: src/api/reference.md:1172 +#: src/api/reference.md:1174 msgid "`Domain` — module" msgstr "`Domain` — Modul" -#: src/api/reference.md:1173 +#: src/api/reference.md:1175 msgid "`add` — instance" msgstr "`add` — Instanz" -#: src/api/reference.md:1174 src/api/reference.md:1215 +#: src/api/reference.md:1176 src/api/reference.md:1217 #: src/api/reference.md:3021 msgid "`addListener` — instance" msgstr "`addListener` — Instanz" -#: src/api/reference.md:1175 +#: src/api/reference.md:1177 msgid "`bind` — instance" msgstr "`bind` — Instanz" -#: src/api/reference.md:1176 src/api/reference.md:2255 +#: src/api/reference.md:1178 src/api/reference.md:2255 msgid "`create` — module" msgstr "`create` — Modul" -#: src/api/reference.md:1177 +#: src/api/reference.md:1179 msgid "`createDomain` — module" msgstr "`createDomain` — Modul" -#: src/api/reference.md:1178 src/api/reference.md:1219 +#: src/api/reference.md:1180 src/api/reference.md:1221 #: src/api/reference.md:3030 src/api/reference.md:3699 msgid "`emit` — instance" msgstr "`emit` — Instanz" -#: src/api/reference.md:1179 +#: src/api/reference.md:1181 msgid "`enter` — instance" msgstr "`enter` — Instanz" -#: src/api/reference.md:1181 +#: src/api/reference.md:1183 msgid "`intercept` — instance" msgstr "`intercept` — Instanz" -#: src/api/reference.md:1182 src/api/reference.md:1230 +#: src/api/reference.md:1184 src/api/reference.md:1232 #: src/api/reference.md:2849 src/api/reference.md:3046 #: src/api/reference.md:3701 msgid "`on` — instance" msgstr "`on` — Instanz" -#: src/api/reference.md:1183 +#: src/api/reference.md:1185 msgid "`remove` — instance" msgstr "`remove` — Instanz" -#: src/api/reference.md:1188 +#: src/api/reference.md:1190 msgid "`_stack`" msgstr "`_stack`" -#: src/api/reference.md:1189 +#: src/api/reference.md:1191 msgid "`active`" msgstr "`active`" -#: src/api/reference.md:1190 +#: src/api/reference.md:1192 msgid "`members`" msgstr "`members`" -#: src/api/reference.md:1196 +#: src/api/reference.md:1198 msgid "`createRandom` — module _(class: `Wallet`)_" msgstr "`createRandom` — Modul _(Klasse: `Wallet`)_" -#: src/api/reference.md:1197 +#: src/api/reference.md:1199 msgid "`formatEther` — module" msgstr "`formatEther` — Modul" -#: src/api/reference.md:1198 +#: src/api/reference.md:1200 msgid "`formatUnits` — module" msgstr "`formatUnits` — Modul" -#: src/api/reference.md:1199 +#: src/api/reference.md:1201 msgid "`getAddress` — module" msgstr "`getAddress` — Modul" -#: src/api/reference.md:1200 +#: src/api/reference.md:1202 msgid "`parseEther` — module" msgstr "`parseEther` — Modul" -#: src/api/reference.md:1201 +#: src/api/reference.md:1203 msgid "`parseUnits` — module" msgstr "`parseUnits` — Modul" -#: src/api/reference.md:1207 +#: src/api/reference.md:1205 +msgid "`events`" +msgstr "`events`" + +#: src/api/reference.md:1209 msgid "`EventEmitter`" msgstr "`EventEmitter`" -#: src/api/reference.md:1208 +#: src/api/reference.md:1210 msgid "`EventEmitterAsyncResource`" msgstr "`EventEmitterAsyncResource`" -#: src/api/reference.md:1212 +#: src/api/reference.md:1214 msgid "`EventEmitter` — module" msgstr "`EventEmitter` — Modul" -#: src/api/reference.md:1213 +#: src/api/reference.md:1215 msgid "`EventEmitterAsyncResource` — module" msgstr "`EventEmitterAsyncResource` — Modul" -#: src/api/reference.md:1214 +#: src/api/reference.md:1216 msgid "`addAbortListener` — module" msgstr "`addAbortListener` — Modul" -#: src/api/reference.md:1216 +#: src/api/reference.md:1218 msgid "`asyncId` — instance _(class: `EventEmitterAsyncResource`)_" msgstr "`asyncId` — Instanz _(Klasse: `EventEmitterAsyncResource`)_" -#: src/api/reference.md:1217 +#: src/api/reference.md:1219 msgid "`asyncResource` — instance _(class: `EventEmitterAsyncResource`)_" msgstr "`asyncResource` — Instanz _(Klasse: `EventEmitterAsyncResource`)_" -#: src/api/reference.md:1218 +#: src/api/reference.md:1220 msgid "`domain` — instance" msgstr "`domain` — Instanz" -#: src/api/reference.md:1220 +#: src/api/reference.md:1222 msgid "`emitDestroy` — instance _(class: `EventEmitterAsyncResource`)_" msgstr "`emitDestroy` — Instanz _(Klasse: `EventEmitterAsyncResource`)_" -#: src/api/reference.md:1221 src/api/reference.md:3033 +#: src/api/reference.md:1223 src/api/reference.md:3033 msgid "`eventNames` — instance" msgstr "`eventNames` — Instanz" -#: src/api/reference.md:1222 +#: src/api/reference.md:1224 msgid "`getEventListeners` — module" msgstr "`getEventListeners` — Modul" -#: src/api/reference.md:1223 src/api/reference.md:3036 +#: src/api/reference.md:1225 src/api/reference.md:3036 msgid "`getMaxListeners` — instance" msgstr "`getMaxListeners` — Instanz" -#: src/api/reference.md:1224 +#: src/api/reference.md:1226 msgid "`getMaxListeners` — module" msgstr "`getMaxListeners` — Modul" -#: src/api/reference.md:1225 +#: src/api/reference.md:1227 msgid "`init` — module" msgstr "`init` — Modul" -#: src/api/reference.md:1226 src/api/reference.md:3043 +#: src/api/reference.md:1228 src/api/reference.md:3043 msgid "`listenerCount` — instance" msgstr "`listenerCount` — Instanz" -#: src/api/reference.md:1227 +#: src/api/reference.md:1229 msgid "`listenerCount` — module" msgstr "`listenerCount` — Modul" -#: src/api/reference.md:1228 src/api/reference.md:3044 +#: src/api/reference.md:1230 src/api/reference.md:3044 msgid "`listeners` — instance" msgstr "`listeners` — Instanz" -#: src/api/reference.md:1229 src/api/reference.md:3045 +#: src/api/reference.md:1231 src/api/reference.md:3045 msgid "`off` — instance" msgstr "`off` — Instanz" -#: src/api/reference.md:1231 +#: src/api/reference.md:1233 msgid "`on` — module" msgstr "`on` — Modul" -#: src/api/reference.md:1232 src/api/reference.md:3047 +#: src/api/reference.md:1234 src/api/reference.md:3047 msgid "`once` — instance" msgstr "`once` — Instanz" -#: src/api/reference.md:1233 +#: src/api/reference.md:1235 msgid "`once` — module" msgstr "`once` — Modul" -#: src/api/reference.md:1234 src/api/reference.md:3051 +#: src/api/reference.md:1236 src/api/reference.md:3051 msgid "`prependListener` — instance" msgstr "`prependListener` — Instanz" -#: src/api/reference.md:1235 src/api/reference.md:3052 +#: src/api/reference.md:1237 src/api/reference.md:3052 msgid "`prependOnceListener` — instance" msgstr "`prependOnceListener` — Instanz" -#: src/api/reference.md:1236 src/api/reference.md:3054 +#: src/api/reference.md:1238 src/api/reference.md:3054 msgid "`rawListeners` — instance" msgstr "`rawListeners` — Instanz" -#: src/api/reference.md:1237 src/api/reference.md:3065 +#: src/api/reference.md:1239 src/api/reference.md:3065 msgid "`removeAllListeners` — instance" msgstr "`removeAllListeners` — Instanz" -#: src/api/reference.md:1238 src/api/reference.md:3066 +#: src/api/reference.md:1240 src/api/reference.md:3066 msgid "`removeListener` — instance" msgstr "`removeListener` — Instanz" -#: src/api/reference.md:1239 src/api/reference.md:3070 +#: src/api/reference.md:1241 src/api/reference.md:3070 msgid "`setMaxListeners` — instance" msgstr "`setMaxListeners` — Instanz" -#: src/api/reference.md:1240 +#: src/api/reference.md:1242 msgid "`setMaxListeners` — module" msgstr "`setMaxListeners` — Modul" -#: src/api/reference.md:1241 +#: src/api/reference.md:1243 msgid "`triggerAsyncId` — instance _(class: `EventEmitterAsyncResource`)_" msgstr "`triggerAsyncId` — Instanz _(Klasse: `EventEmitterAsyncResource`)_" -#: src/api/reference.md:1245 +#: src/api/reference.md:1247 msgid "`captureRejectionSymbol`" msgstr "`captureRejectionSymbol`" -#: src/api/reference.md:1246 +#: src/api/reference.md:1248 msgid "`captureRejections`" msgstr "`captureRejections`" -#: src/api/reference.md:1248 +#: src/api/reference.md:1250 msgid "`defaultMaxListeners`" msgstr "`defaultMaxListeners`" -#: src/api/reference.md:1249 +#: src/api/reference.md:1251 msgid "`errorMonitor`" msgstr "`errorMonitor`" -#: src/api/reference.md:1250 +#: src/api/reference.md:1252 msgid "`usingDomains`" msgstr "`usingDomains`" -#: src/api/reference.md:1252 +#: src/api/reference.md:1254 msgid "`fetch`" msgstr "`fetch`" -#: src/api/reference.md:1257 src/api/reference.md:2011 +#: src/api/reference.md:1259 src/api/reference.md:1996 msgid "`FormData`" msgstr "`FormData`" -#: src/api/reference.md:1258 src/api/reference.md:2012 +#: src/api/reference.md:1260 src/api/reference.md:1997 msgid "`Headers`" msgstr "`Headers`" -#: src/api/reference.md:1259 src/api/reference.md:2013 +#: src/api/reference.md:1261 src/api/reference.md:1998 msgid "`Request`" msgstr "`Request`" -#: src/api/reference.md:1260 src/api/reference.md:2014 +#: src/api/reference.md:1262 src/api/reference.md:1999 msgid "`Response`" msgstr "`Response`" -#: src/api/reference.md:1266 +#: src/api/reference.md:1268 msgid "`ffi`" msgstr "`ffi`" -#: src/api/reference.md:1271 +#: src/api/reference.md:1273 msgid "`getRawPointer` — module" msgstr "`getRawPointer` — Modul" -#: src/api/reference.md:1274 +#: src/api/reference.md:1276 msgid "`toString` — module" msgstr "`toString` — Modul" -#: src/api/reference.md:1280 +#: src/api/reference.md:1282 msgid "`fs`" msgstr "`fs`" -#: src/api/reference.md:1284 +#: src/api/reference.md:1286 msgid "`Dir`" msgstr "`Dir`" -#: src/api/reference.md:1285 +#: src/api/reference.md:1287 msgid "`Dirent`" msgstr "`Dirent`" -#: src/api/reference.md:1286 +#: src/api/reference.md:1288 msgid "`FileReadStream`" msgstr "`FileReadStream`" -#: src/api/reference.md:1287 +#: src/api/reference.md:1289 msgid "`FileWriteStream`" msgstr "`FileWriteStream`" -#: src/api/reference.md:1288 src/api/reference.md:3339 +#: src/api/reference.md:1290 src/api/reference.md:3339 msgid "`ReadStream`" msgstr "`ReadStream`" -#: src/api/reference.md:1289 +#: src/api/reference.md:1291 msgid "`Stats`" msgstr "`Stats`" -#: src/api/reference.md:1290 +#: src/api/reference.md:1292 msgid "`Utf8Stream`" msgstr "`Utf8Stream`" -#: src/api/reference.md:1291 src/api/reference.md:3340 +#: src/api/reference.md:1293 src/api/reference.md:3340 msgid "`WriteStream`" msgstr "`WriteStream`" -#: src/api/reference.md:1295 src/api/reference.md:1296 +#: src/api/reference.md:1297 src/api/reference.md:1298 msgid "`_toUnixTimestamp` — module" msgstr "`_toUnixTimestamp` — Modul" -#: src/api/reference.md:1297 src/api/reference.md:1400 +#: src/api/reference.md:1299 src/api/reference.md:1402 msgid "`access` — module" msgstr "`access` — Modul" -#: src/api/reference.md:1298 +#: src/api/reference.md:1300 msgid "`accessSync` — module" msgstr "`accessSync` — Modul" -#: src/api/reference.md:1299 src/api/reference.md:1401 +#: src/api/reference.md:1301 src/api/reference.md:1403 msgid "`appendFile` — module" msgstr "`appendFile` — Modul" -#: src/api/reference.md:1300 +#: src/api/reference.md:1302 msgid "`appendFileSync` — module" msgstr "`appendFileSync` — Modul" -#: src/api/reference.md:1301 src/api/reference.md:1402 +#: src/api/reference.md:1303 src/api/reference.md:1404 msgid "`chmod` — module" msgstr "`chmod` — Modul" -#: src/api/reference.md:1302 +#: src/api/reference.md:1304 msgid "`chmodSync` — module" msgstr "`chmodSync` — Modul" -#: src/api/reference.md:1303 src/api/reference.md:1403 +#: src/api/reference.md:1305 src/api/reference.md:1405 msgid "`chown` — module" msgstr "`chown` — Modul" -#: src/api/reference.md:1304 +#: src/api/reference.md:1306 msgid "`chownSync` — module" msgstr "`chownSync` — Modul" -#: src/api/reference.md:1305 src/api/reference.md:1735 +#: src/api/reference.md:1307 src/api/reference.md:1737 msgid "`close` — module" msgstr "`close` — Modul" -#: src/api/reference.md:1306 +#: src/api/reference.md:1308 msgid "`closeSync` — module" msgstr "`closeSync` — Modul" -#: src/api/reference.md:1307 src/api/reference.md:1404 +#: src/api/reference.md:1309 src/api/reference.md:1406 msgid "`copyFile` — module" msgstr "`copyFile` — Modul" -#: src/api/reference.md:1308 +#: src/api/reference.md:1310 msgid "`copyFileSync` — module" msgstr "`copyFileSync` — Modul" -#: src/api/reference.md:1309 src/api/reference.md:1405 +#: src/api/reference.md:1311 src/api/reference.md:1407 msgid "`cp` — module" msgstr "`cp` — Modul" -#: src/api/reference.md:1310 +#: src/api/reference.md:1312 msgid "`cpSync` — module" msgstr "`cpSync` — Modul" -#: src/api/reference.md:1311 +#: src/api/reference.md:1313 msgid "`createReadStream` — module" msgstr "`createReadStream` — Modul" -#: src/api/reference.md:1312 +#: src/api/reference.md:1314 msgid "`createWriteStream` — module" msgstr "`createWriteStream` — Modul" -#: src/api/reference.md:1313 +#: src/api/reference.md:1315 msgid "`exists` — module" msgstr "`exists` — Modul" -#: src/api/reference.md:1314 +#: src/api/reference.md:1316 msgid "`existsSync` — module" msgstr "`existsSync` — Modul" -#: src/api/reference.md:1315 +#: src/api/reference.md:1317 msgid "`fchmod` — module" msgstr "`fchmod` — Modul" -#: src/api/reference.md:1316 +#: src/api/reference.md:1318 msgid "`fchmodSync` — module" msgstr "`fchmodSync` — Modul" -#: src/api/reference.md:1317 +#: src/api/reference.md:1319 msgid "`fchown` — module" msgstr "`fchown` — Modul" -#: src/api/reference.md:1318 +#: src/api/reference.md:1320 msgid "`fchownSync` — module" msgstr "`fchownSync` — Modul" -#: src/api/reference.md:1319 +#: src/api/reference.md:1321 msgid "`fdatasync` — module" msgstr "`fdatasync` — Modul" -#: src/api/reference.md:1320 +#: src/api/reference.md:1322 msgid "`fdatasyncSync` — module" msgstr "`fdatasyncSync` — Modul" -#: src/api/reference.md:1321 +#: src/api/reference.md:1323 msgid "`fstat` — module" msgstr "`fstat` — Modul" -#: src/api/reference.md:1322 +#: src/api/reference.md:1324 msgid "`fstatSync` — module" msgstr "`fstatSync` — Modul" -#: src/api/reference.md:1323 +#: src/api/reference.md:1325 msgid "`fsync` — module" msgstr "`fsync` — Modul" -#: src/api/reference.md:1324 +#: src/api/reference.md:1326 msgid "`fsyncSync` — module" msgstr "`fsyncSync` — Modul" -#: src/api/reference.md:1325 +#: src/api/reference.md:1327 msgid "`ftruncate` — module" msgstr "`ftruncate` — Modul" -#: src/api/reference.md:1326 +#: src/api/reference.md:1328 msgid "`ftruncateSync` — module" msgstr "`ftruncateSync` — Modul" -#: src/api/reference.md:1327 +#: src/api/reference.md:1329 msgid "`futimes` — module" msgstr "`futimes` — Modul" -#: src/api/reference.md:1328 +#: src/api/reference.md:1330 msgid "`futimesSync` — module" msgstr "`futimesSync` — Modul" -#: src/api/reference.md:1329 src/api/reference.md:1406 +#: src/api/reference.md:1331 src/api/reference.md:1408 msgid "`glob` — module" msgstr "`glob` — Modul" -#: src/api/reference.md:1330 +#: src/api/reference.md:1332 msgid "`globSync` — module" msgstr "`globSync` — Modul" -#: src/api/reference.md:1331 src/api/reference.md:1407 +#: src/api/reference.md:1333 src/api/reference.md:1409 msgid "`lchmod` — module" msgstr "`lchmod` — Modul" -#: src/api/reference.md:1332 +#: src/api/reference.md:1334 msgid "`lchmodSync` — module" msgstr "`lchmodSync` — Modul" -#: src/api/reference.md:1333 src/api/reference.md:1408 +#: src/api/reference.md:1335 src/api/reference.md:1410 msgid "`lchown` — module" msgstr "`lchown` — Modul" -#: src/api/reference.md:1334 +#: src/api/reference.md:1336 msgid "`lchownSync` — module" msgstr "`lchownSync` — Modul" -#: src/api/reference.md:1335 src/api/reference.md:1409 +#: src/api/reference.md:1337 src/api/reference.md:1411 msgid "`link` — module" msgstr "`link` — Modul" -#: src/api/reference.md:1336 +#: src/api/reference.md:1338 msgid "`linkSync` — module" msgstr "`linkSync` — Modul" -#: src/api/reference.md:1337 src/api/reference.md:1410 +#: src/api/reference.md:1339 src/api/reference.md:1412 msgid "`lstat` — module" msgstr "`lstat` — Modul" -#: src/api/reference.md:1338 +#: src/api/reference.md:1340 msgid "`lstatSync` — module" msgstr "`lstatSync` — Modul" -#: src/api/reference.md:1339 src/api/reference.md:1411 +#: src/api/reference.md:1341 src/api/reference.md:1413 msgid "`lutimes` — module" msgstr "`lutimes` — Modul" -#: src/api/reference.md:1340 +#: src/api/reference.md:1342 msgid "`lutimesSync` — module" msgstr "`lutimesSync` — Modul" -#: src/api/reference.md:1341 src/api/reference.md:1412 +#: src/api/reference.md:1343 src/api/reference.md:1414 msgid "`mkdir` — module" msgstr "`mkdir` — Modul" -#: src/api/reference.md:1342 +#: src/api/reference.md:1344 msgid "`mkdirSync` — module" msgstr "`mkdirSync` — Modul" -#: src/api/reference.md:1343 src/api/reference.md:1413 +#: src/api/reference.md:1345 src/api/reference.md:1415 msgid "`mkdtemp` — module" msgstr "`mkdtemp` — Modul" -#: src/api/reference.md:1344 +#: src/api/reference.md:1346 msgid "`mkdtempDisposableSync` — module" msgstr "`mkdtempDisposableSync` — Modul" -#: src/api/reference.md:1345 +#: src/api/reference.md:1347 msgid "`mkdtempSync` — module" msgstr "`mkdtempSync` — Modul" -#: src/api/reference.md:1346 src/api/reference.md:1415 +#: src/api/reference.md:1348 src/api/reference.md:1417 msgid "`open` — module" msgstr "`open` — Modul" -#: src/api/reference.md:1347 +#: src/api/reference.md:1349 msgid "`openAsBlob` — module" msgstr "`openAsBlob` — Modul" -#: src/api/reference.md:1348 +#: src/api/reference.md:1350 msgid "`openSync` — module" msgstr "`openSync` — Modul" -#: src/api/reference.md:1349 src/api/reference.md:1416 +#: src/api/reference.md:1351 src/api/reference.md:1418 msgid "`opendir` — module" msgstr "`opendir` — Modul" -#: src/api/reference.md:1350 +#: src/api/reference.md:1352 msgid "`opendirSync` — module" msgstr "`opendirSync` — Modul" -#: src/api/reference.md:1351 +#: src/api/reference.md:1353 msgid "`read` — module" msgstr "`read` — Modul" -#: src/api/reference.md:1352 src/api/reference.md:1419 +#: src/api/reference.md:1354 src/api/reference.md:1421 msgid "`readFile` — module" msgstr "`readFile` — Modul" -#: src/api/reference.md:1353 +#: src/api/reference.md:1355 msgid "`readFileSync` — module" msgstr "`readFileSync` — Modul" -#: src/api/reference.md:1354 +#: src/api/reference.md:1356 msgid "`readSync` — module" msgstr "`readSync` — Modul" -#: src/api/reference.md:1355 src/api/reference.md:1420 +#: src/api/reference.md:1357 src/api/reference.md:1422 msgid "`readdir` — module" msgstr "`readdir` — Modul" -#: src/api/reference.md:1356 +#: src/api/reference.md:1358 msgid "`readdirSync` — module" msgstr "`readdirSync` — Modul" -#: src/api/reference.md:1357 src/api/reference.md:1421 +#: src/api/reference.md:1359 src/api/reference.md:1423 msgid "`readlink` — module" msgstr "`readlink` — Modul" -#: src/api/reference.md:1358 +#: src/api/reference.md:1360 msgid "`readlinkSync` — module" msgstr "`readlinkSync` — Modul" -#: src/api/reference.md:1359 +#: src/api/reference.md:1361 msgid "`readv` — module" msgstr "`readv` — Modul" -#: src/api/reference.md:1360 +#: src/api/reference.md:1362 msgid "`readvSync` — module" msgstr "`readvSync` — Modul" -#: src/api/reference.md:1361 src/api/reference.md:1422 +#: src/api/reference.md:1363 src/api/reference.md:1424 msgid "`realpath` — module" msgstr "`realpath` — Modul" -#: src/api/reference.md:1362 +#: src/api/reference.md:1364 msgid "`realpathSync` — module" msgstr "`realpathSync` — Modul" -#: src/api/reference.md:1363 src/api/reference.md:1423 +#: src/api/reference.md:1365 src/api/reference.md:1425 msgid "`rename` — module" msgstr "`rename` — Modul" -#: src/api/reference.md:1364 +#: src/api/reference.md:1366 msgid "`renameSync` — module" msgstr "`renameSync` — Modul" -#: src/api/reference.md:1365 src/api/reference.md:1424 +#: src/api/reference.md:1367 src/api/reference.md:1426 msgid "`rm` — module" msgstr "`rm` — Modul" -#: src/api/reference.md:1366 +#: src/api/reference.md:1368 msgid "`rmSync` — module" msgstr "`rmSync` — Modul" -#: src/api/reference.md:1367 src/api/reference.md:1425 +#: src/api/reference.md:1369 src/api/reference.md:1427 msgid "`rmdir` — module" msgstr "`rmdir` — Modul" -#: src/api/reference.md:1368 +#: src/api/reference.md:1370 msgid "`rmdirSync` — module" msgstr "`rmdirSync` — Modul" -#: src/api/reference.md:1369 src/api/reference.md:1426 +#: src/api/reference.md:1371 src/api/reference.md:1428 msgid "`stat` — module" msgstr "`stat` — Modul" -#: src/api/reference.md:1370 +#: src/api/reference.md:1372 msgid "`statSync` — module" msgstr "`statSync` — Modul" -#: src/api/reference.md:1371 src/api/reference.md:1427 +#: src/api/reference.md:1373 src/api/reference.md:1429 msgid "`statfs` — module" msgstr "`statfs` — Modul" -#: src/api/reference.md:1372 +#: src/api/reference.md:1374 msgid "`statfsSync` — module" msgstr "`statfsSync` — Modul" -#: src/api/reference.md:1373 src/api/reference.md:1428 +#: src/api/reference.md:1375 src/api/reference.md:1430 msgid "`symlink` — module" msgstr "`symlink` — Modul" -#: src/api/reference.md:1374 +#: src/api/reference.md:1376 msgid "`symlinkSync` — module" msgstr "`symlinkSync` — Modul" -#: src/api/reference.md:1375 src/api/reference.md:1429 +#: src/api/reference.md:1377 src/api/reference.md:1431 msgid "`truncate` — module" msgstr "`truncate` — Modul" -#: src/api/reference.md:1376 +#: src/api/reference.md:1378 msgid "`truncateSync` — module" msgstr "`truncateSync` — Modul" -#: src/api/reference.md:1377 src/api/reference.md:1430 +#: src/api/reference.md:1379 src/api/reference.md:1432 msgid "`unlink` — module" msgstr "`unlink` — Modul" -#: src/api/reference.md:1378 +#: src/api/reference.md:1380 msgid "`unlinkSync` — module" msgstr "`unlinkSync` — Modul" -#: src/api/reference.md:1379 +#: src/api/reference.md:1381 msgid "`unwatchFile` — module" msgstr "`unwatchFile` — Modul" -#: src/api/reference.md:1380 src/api/reference.md:1431 +#: src/api/reference.md:1382 src/api/reference.md:1433 msgid "`utimes` — module" msgstr "`utimes` — Modul" -#: src/api/reference.md:1381 +#: src/api/reference.md:1383 msgid "`utimesSync` — module" msgstr "`utimesSync` — Modul" -#: src/api/reference.md:1382 src/api/reference.md:1432 +#: src/api/reference.md:1384 src/api/reference.md:1434 msgid "`watch` — module" msgstr "`watch` — Modul" -#: src/api/reference.md:1383 +#: src/api/reference.md:1385 msgid "`watchFile` — module" msgstr "`watchFile` — Modul" -#: src/api/reference.md:1385 src/api/reference.md:1433 +#: src/api/reference.md:1387 src/api/reference.md:1435 msgid "`writeFile` — module" msgstr "`writeFile` — Modul" -#: src/api/reference.md:1386 +#: src/api/reference.md:1388 msgid "`writeFileSync` — module" msgstr "`writeFileSync` — Modul" -#: src/api/reference.md:1387 +#: src/api/reference.md:1389 msgid "`writeSync` — module" msgstr "`writeSync` — Modul" -#: src/api/reference.md:1388 +#: src/api/reference.md:1390 msgid "`writev` — module" msgstr "`writev` — Modul" -#: src/api/reference.md:1389 +#: src/api/reference.md:1391 msgid "`writevSync` — module" msgstr "`writevSync` — Modul" -#: src/api/reference.md:1396 +#: src/api/reference.md:1398 msgid "`fs/promises`" msgstr "`fs/promises`" -#: src/api/reference.md:1414 +#: src/api/reference.md:1416 msgid "`mkdtempDisposable` — module" msgstr "`mkdtempDisposable` — Modul" -#: src/api/reference.md:1417 +#: src/api/reference.md:1419 msgid "`pull` — instance _(class: `FileHandle`)_" msgstr "`pull` — Instanz _(Klasse: `FileHandle`)_" -#: src/api/reference.md:1418 +#: src/api/reference.md:1420 msgid "`pullSync` — instance _(class: `FileHandle`)_" msgstr "`pullSync` — Instanz _(Klasse: `FileHandle`)_" -#: src/api/reference.md:1434 +#: src/api/reference.md:1436 msgid "`writer` — instance _(class: `FileHandle`)_" msgstr "`writer` — Instanz _(Klasse: `FileHandle`)_" -#: src/api/reference.md:1441 +#: src/api/reference.md:1443 msgid "`http`" msgstr "`http`" -#: src/api/reference.md:1445 src/api/reference.md:1676 +#: src/api/reference.md:1447 src/api/reference.md:1678 #: src/api/reference.md:3380 msgid "`Agent`" msgstr "`Agent`" -#: src/api/reference.md:1446 +#: src/api/reference.md:1448 msgid "`ClientRequest`" msgstr "`ClientRequest`" -#: src/api/reference.md:1447 src/api/reference.md:1448 +#: src/api/reference.md:1449 src/api/reference.md:1450 msgid "`IncomingMessage`" msgstr "`IncomingMessage`" -#: src/api/reference.md:1449 src/api/reference.md:1450 +#: src/api/reference.md:1451 src/api/reference.md:1452 msgid "`OutgoingMessage`" msgstr "`OutgoingMessage`" -#: src/api/reference.md:1451 src/api/reference.md:1452 -#: src/api/reference.md:1677 src/api/reference.md:1678 -#: src/api/reference.md:1879 +#: src/api/reference.md:1453 src/api/reference.md:1454 +#: src/api/reference.md:1679 src/api/reference.md:1680 +#: src/api/reference.md:1862 msgid "`Server`" msgstr "`Server`" -#: src/api/reference.md:1453 src/api/reference.md:1454 +#: src/api/reference.md:1455 src/api/reference.md:1456 msgid "`ServerResponse`" msgstr "`ServerResponse`" -#: src/api/reference.md:1455 src/api/reference.md:3686 +#: src/api/reference.md:1457 src/api/reference.md:3686 msgid "`WebSocket`" msgstr "`WebSocket`" -#: src/api/reference.md:1459 src/api/reference.md:1682 +#: src/api/reference.md:1461 src/api/reference.md:1684 #: src/api/reference.md:3385 msgid "`Agent` — module" msgstr "`Agent` — Modul" -#: src/api/reference.md:1460 src/api/reference.md:1683 -#: src/api/reference.md:1887 src/api/reference.md:3299 +#: src/api/reference.md:1462 src/api/reference.md:1685 +#: src/api/reference.md:1870 src/api/reference.md:3299 #: src/api/reference.md:3691 msgid "`Server` — module" msgstr "`Server` — Modul" -#: src/api/reference.md:1461 +#: src/api/reference.md:1463 msgid "`__get_aborted` — instance _(class: `ClientRequest`)_" msgstr "`__get_aborted` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1462 +#: src/api/reference.md:1464 msgid "`__get_aborted` — instance _(class: `IncomingMessage`)_" msgstr "`__get_aborted` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1463 +#: src/api/reference.md:1465 msgid "`__get_complete` — instance _(class: `IncomingMessage`)_" msgstr "`__get_complete` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1464 +#: src/api/reference.md:1466 msgid "`__get_connection` — instance _(class: `IncomingMessage`)_" msgstr "`__get_connection` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1465 +#: src/api/reference.md:1467 msgid "`__get_connection` — instance _(class: `ClientRequest`)_" msgstr "`__get_connection` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1466 +#: src/api/reference.md:1468 msgid "`__get_createConnection` — instance _(class: `Agent`)_" msgstr "`__get_createConnection` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1467 +#: src/api/reference.md:1469 msgid "`__get_createSocket` — instance _(class: `Agent`)_" msgstr "`__get_createSocket` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1468 +#: src/api/reference.md:1470 msgid "`__get_defaultPort` — instance _(class: `Agent`)_" msgstr "`__get_defaultPort` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1469 +#: src/api/reference.md:1471 msgid "`__get_destroyed` — instance _(class: `Agent`)_" msgstr "`__get_destroyed` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1470 +#: src/api/reference.md:1472 msgid "`__get_destroyed` — instance _(class: `ClientRequest`)_" msgstr "`__get_destroyed` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1471 +#: src/api/reference.md:1473 msgid "`__get_destroyed` — instance _(class: `IncomingMessage`)_" msgstr "`__get_destroyed` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1472 +#: src/api/reference.md:1474 msgid "`__get_finished` — instance _(class: `ClientRequest`)_" msgstr "`__get_finished` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1473 +#: src/api/reference.md:1475 msgid "`__get_freeSockets` — instance _(class: `Agent`)_" msgstr "`__get_freeSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1474 +#: src/api/reference.md:1476 msgid "`__get_headers` — instance _(class: `IncomingMessage`)_" msgstr "`__get_headers` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1475 +#: src/api/reference.md:1477 msgid "`__get_headersSent` — instance _(class: `ServerResponse`)_" msgstr "`__get_headersSent` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1476 +#: src/api/reference.md:1478 msgid "`__get_headersTimeout` — instance _(class: `HttpServer`)_" msgstr "`__get_headersTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1477 +#: src/api/reference.md:1479 msgid "`__get_host` — instance _(class: `ClientRequest`)_" msgstr "`__get_host` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1478 +#: src/api/reference.md:1480 msgid "`__get_httpVersion` — instance _(class: `IncomingMessage`)_" msgstr "`__get_httpVersion` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1479 +#: src/api/reference.md:1481 msgid "`__get_httpVersionMajor` — instance _(class: `IncomingMessage`)_" msgstr "`__get_httpVersionMajor` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1480 +#: src/api/reference.md:1482 msgid "`__get_httpVersionMinor` — instance _(class: `IncomingMessage`)_" msgstr "`__get_httpVersionMinor` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1481 +#: src/api/reference.md:1483 msgid "`__get_keepAlive` — instance _(class: `Agent`)_" msgstr "`__get_keepAlive` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1482 +#: src/api/reference.md:1484 msgid "`__get_keepAliveMsecs` — instance _(class: `Agent`)_" msgstr "`__get_keepAliveMsecs` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1483 +#: src/api/reference.md:1485 msgid "`__get_keepAliveTimeout` — instance _(class: `HttpServer`)_" msgstr "`__get_keepAliveTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1484 +#: src/api/reference.md:1486 msgid "`__get_keepAliveTimeoutBuffer` — instance _(class: `HttpServer`)_" msgstr "`__get_keepAliveTimeoutBuffer` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1485 +#: src/api/reference.md:1487 msgid "`__get_listening` — instance _(class: `HttpServer`)_" msgstr "`__get_listening` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1486 +#: src/api/reference.md:1488 msgid "`__get_maxFreeSockets` — instance _(class: `Agent`)_" msgstr "`__get_maxFreeSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1487 +#: src/api/reference.md:1489 msgid "`__get_maxHeadersCount` — instance _(class: `HttpServer`)_" msgstr "`__get_maxHeadersCount` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1488 +#: src/api/reference.md:1490 msgid "`__get_maxHeadersCount` — instance _(class: `ClientRequest`)_" msgstr "`__get_maxHeadersCount` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1489 +#: src/api/reference.md:1491 msgid "`__get_maxRequestsPerSocket` — instance _(class: `HttpServer`)_" msgstr "`__get_maxRequestsPerSocket` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1490 +#: src/api/reference.md:1492 msgid "`__get_maxSockets` — instance _(class: `Agent`)_" msgstr "`__get_maxSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1491 +#: src/api/reference.md:1493 msgid "`__get_maxTotalSockets` — instance _(class: `Agent`)_" msgstr "`__get_maxTotalSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1492 +#: src/api/reference.md:1494 msgid "`__get_method` — instance _(class: `ClientRequest`)_" msgstr "`__get_method` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1493 +#: src/api/reference.md:1495 msgid "`__get_method` — instance _(class: `IncomingMessage`)_" msgstr "`__get_method` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1494 +#: src/api/reference.md:1496 msgid "`__get_path` — instance _(class: `ClientRequest`)_" msgstr "`__get_path` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1495 +#: src/api/reference.md:1497 msgid "`__get_protocol` — instance _(class: `Agent`)_" msgstr "`__get_protocol` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1496 +#: src/api/reference.md:1498 msgid "`__get_protocol` — instance _(class: `ClientRequest`)_" msgstr "`__get_protocol` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1497 +#: src/api/reference.md:1499 #, fuzzy msgid "`__get_rawHeaders` — instance _(class: `IncomingMessage`)_" msgstr "`__get_headers` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1498 +#: src/api/reference.md:1500 msgid "`__get_req` — instance _(class: `IncomingMessage`)_" msgstr "`__get_req` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1499 +#: src/api/reference.md:1501 msgid "`__get_requestTimeout` — instance _(class: `HttpServer`)_" msgstr "`__get_requestTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1500 +#: src/api/reference.md:1502 msgid "`__get_requests` — instance _(class: `Agent`)_" msgstr "`__get_requests` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1501 +#: src/api/reference.md:1503 msgid "`__get_reusedSocket` — instance _(class: `ClientRequest`)_" msgstr "`__get_reusedSocket` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1502 +#: src/api/reference.md:1504 msgid "`__get_socket` — instance _(class: `IncomingMessage`)_" msgstr "`__get_socket` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1503 +#: src/api/reference.md:1505 msgid "`__get_socket` — instance _(class: `ClientRequest`)_" msgstr "`__get_socket` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1504 +#: src/api/reference.md:1506 msgid "`__get_sockets` — instance _(class: `Agent`)_" msgstr "`__get_sockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1505 +#: src/api/reference.md:1507 msgid "`__get_statusCode` — instance _(class: `IncomingMessage`)_" msgstr "`__get_statusCode` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1506 +#: src/api/reference.md:1508 msgid "`__get_statusCode` — instance _(class: `ServerResponse`)_" msgstr "`__get_statusCode` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1507 +#: src/api/reference.md:1509 msgid "`__get_statusMessage` — instance _(class: `IncomingMessage`)_" msgstr "`__get_statusMessage` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1508 +#: src/api/reference.md:1510 msgid "`__get_timeout` — instance _(class: `HttpServer`)_" msgstr "`__get_timeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1509 +#: src/api/reference.md:1511 msgid "`__get_trailers` — instance _(class: `IncomingMessage`)_" msgstr "`__get_trailers` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1510 +#: src/api/reference.md:1512 msgid "`__get_url` — instance _(class: `IncomingMessage`)_" msgstr "`__get_url` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1511 +#: src/api/reference.md:1513 msgid "`__get_writableEnded` — instance _(class: `ClientRequest`)_" msgstr "`__get_writableEnded` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1512 +#: src/api/reference.md:1514 msgid "`__get_writableEnded` — instance _(class: `ServerResponse`)_" msgstr "`__get_writableEnded` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1513 +#: src/api/reference.md:1515 msgid "`__get_writableFinished` — instance _(class: `ClientRequest`)_" msgstr "`__get_writableFinished` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1514 +#: src/api/reference.md:1516 msgid "`__get_writableFinished` — instance _(class: `ServerResponse`)_" msgstr "`__get_writableFinished` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1515 +#: src/api/reference.md:1517 msgid "`__set_createConnection` — instance _(class: `Agent`)_" msgstr "`__set_createConnection` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1516 +#: src/api/reference.md:1518 msgid "`__set_createSocket` — instance _(class: `Agent`)_" msgstr "`__set_createSocket` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1517 +#: src/api/reference.md:1519 msgid "`__set_headersTimeout` — instance _(class: `HttpServer`)_" msgstr "`__set_headersTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1518 +#: src/api/reference.md:1520 msgid "`__set_keepAlive` — instance _(class: `Agent`)_" msgstr "`__set_keepAlive` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1519 +#: src/api/reference.md:1521 msgid "`__set_keepAliveMsecs` — instance _(class: `Agent`)_" msgstr "`__set_keepAliveMsecs` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1520 +#: src/api/reference.md:1522 msgid "`__set_keepAliveTimeout` — instance _(class: `HttpServer`)_" msgstr "`__set_keepAliveTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1521 +#: src/api/reference.md:1523 msgid "`__set_keepAliveTimeoutBuffer` — instance _(class: `HttpServer`)_" msgstr "`__set_keepAliveTimeoutBuffer` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1522 +#: src/api/reference.md:1524 msgid "`__set_maxFreeSockets` — instance _(class: `Agent`)_" msgstr "`__set_maxFreeSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1523 +#: src/api/reference.md:1525 msgid "`__set_maxHeadersCount` — instance _(class: `HttpServer`)_" msgstr "`__set_maxHeadersCount` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1524 +#: src/api/reference.md:1526 msgid "`__set_maxRequestsPerSocket` — instance _(class: `HttpServer`)_" msgstr "`__set_maxRequestsPerSocket` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1525 +#: src/api/reference.md:1527 msgid "`__set_maxSockets` — instance _(class: `Agent`)_" msgstr "`__set_maxSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1526 +#: src/api/reference.md:1528 msgid "`__set_maxTotalSockets` — instance _(class: `Agent`)_" msgstr "`__set_maxTotalSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1527 +#: src/api/reference.md:1529 msgid "`__set_protocol` — instance _(class: `Agent`)_" msgstr "`__set_protocol` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1528 +#: src/api/reference.md:1530 msgid "`__set_requestTimeout` — instance _(class: `HttpServer`)_" msgstr "`__set_requestTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1529 +#: src/api/reference.md:1531 msgid "`__set_sendDate` — instance _(class: `ServerResponse`)_" msgstr "`__set_sendDate` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1530 +#: src/api/reference.md:1532 msgid "`__set_statusCode` — instance _(class: `ServerResponse`)_" msgstr "`__set_statusCode` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1531 +#: src/api/reference.md:1533 msgid "`__set_statusMessage` — instance _(class: `ServerResponse`)_" msgstr "`__set_statusMessage` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1532 +#: src/api/reference.md:1534 msgid "`__set_strictContentLength` — instance _(class: `ServerResponse`)_" msgstr "`__set_strictContentLength` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1533 +#: src/api/reference.md:1535 msgid "`__set_timeout` — instance _(class: `HttpServer`)_" msgstr "`__set_timeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1534 +#: src/api/reference.md:1536 msgid "`_connectionListener` — module" msgstr "`_connectionListener` — Modul" -#: src/api/reference.md:1535 +#: src/api/reference.md:1537 msgid "`abort` — instance _(class: `ClientRequest`)_" msgstr "`abort` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1536 +#: src/api/reference.md:1538 msgid "`addListener` — instance _(class: `HttpServer`)_" msgstr "`addListener` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1537 +#: src/api/reference.md:1539 msgid "`addListener` — instance _(class: `IncomingMessage`)_" msgstr "`addListener` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1538 +#: src/api/reference.md:1540 msgid "`addListener` — instance _(class: `ServerResponse`)_" msgstr "`addListener` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1539 +#: src/api/reference.md:1541 msgid "`addTrailers` — instance _(class: `ServerResponse`)_" msgstr "`addTrailers` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1540 +#: src/api/reference.md:1542 msgid "`address` — instance _(class: `HttpServer`)_" msgstr "`address` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1541 +#: src/api/reference.md:1543 msgid "`appendHeader` — instance _(class: `ServerResponse`)_" msgstr "`appendHeader` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1542 src/api/reference.md:3388 +#: src/api/reference.md:1544 src/api/reference.md:3388 msgid "`close` — instance _(class: `Agent`)_" msgstr "`close` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1543 +#: src/api/reference.md:1545 msgid "`close` — instance _(class: `HttpServer`)_" msgstr "`close` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1544 +#: src/api/reference.md:1546 msgid "`closeAllConnections` — instance _(class: `HttpServer`)_" msgstr "`closeAllConnections` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1545 +#: src/api/reference.md:1547 msgid "`closeIdleConnections` — instance _(class: `HttpServer`)_" msgstr "`closeIdleConnections` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1546 +#: src/api/reference.md:1548 #, fuzzy msgid "`complete` — instance _(class: `IncomingMessage`)_" msgstr "`__get_complete` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1547 +#: src/api/reference.md:1549 msgid "`connection` — instance _(class: `IncomingMessage`)_" msgstr "`connection` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1548 +#: src/api/reference.md:1550 msgid "`cork` — instance _(class: `ClientRequest`)_" msgstr "`cork` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1549 +#: src/api/reference.md:1551 msgid "`cork` — instance _(class: `ServerResponse`)_" msgstr "`cork` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1550 src/api/reference.md:1551 -#: src/api/reference.md:1660 src/api/reference.md:1704 -#: src/api/reference.md:1705 src/api/reference.md:1916 +#: src/api/reference.md:1552 src/api/reference.md:1553 +#: src/api/reference.md:1662 src/api/reference.md:1706 +#: src/api/reference.md:1707 src/api/reference.md:1899 #: src/api/reference.md:3308 msgid "`createServer` — module" msgstr "`createServer` — Modul" -#: src/api/reference.md:1552 +#: src/api/reference.md:1554 msgid "`defaultPort` — instance _(class: `Agent`)_" msgstr "`defaultPort` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1553 src/api/reference.md:3390 +#: src/api/reference.md:1555 src/api/reference.md:3390 msgid "`destroy` — instance _(class: `Agent`)_" msgstr "`destroy` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1554 +#: src/api/reference.md:1556 msgid "`destroy` — instance _(class: `IncomingMessage`)_" msgstr "`destroy` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1555 +#: src/api/reference.md:1557 msgid "`destroy` — instance _(class: `ClientRequest`)_" msgstr "`destroy` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1556 +#: src/api/reference.md:1558 msgid "`destroyed` — instance _(class: `Agent`)_" msgstr "`destroyed` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1557 +#: src/api/reference.md:1559 msgid "`end` — instance _(class: `ServerResponse`)_" msgstr "`end` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1558 +#: src/api/reference.md:1560 msgid "`flushHeaders` — instance _(class: `ClientRequest`)_" msgstr "`flushHeaders` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1559 +#: src/api/reference.md:1561 msgid "`flushHeaders` — instance _(class: `ServerResponse`)_" msgstr "`flushHeaders` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1560 +#: src/api/reference.md:1562 msgid "`freeSockets` — instance _(class: `Agent`)_" msgstr "`freeSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1561 src/api/reference.md:1706 +#: src/api/reference.md:1563 src/api/reference.md:1708 msgid "`get` — module" msgstr "`get` — Modul" -#: src/api/reference.md:1562 +#: src/api/reference.md:1564 msgid "`getHeader` — instance _(class: `ClientRequest`)_" msgstr "`getHeader` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1563 +#: src/api/reference.md:1565 msgid "`getHeader` — instance _(class: `ServerResponse`)_" msgstr "`getHeader` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1564 +#: src/api/reference.md:1566 msgid "`getHeaderNames` — instance _(class: `ClientRequest`)_" msgstr "`getHeaderNames` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1565 +#: src/api/reference.md:1567 msgid "`getHeaderNames` — instance _(class: `ServerResponse`)_" msgstr "`getHeaderNames` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1566 +#: src/api/reference.md:1568 msgid "`getHeaders` — instance _(class: `ClientRequest`)_" msgstr "`getHeaders` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1567 +#: src/api/reference.md:1569 msgid "`getHeaders` — instance _(class: `ServerResponse`)_" msgstr "`getHeaders` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1568 +#: src/api/reference.md:1570 msgid "`getName` — instance _(class: `Agent`)_" msgstr "`getName` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1569 +#: src/api/reference.md:1571 msgid "`getRawHeaderNames` — instance _(class: `ClientRequest`)_" msgstr "`getRawHeaderNames` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1570 +#: src/api/reference.md:1572 msgid "`getStatus` — instance _(class: `ServerResponse`)_" msgstr "`getStatus` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1571 +#: src/api/reference.md:1573 msgid "`hasHeader` — instance _(class: `ClientRequest`)_" msgstr "`hasHeader` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1572 +#: src/api/reference.md:1574 msgid "`hasHeader` — instance _(class: `ServerResponse`)_" msgstr "`hasHeader` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1573 +#: src/api/reference.md:1575 msgid "`headers` — instance _(class: `IncomingMessage`)_" msgstr "`headers` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1574 +#: src/api/reference.md:1576 msgid "`headersTimeout` — instance _(class: `HttpServer`)_" msgstr "`headersTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1575 +#: src/api/reference.md:1577 msgid "`httpVersion` — instance _(class: `IncomingMessage`)_" msgstr "`httpVersion` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1576 +#: src/api/reference.md:1578 #, fuzzy msgid "`httpVersionMajor` — instance _(class: `IncomingMessage`)_" msgstr "`httpVersion` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1577 +#: src/api/reference.md:1579 #, fuzzy msgid "`httpVersionMinor` — instance _(class: `IncomingMessage`)_" msgstr "`httpVersion` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1578 +#: src/api/reference.md:1580 msgid "`keepAlive` — instance _(class: `Agent`)_" msgstr "`keepAlive` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1579 +#: src/api/reference.md:1581 msgid "`keepAliveMsecs` — instance _(class: `Agent`)_" msgstr "`keepAliveMsecs` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1580 +#: src/api/reference.md:1582 msgid "`keepAliveTimeout` — instance _(class: `HttpServer`)_" msgstr "`keepAliveTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1581 +#: src/api/reference.md:1583 msgid "`keepAliveTimeoutBuffer` — instance _(class: `HttpServer`)_" msgstr "`keepAliveTimeoutBuffer` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1582 +#: src/api/reference.md:1584 msgid "" "`keepSocketAlive` — instance _(class: `Agent`)_ ⚠ **stub** — reqwest owns " "the keep-alive pool; per-socket hooks are no-ops, warns once (#4917)" @@ -40367,113 +40592,113 @@ msgstr "" "besitzt den keep-alive pool; per-socket Haken sind keine opps, warnt einmal " "(#4917)" -#: src/api/reference.md:1583 +#: src/api/reference.md:1585 msgid "`listen` — instance _(class: `HttpServer`)_" msgstr "`listen` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1584 +#: src/api/reference.md:1586 msgid "`listenerCount` — instance _(class: `ClientRequest`)_" msgstr "`listenerCount` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1585 +#: src/api/reference.md:1587 msgid "`listening` — instance _(class: `HttpServer`)_" msgstr "`listening` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1586 +#: src/api/reference.md:1588 msgid "`maxFreeSockets` — instance _(class: `Agent`)_" msgstr "`maxFreeSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1587 +#: src/api/reference.md:1589 msgid "`maxHeadersCount` — instance _(class: `HttpServer`)_" msgstr "`maxHeadersCount` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1588 +#: src/api/reference.md:1590 msgid "`maxRequestsPerSocket` — instance _(class: `HttpServer`)_" msgstr "`maxRequestsPerSocket` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1589 +#: src/api/reference.md:1591 msgid "`maxSockets` — instance _(class: `Agent`)_" msgstr "`maxSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1590 +#: src/api/reference.md:1592 msgid "`maxTotalSockets` — instance _(class: `Agent`)_" msgstr "`maxTotalSockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1591 +#: src/api/reference.md:1593 msgid "`method` — instance _(class: `IncomingMessage`)_" msgstr "`method` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1592 +#: src/api/reference.md:1594 msgid "`on` — instance _(class: `HttpServer`)_" msgstr "`on` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1593 +#: src/api/reference.md:1595 msgid "`on` — instance _(class: `IncomingMessage`)_" msgstr "`on` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1594 +#: src/api/reference.md:1596 msgid "`on` — instance _(class: `ServerResponse`)_" msgstr "`on` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1595 +#: src/api/reference.md:1597 msgid "`once` — instance _(class: `IncomingMessage`)_" msgstr "`once` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1596 +#: src/api/reference.md:1598 msgid "`once` — instance _(class: `ClientRequest`)_" msgstr "`once` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1597 +#: src/api/reference.md:1599 msgid "`pause` — instance _(class: `IncomingMessage`)_" msgstr "`pause` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1598 +#: src/api/reference.md:1600 msgid "`protocol` — instance _(class: `Agent`)_" msgstr "`protocol` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1599 +#: src/api/reference.md:1601 #, fuzzy msgid "`rawHeaders` — instance _(class: `IncomingMessage`)_" msgstr "`headers` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1600 +#: src/api/reference.md:1602 msgid "`read` — instance _(class: `IncomingMessage`)_" msgstr "`read` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1601 +#: src/api/reference.md:1603 msgid "`ref` — instance _(class: `HttpServer`)_" msgstr "`ref` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1602 +#: src/api/reference.md:1604 msgid "`removeHeader` — instance _(class: `ClientRequest`)_" msgstr "`removeHeader` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1603 +#: src/api/reference.md:1605 msgid "`removeHeader` — instance _(class: `ServerResponse`)_" msgstr "`removeHeader` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1604 +#: src/api/reference.md:1606 msgid "`req` — instance _(class: `IncomingMessage`)_" msgstr "`req` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1605 src/api/reference.md:1716 +#: src/api/reference.md:1607 src/api/reference.md:1718 #: src/api/reference.md:3393 msgid "`request` — module" msgstr "`request` — Modul" -#: src/api/reference.md:1606 +#: src/api/reference.md:1608 msgid "`requestTimeout` — instance _(class: `HttpServer`)_" msgstr "`requestTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1607 +#: src/api/reference.md:1609 msgid "`requests` — instance _(class: `Agent`)_" msgstr "`requests` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1608 +#: src/api/reference.md:1610 msgid "`resume` — instance _(class: `IncomingMessage`)_" msgstr "`resume` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1609 +#: src/api/reference.md:1611 msgid "" "`reuseSocket` — instance _(class: `Agent`)_ ⚠ **stub** — reqwest owns the " "keep-alive pool; per-socket hooks are no-ops, warns once (#4917)" @@ -40482,369 +40707,369 @@ msgstr "" "besitzt den keep-alive pool; per-socket Haken sind keine opps, warnt einmal " "(#4917)" -#: src/api/reference.md:1610 +#: src/api/reference.md:1612 msgid "`setEncoding` — instance _(class: `IncomingMessage`)_" msgstr "`setEncoding` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1611 +#: src/api/reference.md:1613 msgid "`setGlobalProxyFromEnv` — module" msgstr "`setGlobalProxyFromEnv` — Modul" -#: src/api/reference.md:1612 +#: src/api/reference.md:1614 msgid "`setHeader` — instance _(class: `ClientRequest`)_" msgstr "`setHeader` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1613 +#: src/api/reference.md:1615 msgid "`setHeader` — instance _(class: `ServerResponse`)_" msgstr "`setHeader` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1614 +#: src/api/reference.md:1616 msgid "`setHeaders` — instance _(class: `ServerResponse`)_" msgstr "`setHeaders` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1615 +#: src/api/reference.md:1617 msgid "`setMaxIdleHTTPParsers` — module" msgstr "`setMaxIdleHTTPParsers` — Modul" -#: src/api/reference.md:1616 +#: src/api/reference.md:1618 msgid "`setNoDelay` — instance _(class: `ClientRequest`)_" msgstr "`setNoDelay` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1617 +#: src/api/reference.md:1619 msgid "`setSocketKeepAlive` — instance _(class: `ClientRequest`)_" msgstr "`setSocketKeepAlive` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1618 +#: src/api/reference.md:1620 msgid "`setStatus` — instance _(class: `ServerResponse`)_" msgstr "`setStatus` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1619 +#: src/api/reference.md:1621 msgid "`setTimeout` — instance _(class: `HttpServer`)_" msgstr "`setTimeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1620 +#: src/api/reference.md:1622 msgid "`setTimeout` — instance _(class: `IncomingMessage`)_" msgstr "`setTimeout` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1621 +#: src/api/reference.md:1623 msgid "`setTimeout` — instance _(class: `ClientRequest`)_" msgstr "`setTimeout` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1622 +#: src/api/reference.md:1624 msgid "`setTimeout` — instance _(class: `ServerResponse`)_" msgstr "`setTimeout` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1623 +#: src/api/reference.md:1625 msgid "`socket` — instance _(class: `IncomingMessage`)_" msgstr "`socket` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1624 +#: src/api/reference.md:1626 msgid "`sockets` — instance _(class: `Agent`)_" msgstr "`sockets` — Instanz _(Klasse: `Agent`)_" -#: src/api/reference.md:1625 +#: src/api/reference.md:1627 msgid "`statusCode` — instance _(class: `IncomingMessage`)_" msgstr "`statusCode` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1626 +#: src/api/reference.md:1628 msgid "`statusMessage` — instance _(class: `IncomingMessage`)_" msgstr "`statusMessage` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1627 +#: src/api/reference.md:1629 msgid "`timeout` — instance _(class: `HttpServer`)_" msgstr "`timeout` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1628 +#: src/api/reference.md:1630 msgid "`trailers` — instance _(class: `IncomingMessage`)_" msgstr "`trailers` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1629 +#: src/api/reference.md:1631 msgid "`uncork` — instance _(class: `ClientRequest`)_" msgstr "`uncork` — Instanz _(Klasse: `ClientRequest`)_" -#: src/api/reference.md:1630 +#: src/api/reference.md:1632 msgid "`uncork` — instance _(class: `ServerResponse`)_" msgstr "`uncork` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1631 +#: src/api/reference.md:1633 msgid "`unref` — instance _(class: `HttpServer`)_" msgstr "`unref` — Instanz _(Klasse: `HttpServer`)_" -#: src/api/reference.md:1632 +#: src/api/reference.md:1634 msgid "`url` — instance _(class: `IncomingMessage`)_" msgstr "`url` — Instanz _(Klasse: `IncomingMessage`)_" -#: src/api/reference.md:1633 +#: src/api/reference.md:1635 msgid "`validateHeaderName` — module" msgstr "`validateHeaderName` — Modul" -#: src/api/reference.md:1634 +#: src/api/reference.md:1636 msgid "`validateHeaderValue` — module" msgstr "`validateHeaderValue` — Modul" -#: src/api/reference.md:1635 +#: src/api/reference.md:1637 msgid "`write` — instance _(class: `ServerResponse`)_" msgstr "`write` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1636 +#: src/api/reference.md:1638 msgid "`writeContinue` — instance _(class: `ServerResponse`)_" msgstr "`writeContinue` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1637 +#: src/api/reference.md:1639 msgid "`writeEarlyHints` — instance _(class: `ServerResponse`)_" msgstr "`writeEarlyHints` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1638 +#: src/api/reference.md:1640 msgid "`writeHead` — instance _(class: `ServerResponse`)_" msgstr "`writeHead` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1639 +#: src/api/reference.md:1641 msgid "`writeProcessing` — instance _(class: `ServerResponse`)_" msgstr "`writeProcessing` — Instanz _(Klasse: `ServerResponse`)_" -#: src/api/reference.md:1643 +#: src/api/reference.md:1645 msgid "`METHODS`" msgstr "`METHODS`" -#: src/api/reference.md:1644 +#: src/api/reference.md:1646 msgid "`STATUS_CODES`" msgstr "`STATUS_CODES`" -#: src/api/reference.md:1645 src/api/reference.md:1724 +#: src/api/reference.md:1647 src/api/reference.md:1726 msgid "`globalAgent`" msgstr "`globalAgent`" -#: src/api/reference.md:1646 +#: src/api/reference.md:1648 msgid "`kConnectionsCheckingInterval`" msgstr "`kConnectionsCheckingInterval`" -#: src/api/reference.md:1647 +#: src/api/reference.md:1649 msgid "`maxHeaderSize`" msgstr "`maxHeaderSize`" -#: src/api/reference.md:1649 +#: src/api/reference.md:1651 msgid "`http2`" msgstr "`http2`" -#: src/api/reference.md:1653 +#: src/api/reference.md:1655 msgid "`Http2ServerRequest`" msgstr "`Http2ServerRequest`" -#: src/api/reference.md:1654 +#: src/api/reference.md:1656 msgid "`Http2ServerResponse`" msgstr "`Http2ServerResponse`" -#: src/api/reference.md:1659 +#: src/api/reference.md:1661 msgid "`createSecureServer` — module" msgstr "`createSecureServer` — Modul" -#: src/api/reference.md:1661 +#: src/api/reference.md:1663 msgid "`getDefaultSettings` — module" msgstr "`getDefaultSettings` — Modul" -#: src/api/reference.md:1662 +#: src/api/reference.md:1664 msgid "`getPackedSettings` — module" msgstr "`getPackedSettings` — Modul" -#: src/api/reference.md:1663 +#: src/api/reference.md:1665 msgid "`getUnpackedSettings` — module" msgstr "`getUnpackedSettings` — Modul" -#: src/api/reference.md:1664 +#: src/api/reference.md:1666 msgid "`performServerHandshake` — module" msgstr "`performServerHandshake` — Modul" -#: src/api/reference.md:1670 +#: src/api/reference.md:1672 msgid "`sensitiveHeaders`" msgstr "`sensitiveHeaders`" -#: src/api/reference.md:1672 +#: src/api/reference.md:1674 msgid "`https`" msgstr "`https`" -#: src/api/reference.md:1684 +#: src/api/reference.md:1686 msgid "`__get_headersTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__get_headersTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1685 +#: src/api/reference.md:1687 msgid "`__get_keepAliveTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__get_keepAliveTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1686 +#: src/api/reference.md:1688 msgid "`__get_keepAliveTimeoutBuffer` — instance _(class: `HttpsServer`)_" msgstr "`__get_keepAliveTimeoutBuffer` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1687 +#: src/api/reference.md:1689 msgid "`__get_listening` — instance _(class: `HttpsServer`)_" msgstr "`__get_listening` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1688 +#: src/api/reference.md:1690 msgid "`__get_maxHeadersCount` — instance _(class: `HttpsServer`)_" msgstr "`__get_maxHeadersCount` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1689 +#: src/api/reference.md:1691 msgid "`__get_maxRequestsPerSocket` — instance _(class: `HttpsServer`)_" msgstr "`__get_maxRequestsPerSocket` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1690 +#: src/api/reference.md:1692 msgid "`__get_requestTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__get_requestTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1691 +#: src/api/reference.md:1693 msgid "`__get_timeout` — instance _(class: `HttpsServer`)_" msgstr "`__get_timeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1692 +#: src/api/reference.md:1694 msgid "`__set_headersTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__set_headersTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1693 +#: src/api/reference.md:1695 msgid "`__set_keepAliveTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__set_keepAliveTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1694 +#: src/api/reference.md:1696 msgid "`__set_keepAliveTimeoutBuffer` — instance _(class: `HttpsServer`)_" msgstr "`__set_keepAliveTimeoutBuffer` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1695 +#: src/api/reference.md:1697 msgid "`__set_maxHeadersCount` — instance _(class: `HttpsServer`)_" msgstr "`__set_maxHeadersCount` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1696 +#: src/api/reference.md:1698 msgid "`__set_maxRequestsPerSocket` — instance _(class: `HttpsServer`)_" msgstr "`__set_maxRequestsPerSocket` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1697 +#: src/api/reference.md:1699 msgid "`__set_requestTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__set_requestTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1698 +#: src/api/reference.md:1700 msgid "`__set_timeout` — instance _(class: `HttpsServer`)_" msgstr "`__set_timeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1699 +#: src/api/reference.md:1701 msgid "`addListener` — instance _(class: `HttpsServer`)_" msgstr "`addListener` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1700 +#: src/api/reference.md:1702 msgid "`address` — instance _(class: `HttpsServer`)_" msgstr "`address` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1701 +#: src/api/reference.md:1703 msgid "`close` — instance _(class: `HttpsServer`)_" msgstr "`close` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1702 +#: src/api/reference.md:1704 msgid "`closeAllConnections` — instance _(class: `HttpsServer`)_" msgstr "`closeAllConnections` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1703 +#: src/api/reference.md:1705 msgid "`closeIdleConnections` — instance _(class: `HttpsServer`)_" msgstr "`closeIdleConnections` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1707 +#: src/api/reference.md:1709 msgid "`headersTimeout` — instance _(class: `HttpsServer`)_" msgstr "`headersTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1708 +#: src/api/reference.md:1710 msgid "`keepAliveTimeout` — instance _(class: `HttpsServer`)_" msgstr "`keepAliveTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1709 +#: src/api/reference.md:1711 msgid "`keepAliveTimeoutBuffer` — instance _(class: `HttpsServer`)_" msgstr "`keepAliveTimeoutBuffer` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1710 +#: src/api/reference.md:1712 msgid "`listen` — instance _(class: `HttpsServer`)_" msgstr "`listen` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1711 +#: src/api/reference.md:1713 msgid "`listening` — instance _(class: `HttpsServer`)_" msgstr "`listening` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1712 +#: src/api/reference.md:1714 msgid "`maxHeadersCount` — instance _(class: `HttpsServer`)_" msgstr "`maxHeadersCount` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1713 +#: src/api/reference.md:1715 msgid "`maxRequestsPerSocket` — instance _(class: `HttpsServer`)_" msgstr "`maxRequestsPerSocket` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1714 +#: src/api/reference.md:1716 msgid "`on` — instance _(class: `HttpsServer`)_" msgstr "`on` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1715 +#: src/api/reference.md:1717 msgid "`ref` — instance _(class: `HttpsServer`)_" msgstr "`ref` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1717 +#: src/api/reference.md:1719 msgid "`requestTimeout` — instance _(class: `HttpsServer`)_" msgstr "`requestTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1718 +#: src/api/reference.md:1720 msgid "`setTimeout` — instance _(class: `HttpsServer`)_" msgstr "`setTimeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1719 +#: src/api/reference.md:1721 msgid "`timeout` — instance _(class: `HttpsServer`)_" msgstr "`timeout` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1720 +#: src/api/reference.md:1722 msgid "`unref` — instance _(class: `HttpsServer`)_" msgstr "`unref` — Instanz _(Klasse: `HttpsServer`)_" -#: src/api/reference.md:1726 +#: src/api/reference.md:1728 msgid "`inspector`" msgstr "`inspector`" -#: src/api/reference.md:1730 src/api/reference.md:1761 +#: src/api/reference.md:1732 src/api/reference.md:1763 #: src/api/reference.md:2948 msgid "`Session`" msgstr "`Session`" -#: src/api/reference.md:1734 src/api/reference.md:1765 +#: src/api/reference.md:1736 src/api/reference.md:1767 #: src/api/reference.md:2955 msgid "`Session` — module" msgstr "`Session` — Modul" -#: src/api/reference.md:1736 src/api/reference.md:1766 +#: src/api/reference.md:1738 src/api/reference.md:1768 msgid "`connect` — instance _(class: `Session`)_" msgstr "`connect` — Instanz _(Klasse: `Session`)_" -#: src/api/reference.md:1737 src/api/reference.md:1767 +#: src/api/reference.md:1739 src/api/reference.md:1769 msgid "`connectToMainThread` — instance _(class: `Session`)_" msgstr "`connectToMainThread` — Instanz _(Klasse: `Session`)_" -#: src/api/reference.md:1738 +#: src/api/reference.md:1740 msgid "`debug` — module _(class: `console`)_" msgstr "`debug` — Modul _(Klasse: `console`)_" -#: src/api/reference.md:1739 src/api/reference.md:1768 +#: src/api/reference.md:1741 src/api/reference.md:1770 msgid "`disconnect` — instance _(class: `Session`)_" msgstr "`disconnect` — Instanz _(Klasse: `Session`)_" -#: src/api/reference.md:1740 +#: src/api/reference.md:1742 msgid "`error` — module _(class: `console`)_" msgstr "`error` — Modul _(Klasse: `console`)_" -#: src/api/reference.md:1741 +#: src/api/reference.md:1743 msgid "`info` — module _(class: `console`)_" msgstr "`info` — Modul _(Klasse: `console`)_" -#: src/api/reference.md:1742 +#: src/api/reference.md:1744 msgid "`log` — module _(class: `console`)_" msgstr "`log` — Modul _(Klasse: `console`)_" -#: src/api/reference.md:1743 src/api/reference.md:1769 +#: src/api/reference.md:1745 src/api/reference.md:1771 msgid "`on` — instance _(class: `Session`)_" msgstr "`on` — Instanz _(Klasse: `Session`)_" -#: src/api/reference.md:1744 src/api/reference.md:1770 +#: src/api/reference.md:1746 src/api/reference.md:1772 msgid "`once` — instance _(class: `Session`)_" msgstr "`once` — Instanz _(Klasse: `Session`)_" -#: src/api/reference.md:1745 +#: src/api/reference.md:1747 msgid "" "`open` — module ⚠ **stub** — accepts port/host but binds no real WebSocket " "inspector endpoint; sessions are in-process fakes (#4916)" @@ -40852,7 +41077,7 @@ msgstr "" "`open` — Modul **Stub** — akzeptiert port/host, bindet aber keinen echten " "WebSocket-Inspektor-Endpunkt; Sitzungen sind In-Prozess-Fakten (#4916)" -#: src/api/reference.md:1746 +#: src/api/reference.md:1748 msgid "" "`post` — instance _(class: `Session`)_ ⚠ **stub** — only Runtime.enable and " "a canned Runtime.evaluate subset respond; every other protocol method throws " @@ -40862,7 +41087,7 @@ msgstr "" "und eine Runtime.evaluate-Untergruppe reagieren; jede andere " "Protokollmethode wirft Inspektor-Fehler -32601 (#4916)" -#: src/api/reference.md:1747 +#: src/api/reference.md:1749 msgid "" "`url` — module ⚠ **stub** — always undefined: Perry never exposes a real " "inspector endpoint (#4916)" @@ -40870,7 +41095,7 @@ msgstr "" "`url` — Modul **Stub** — immer undefiniert: Perry setzt nie einen echten " "Inspector-Endpunkt (#4916) frei" -#: src/api/reference.md:1748 +#: src/api/reference.md:1750 msgid "" "`waitForDebugger` — module ⚠ **stub** — returns immediately after open(); " "there is no debugger to wait for (#4916)" @@ -40878,1161 +41103,1182 @@ msgstr "" "`waitForDebugger` — Modul **Stub** — kehrt sofort nach open() zurück; es " "gibt keinen Debugger, auf den man warten kann (#4916)" -#: src/api/reference.md:1749 +#: src/api/reference.md:1751 msgid "`warn` — module _(class: `console`)_" msgstr "`warn` — Modul _(Klasse: `console`)_" -#: src/api/reference.md:1753 +#: src/api/reference.md:1755 msgid "`Network`" msgstr "`Network`" -#: src/api/reference.md:1757 +#: src/api/reference.md:1759 msgid "`inspector/promises`" msgstr "`inspector/promises`" -#: src/api/reference.md:1771 +#: src/api/reference.md:1773 msgid "`post` — instance _(class: `Session`)_" msgstr "`post` — Instanz _(Klasse: `Session`)_" -#: src/api/reference.md:1777 +#: src/api/reference.md:1779 msgid "`lodash`" msgstr "`lodash`" -#: src/api/reference.md:1781 +#: src/api/reference.md:1783 msgid "`camelCase` — module" msgstr "`camelCase` — Modul" -#: src/api/reference.md:1782 +#: src/api/reference.md:1784 msgid "`chunk` — module" msgstr "`chunk` — Modul" -#: src/api/reference.md:1783 src/api/reference.md:1784 +#: src/api/reference.md:1785 src/api/reference.md:1786 msgid "`clamp` — module" msgstr "`clamp` — Modul" -#: src/api/reference.md:1785 +#: src/api/reference.md:1787 msgid "`compact` — module" msgstr "`compact` — Modul" -#: src/api/reference.md:1786 +#: src/api/reference.md:1788 msgid "`drop` — module" msgstr "`drop` — Modul" -#: src/api/reference.md:1787 +#: src/api/reference.md:1789 msgid "`first` — module" msgstr "`first` — Modul" -#: src/api/reference.md:1788 +#: src/api/reference.md:1790 msgid "`flatten` — module" msgstr "`flatten` — Modul" -#: src/api/reference.md:1789 +#: src/api/reference.md:1791 msgid "`head` — module" msgstr "`head` — Modul" -#: src/api/reference.md:1790 +#: src/api/reference.md:1792 msgid "`inRange` — module" msgstr "`inRange` — Modul" -#: src/api/reference.md:1791 +#: src/api/reference.md:1793 msgid "`kebabCase` — module" msgstr "`kebabCase` — Modul" -#: src/api/reference.md:1792 +#: src/api/reference.md:1794 msgid "`last` — module" msgstr "`last` — Modul" -#: src/api/reference.md:1793 +#: src/api/reference.md:1795 msgid "`max` — module" msgstr "`max` — Modul" -#: src/api/reference.md:1794 +#: src/api/reference.md:1796 msgid "`maxBy` — module" msgstr "`maxBy` — Modul" -#: src/api/reference.md:1795 +#: src/api/reference.md:1797 msgid "`mean` — module" msgstr "`mean` — Modul" -#: src/api/reference.md:1796 +#: src/api/reference.md:1798 msgid "`meanBy` — module" msgstr "`meanBy` — Modul" -#: src/api/reference.md:1797 +#: src/api/reference.md:1799 msgid "`min` — module" msgstr "`min` — Modul" -#: src/api/reference.md:1798 +#: src/api/reference.md:1800 msgid "`minBy` — module" msgstr "`minBy` — Modul" -#: src/api/reference.md:1799 +#: src/api/reference.md:1801 msgid "`random` — module" msgstr "`random` — Modul" -#: src/api/reference.md:1800 +#: src/api/reference.md:1802 msgid "`range` — module" msgstr "`range` — Modul" -#: src/api/reference.md:1802 +#: src/api/reference.md:1804 msgid "`size` — module" msgstr "`size` — Modul" -#: src/api/reference.md:1803 +#: src/api/reference.md:1805 msgid "`snakeCase` — module" msgstr "`snakeCase` — Modul" -#: src/api/reference.md:1804 +#: src/api/reference.md:1806 msgid "`sum` — module" msgstr "`sum` — Modul" -#: src/api/reference.md:1805 +#: src/api/reference.md:1807 msgid "`sumBy` — module" msgstr "`sumBy` — Modul" -#: src/api/reference.md:1806 +#: src/api/reference.md:1808 msgid "`tail` — module" msgstr "`tail` — Modul" -#: src/api/reference.md:1807 +#: src/api/reference.md:1809 msgid "`take` — module" msgstr "`take` — Modul" -#: src/api/reference.md:1808 +#: src/api/reference.md:1810 msgid "`times` — module" msgstr "`times` — Modul" -#: src/api/reference.md:1809 +#: src/api/reference.md:1811 msgid "`uniq` — module" msgstr "`uniq` — Modul" -#: src/api/reference.md:1811 +#: src/api/reference.md:1813 msgid "`module`" msgstr "`module`" -#: src/api/reference.md:1815 src/api/reference.md:1846 +#: src/api/reference.md:1817 src/api/reference.md:1848 msgid "`Module`" msgstr "`Module`" -#: src/api/reference.md:1816 +#: src/api/reference.md:1818 msgid "`SourceMap`" msgstr "`SourceMap`" -#: src/api/reference.md:1820 +#: src/api/reference.md:1822 msgid "`Module` — module" msgstr "`Module` — Modul" -#: src/api/reference.md:1821 +#: src/api/reference.md:1823 msgid "`SourceMap` — module" msgstr "`SourceMap` — Modul" -#: src/api/reference.md:1822 +#: src/api/reference.md:1824 msgid "`_findPath` — module" msgstr "`_findPath` — Modul" -#: src/api/reference.md:1823 +#: src/api/reference.md:1825 msgid "`_initPaths` — module" msgstr "`_initPaths` — Modul" -#: src/api/reference.md:1824 +#: src/api/reference.md:1826 msgid "`_load` — module" msgstr "`_load` — Modul" -#: src/api/reference.md:1825 +#: src/api/reference.md:1827 msgid "`_nodeModulePaths` — module" msgstr "`_nodeModulePaths` — Modul" -#: src/api/reference.md:1826 +#: src/api/reference.md:1828 msgid "`_preloadModules` — module" msgstr "`_preloadModules` — Modul" -#: src/api/reference.md:1827 +#: src/api/reference.md:1829 msgid "`_resolveFilename` — module" msgstr "`_resolveFilename` — Modul" -#: src/api/reference.md:1828 +#: src/api/reference.md:1830 msgid "`_resolveLookupPaths` — module" msgstr "`_resolveLookupPaths` — Modul" -#: src/api/reference.md:1829 +#: src/api/reference.md:1831 msgid "`createRequire` — module" msgstr "`createRequire` — Modul" -#: src/api/reference.md:1830 +#: src/api/reference.md:1832 msgid "`enableCompileCache` — module" msgstr "`enableCompileCache` — Modul" -#: src/api/reference.md:1831 +#: src/api/reference.md:1833 msgid "`findPackageJSON` — module" msgstr "`findPackageJSON` — Modul" -#: src/api/reference.md:1832 +#: src/api/reference.md:1834 msgid "`findSourceMap` — module" msgstr "`findSourceMap` — Modul" -#: src/api/reference.md:1833 +#: src/api/reference.md:1835 msgid "`flushCompileCache` — module" msgstr "`flushCompileCache` — Modul" -#: src/api/reference.md:1834 +#: src/api/reference.md:1836 msgid "`getCompileCacheDir` — module" msgstr "`getCompileCacheDir` — Modul" -#: src/api/reference.md:1835 +#: src/api/reference.md:1837 msgid "`getSourceMapsSupport` — module" msgstr "`getSourceMapsSupport` — Modul" -#: src/api/reference.md:1836 +#: src/api/reference.md:1838 msgid "`isBuiltin` — module" msgstr "`isBuiltin` — Modul" -#: src/api/reference.md:1837 +#: src/api/reference.md:1839 msgid "`register` — module" msgstr "`register` — Modul" -#: src/api/reference.md:1838 +#: src/api/reference.md:1840 msgid "`registerHooks` — module" msgstr "`registerHooks` — Modul" -#: src/api/reference.md:1839 +#: src/api/reference.md:1841 msgid "`runMain` — module" msgstr "`runMain` — Modul" -#: src/api/reference.md:1840 +#: src/api/reference.md:1842 msgid "`setSourceMapsSupport` — module" msgstr "`setSourceMapsSupport` — Modul" -#: src/api/reference.md:1841 +#: src/api/reference.md:1843 msgid "`stripTypeScriptTypes` — module" msgstr "`stripTypeScriptTypes` — Modul" -#: src/api/reference.md:1842 +#: src/api/reference.md:1844 msgid "`syncBuiltinESMExports` — module" msgstr "`syncBuiltinESMExports` — Modul" -#: src/api/reference.md:1847 +#: src/api/reference.md:1849 msgid "`_cache`" msgstr "`_cache`" -#: src/api/reference.md:1848 +#: src/api/reference.md:1850 msgid "`_extensions`" msgstr "`_extensions`" -#: src/api/reference.md:1849 +#: src/api/reference.md:1851 msgid "`_pathCache`" msgstr "`_pathCache`" -#: src/api/reference.md:1850 src/api/reference.md:2897 +#: src/api/reference.md:1852 src/api/reference.md:2897 msgid "`builtinModules`" msgstr "`builtinModules`" -#: src/api/reference.md:1853 +#: src/api/reference.md:1855 msgid "`globalPaths`" msgstr "`globalPaths`" -#: src/api/reference.md:1860 -msgid "`collection` — instance" -msgstr "`collection` — Instanz" - -#: src/api/reference.md:1862 -msgid "`connect` — instance" -msgstr "`connect` — Instanz" - -#: src/api/reference.md:1863 -msgid "`countDocuments` — instance" -msgstr "`countDocuments` — Instanz" - -#: src/api/reference.md:1864 -msgid "`db` — instance" -msgstr "`db` — Instanz" - -#: src/api/reference.md:1865 -msgid "`deleteMany` — instance" -msgstr "`deleteMany` — Instanz" - -#: src/api/reference.md:1866 -msgid "`deleteOne` — instance" -msgstr "`deleteOne` — Instanz" - -#: src/api/reference.md:1868 -msgid "`findOne` — instance" -msgstr "`findOne` — Instanz" - -#: src/api/reference.md:1869 -msgid "`insertMany` — instance" -msgstr "`insertMany` — Instanz" - -#: src/api/reference.md:1870 -msgid "`insertOne` — instance" -msgstr "`insertOne` — Instanz" - -#: src/api/reference.md:1871 -msgid "`updateMany` — instance" -msgstr "`updateMany` — Instanz" - -#: src/api/reference.md:1872 -msgid "`updateOne` — instance" -msgstr "`updateOne` — Instanz" - -#: src/api/reference.md:1878 +#: src/api/reference.md:1861 msgid "`BlockList`" msgstr "`BlockList`" -#: src/api/reference.md:1881 +#: src/api/reference.md:1864 msgid "`SocketAddress`" msgstr "`SocketAddress`" -#: src/api/reference.md:1882 src/api/reference.md:3011 +#: src/api/reference.md:1865 src/api/reference.md:3011 msgid "`Stream`" msgstr "`Stream`" -#: src/api/reference.md:1886 +#: src/api/reference.md:1869 msgid "`BlockList` — module" msgstr "`BlockList` — Modul" -#: src/api/reference.md:1889 +#: src/api/reference.md:1872 msgid "`SocketAddress` — module" msgstr "`SocketAddress` — Modul" -#: src/api/reference.md:1890 +#: src/api/reference.md:1873 msgid "`Stream` — module" msgstr "`Stream` — Modul" -#: src/api/reference.md:1891 +#: src/api/reference.md:1874 msgid "`__set_dropMaxConnection` — instance _(class: `Server`)_" msgstr "`__set_dropMaxConnection` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1892 +#: src/api/reference.md:1875 msgid "`__set_maxConnections` — instance _(class: `Server`)_" msgstr "`__set_maxConnections` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1893 +#: src/api/reference.md:1876 msgid "`_createServerHandle` — module" msgstr "`_createServerHandle` — Modul" -#: src/api/reference.md:1894 +#: src/api/reference.md:1877 msgid "`_normalizeArgs` — module" msgstr "`_normalizeArgs` — Modul" -#: src/api/reference.md:1895 +#: src/api/reference.md:1878 #, fuzzy msgid "`_readableState` — instance" msgstr "`readyState` — Instanz" -#: src/api/reference.md:1896 +#: src/api/reference.md:1879 #, fuzzy msgid "`_writableState` — instance" msgstr "`writable` — Instanz" -#: src/api/reference.md:1897 +#: src/api/reference.md:1880 msgid "`addAddress` — instance _(class: `BlockList`)_" msgstr "`addAddress` — Instanz _(Klasse: `BlockList`)_" -#: src/api/reference.md:1899 src/api/reference.md:3301 +#: src/api/reference.md:1882 src/api/reference.md:3301 msgid "`addListener` — instance _(class: `Server`)_" msgstr "`addListener` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1900 +#: src/api/reference.md:1883 msgid "`addRange` — instance _(class: `BlockList`)_" msgstr "`addRange` — Instanz _(Klasse: `BlockList`)_" -#: src/api/reference.md:1901 +#: src/api/reference.md:1884 msgid "`addSubnet` — instance _(class: `BlockList`)_" msgstr "`addSubnet` — Instanz _(Klasse: `BlockList`)_" -#: src/api/reference.md:1903 +#: src/api/reference.md:1886 msgid "`address` — instance _(class: `SocketAddress`)_" msgstr "`address` — Instanz _(Klasse: `SocketAddress`)_" -#: src/api/reference.md:1904 src/api/reference.md:3302 +#: src/api/reference.md:1887 src/api/reference.md:3302 msgid "`address` — instance _(class: `Server`)_" msgstr "`address` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1905 +#: src/api/reference.md:1888 msgid "`autoSelectFamilyAttemptedAddresses` — instance _(class: `Socket`)_" msgstr "`autoSelectFamilyAttemptedAddresses` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1906 +#: src/api/reference.md:1889 msgid "`bufferSize` — instance _(class: `Socket`)_" msgstr "`bufferSize` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1907 +#: src/api/reference.md:1890 msgid "`bytesRead` — instance _(class: `Socket`)_" msgstr "`bytesRead` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1908 +#: src/api/reference.md:1891 msgid "`bytesWritten` — instance _(class: `Socket`)_" msgstr "`bytesWritten` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1909 +#: src/api/reference.md:1892 msgid "`check` — instance _(class: `BlockList`)_" msgstr "`check` — Instanz _(Klasse: `BlockList`)_" -#: src/api/reference.md:1910 src/api/reference.md:3304 +#: src/api/reference.md:1893 src/api/reference.md:3304 msgid "`close` — instance _(class: `Server`)_" msgstr "`close` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1913 +#: src/api/reference.md:1896 msgid "`connecting` — instance _(class: `Socket`)_" msgstr "`connecting` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1914 +#: src/api/reference.md:1897 msgid "`cork` — instance _(class: `Socket`)_" msgstr "`cork` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1915 +#: src/api/reference.md:1898 msgid "`createConnection` — module" msgstr "`createConnection` — Modul" -#: src/api/reference.md:1917 +#: src/api/reference.md:1900 msgid "`destroy` — instance _(class: `Socket`)_" msgstr "`destroy` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1918 +#: src/api/reference.md:1901 msgid "`destroyed` — instance _(class: `Socket`)_" msgstr "`destroyed` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1919 +#: src/api/reference.md:1902 msgid "`dropMaxConnection` — instance _(class: `Server`)_" msgstr "`dropMaxConnection` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1920 +#: src/api/reference.md:1903 msgid "`end` — instance _(class: `Socket`)_" msgstr "`end` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1922 src/api/reference.md:3309 +#: src/api/reference.md:1905 src/api/reference.md:3309 msgid "`eventNames` — instance _(class: `Server`)_" msgstr "`eventNames` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1923 +#: src/api/reference.md:1906 msgid "`exportKeyingMaterial` — instance _(class: `Socket`)_" msgstr "`exportKeyingMaterial` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1924 +#: src/api/reference.md:1907 msgid "`family` — instance _(class: `SocketAddress`)_" msgstr "`family` — Instanz _(Klasse: `SocketAddress`)_" -#: src/api/reference.md:1925 +#: src/api/reference.md:1908 msgid "`flowlabel` — instance _(class: `SocketAddress`)_" msgstr "`flowlabel` — Instanz _(Klasse: `SocketAddress`)_" -#: src/api/reference.md:1926 +#: src/api/reference.md:1909 msgid "`fromJSON` — instance _(class: `BlockList`)_" msgstr "`fromJSON` — Instanz _(Klasse: `BlockList`)_" -#: src/api/reference.md:1927 +#: src/api/reference.md:1910 msgid "`getCertificate` — instance _(class: `Socket`)_" msgstr "`getCertificate` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1928 +#: src/api/reference.md:1911 msgid "`getCipher` — instance _(class: `Socket`)_" msgstr "`getCipher` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1929 +#: src/api/reference.md:1912 msgid "`getConnections` — instance _(class: `Server`)_" msgstr "`getConnections` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1930 +#: src/api/reference.md:1913 msgid "`getDefaultAutoSelectFamily` — module" msgstr "`getDefaultAutoSelectFamily` — Modul" -#: src/api/reference.md:1931 +#: src/api/reference.md:1914 msgid "`getDefaultAutoSelectFamilyAttemptTimeout` — module" msgstr "`getDefaultAutoSelectFamilyAttemptTimeout` — Modul" -#: src/api/reference.md:1932 +#: src/api/reference.md:1915 msgid "`getEphemeralKeyInfo` — instance _(class: `Socket`)_" msgstr "`getEphemeralKeyInfo` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1933 +#: src/api/reference.md:1916 msgid "`getFinished` — instance _(class: `Socket`)_" msgstr "`getFinished` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1934 +#: src/api/reference.md:1917 msgid "`getPeerCertificate` — instance _(class: `Socket`)_" msgstr "`getPeerCertificate` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1935 +#: src/api/reference.md:1918 msgid "`getPeerFinished` — instance _(class: `Socket`)_" msgstr "`getPeerFinished` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1936 +#: src/api/reference.md:1919 msgid "`getPeerX509Certificate` — instance _(class: `Socket`)_" msgstr "`getPeerX509Certificate` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1937 +#: src/api/reference.md:1920 msgid "`getProtocol` — instance _(class: `Socket`)_" msgstr "`getProtocol` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1938 +#: src/api/reference.md:1921 msgid "`getSession` — instance _(class: `Socket`)_" msgstr "`getSession` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1939 +#: src/api/reference.md:1922 msgid "`getSharedSigalgs` — instance _(class: `Socket`)_" msgstr "`getSharedSigalgs` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1940 +#: src/api/reference.md:1923 msgid "`getTypeOfService` — instance _(class: `Socket`)_" msgstr "`getTypeOfService` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1941 +#: src/api/reference.md:1924 msgid "`getX509Certificate` — instance _(class: `Socket`)_" msgstr "`getX509Certificate` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1942 +#: src/api/reference.md:1925 msgid "`isBlockList` — module _(class: `BlockList`)_" msgstr "`isBlockList` — Modul _(Klasse: `BlockList`)_" -#: src/api/reference.md:1943 +#: src/api/reference.md:1926 msgid "`isIP` — module" msgstr "`isIP` — Modul" -#: src/api/reference.md:1944 +#: src/api/reference.md:1927 msgid "`isIPv4` — module" msgstr "`isIPv4` — Modul" -#: src/api/reference.md:1945 +#: src/api/reference.md:1928 msgid "`isIPv6` — module" msgstr "`isIPv6` — Modul" -#: src/api/reference.md:1946 +#: src/api/reference.md:1929 msgid "`isSessionReused` — instance _(class: `Socket`)_" msgstr "`isSessionReused` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1947 src/api/reference.md:3314 +#: src/api/reference.md:1930 +#, fuzzy +msgid "`isSocketAddress` — module _(class: `SocketAddress`)_" +msgstr "`parse` — Modul _(Klasse: `SocketAddress`)_" + +#: src/api/reference.md:1931 src/api/reference.md:3314 msgid "`listen` — instance _(class: `Server`)_" msgstr "`listen` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1949 src/api/reference.md:3315 +#: src/api/reference.md:1933 src/api/reference.md:3315 msgid "`listenerCount` — instance _(class: `Server`)_" msgstr "`listenerCount` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1950 +#: src/api/reference.md:1934 msgid "`listeners` — instance _(class: `Socket`)_" msgstr "`listeners` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1951 +#: src/api/reference.md:1935 msgid "`listeners` — instance _(class: `Server`)_" msgstr "`listeners` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1952 +#: src/api/reference.md:1936 msgid "`listening` — instance _(class: `Server`)_" msgstr "`listening` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1953 +#: src/api/reference.md:1937 msgid "`localAddress` — instance _(class: `Socket`)_" msgstr "`localAddress` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1954 +#: src/api/reference.md:1938 msgid "`localFamily` — instance _(class: `Socket`)_" msgstr "`localFamily` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1955 +#: src/api/reference.md:1939 msgid "`localPort` — instance _(class: `Socket`)_" msgstr "`localPort` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1956 +#: src/api/reference.md:1940 msgid "`maxConnections` — instance _(class: `Server`)_" msgstr "`maxConnections` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1958 src/api/reference.md:3316 +#: src/api/reference.md:1942 src/api/reference.md:3316 msgid "`off` — instance _(class: `Server`)_" msgstr "`off` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1961 src/api/reference.md:3318 +#: src/api/reference.md:1945 src/api/reference.md:3318 msgid "`once` — instance _(class: `Server`)_" msgstr "`once` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1962 +#: src/api/reference.md:1946 msgid "`parse` — module _(class: `SocketAddress`)_" msgstr "`parse` — Modul _(Klasse: `SocketAddress`)_" -#: src/api/reference.md:1963 +#: src/api/reference.md:1947 msgid "`pause` — instance _(class: `Socket`)_" msgstr "`pause` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1964 +#: src/api/reference.md:1948 msgid "`pending` — instance _(class: `Socket`)_" msgstr "`pending` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1965 +#: src/api/reference.md:1949 #, fuzzy msgid "`pipe` — instance _(class: `Socket`)_" msgstr "`pause` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1966 +#: src/api/reference.md:1950 msgid "`port` — instance _(class: `SocketAddress`)_" msgstr "`port` — Instanz _(Klasse: `SocketAddress`)_" -#: src/api/reference.md:1967 +#: src/api/reference.md:1951 #, fuzzy msgid "`prependListener` — instance _(class: `Socket`)_" msgstr "`removeListener` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1968 +#: src/api/reference.md:1952 #, fuzzy msgid "`prependOnceListener` — instance _(class: `Socket`)_" msgstr "`removeListener` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1969 +#: src/api/reference.md:1953 msgid "`rawListeners` — instance _(class: `Socket`)_" msgstr "`rawListeners` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1970 +#: src/api/reference.md:1954 msgid "`rawListeners` — instance _(class: `Server`)_" msgstr "`rawListeners` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1971 +#: src/api/reference.md:1955 #, fuzzy msgid "`read` — instance _(class: `Socket`)_" msgstr "`end` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1972 src/api/reference.md:3056 +#: src/api/reference.md:1956 src/api/reference.md:3056 msgid "`readable` — instance" msgstr "`readable` — Instanz" -#: src/api/reference.md:1973 src/api/reference.md:3060 +#: src/api/reference.md:1957 src/api/reference.md:3060 msgid "`readableEnded` — instance" msgstr "`readableEnded` — Instanz" -#: src/api/reference.md:1974 +#: src/api/reference.md:1958 msgid "`readyState` — instance _(class: `Socket`)_" msgstr "`readyState` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1977 +#: src/api/reference.md:1961 msgid "`remoteFamily` — instance _(class: `Socket`)_" msgstr "`remoteFamily` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1978 +#: src/api/reference.md:1962 msgid "`remotePort` — instance _(class: `Socket`)_" msgstr "`remotePort` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1979 +#: src/api/reference.md:1963 msgid "`removeAllListeners` — instance _(class: `Socket`)_" msgstr "`removeAllListeners` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1980 src/api/reference.md:3319 +#: src/api/reference.md:1964 src/api/reference.md:3319 msgid "`removeAllListeners` — instance _(class: `Server`)_" msgstr "`removeAllListeners` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1982 src/api/reference.md:3320 +#: src/api/reference.md:1966 src/api/reference.md:3320 msgid "`removeListener` — instance _(class: `Server`)_" msgstr "`removeListener` — Instanz _(Klasse: `Server`)_" -#: src/api/reference.md:1983 +#: src/api/reference.md:1967 msgid "`resetAndDestroy` — instance _(class: `Socket`)_" msgstr "`resetAndDestroy` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1984 +#: src/api/reference.md:1968 msgid "`resume` — instance _(class: `Socket`)_" msgstr "`resume` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1985 +#: src/api/reference.md:1969 msgid "`rules` — instance _(class: `BlockList`)_" msgstr "`rules` — Instanz _(Klasse: `BlockList`)_" -#: src/api/reference.md:1986 +#: src/api/reference.md:1970 msgid "`setDefaultAutoSelectFamily` — module" msgstr "`setDefaultAutoSelectFamily` — Modul" -#: src/api/reference.md:1987 +#: src/api/reference.md:1971 msgid "`setDefaultAutoSelectFamilyAttemptTimeout` — module" msgstr "`setDefaultAutoSelectFamilyAttemptTimeout` — Modul" -#: src/api/reference.md:1988 +#: src/api/reference.md:1972 msgid "`setDefaultEncoding` — instance _(class: `Socket`)_" msgstr "`setDefaultEncoding` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1989 +#: src/api/reference.md:1973 msgid "`setEncoding` — instance _(class: `Socket`)_" msgstr "`setEncoding` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1990 +#: src/api/reference.md:1974 msgid "`setKeepAlive` — instance _(class: `Socket`)_" msgstr "`setKeepAlive` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1991 +#: src/api/reference.md:1975 msgid "`setKeyCert` — instance _(class: `Socket`)_" msgstr "`setKeyCert` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1992 +#: src/api/reference.md:1976 msgid "`setMaxSendFragment` — instance _(class: `Socket`)_" msgstr "`setMaxSendFragment` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1993 +#: src/api/reference.md:1977 msgid "`setNoDelay` — instance _(class: `Socket`)_" msgstr "`setNoDelay` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1994 +#: src/api/reference.md:1978 msgid "`setTimeout` — instance _(class: `Socket`)_" msgstr "`setTimeout` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1995 +#: src/api/reference.md:1979 msgid "`setTypeOfService` — instance _(class: `Socket`)_" msgstr "`setTypeOfService` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1996 +#: src/api/reference.md:1980 msgid "`timeout` — instance _(class: `Socket`)_" msgstr "`timeout` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1997 +#: src/api/reference.md:1981 msgid "`toJSON` — instance _(class: `BlockList`)_" msgstr "`toJSON` — Instanz _(Klasse: `BlockList`)_" -#: src/api/reference.md:1998 +#: src/api/reference.md:1982 msgid "`uncork` — instance _(class: `Socket`)_" msgstr "`uncork` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:1999 +#: src/api/reference.md:1983 #, fuzzy msgid "`unpipe` — instance _(class: `Socket`)_" msgstr "`unref` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:2001 +#: src/api/reference.md:1985 msgid "`upgradeToTLS` — instance _(class: `Socket`)_" msgstr "`upgradeToTLS` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:2002 src/api/reference.md:3074 +#: src/api/reference.md:1986 src/api/reference.md:3074 msgid "`writable` — instance" msgstr "`writable` — Instanz" -#: src/api/reference.md:2003 src/api/reference.md:3076 +#: src/api/reference.md:1987 +#, fuzzy +msgid "`writableCorked` — instance _(class: `Socket`)_" +msgstr "`write` — Instanz _(Klasse: `Socket`)_" + +#: src/api/reference.md:1988 src/api/reference.md:3076 msgid "`writableEnded` — instance" msgstr "`writableEnded` — Instanz" -#: src/api/reference.md:2004 +#: src/api/reference.md:1989 msgid "`write` — instance _(class: `Socket`)_" msgstr "`write` — Instanz _(Klasse: `Socket`)_" -#: src/api/reference.md:2006 +#: src/api/reference.md:1991 msgid "`node-fetch`" msgstr "`node-fetch`" -#: src/api/reference.md:2020 +#: src/api/reference.md:2005 msgid "`node-pty`" msgstr "`node-pty`" -#: src/api/reference.md:2034 +#: src/api/reference.md:2019 msgid "`createTransport` — module" msgstr "`createTransport` — Modul" -#: src/api/reference.md:2035 +#: src/api/reference.md:2020 msgid "`sendMail` — instance" msgstr "`sendMail` — Instanz" -#: src/api/reference.md:2036 +#: src/api/reference.md:2021 msgid "`verify` — instance" msgstr "`verify` — Instanz" -#: src/api/reference.md:2038 +#: src/api/reference.md:2023 msgid "`os`" msgstr "`os`" -#: src/api/reference.md:2042 +#: src/api/reference.md:2027 msgid "`arch` — module" msgstr "`arch` — Modul" -#: src/api/reference.md:2043 +#: src/api/reference.md:2028 msgid "`availableParallelism` — module" msgstr "`availableParallelism` — Modul" -#: src/api/reference.md:2044 +#: src/api/reference.md:2029 msgid "`cpus` — module" msgstr "`cpus` — Modul" -#: src/api/reference.md:2045 +#: src/api/reference.md:2030 msgid "`endianness` — module" msgstr "`endianness` — Modul" -#: src/api/reference.md:2046 +#: src/api/reference.md:2031 msgid "`freemem` — module" msgstr "`freemem` — Modul" -#: src/api/reference.md:2047 +#: src/api/reference.md:2032 msgid "`getPriority` — module" msgstr "`getPriority` — Modul" -#: src/api/reference.md:2048 +#: src/api/reference.md:2033 msgid "`homedir` — module" msgstr "`homedir` — Modul" -#: src/api/reference.md:2049 +#: src/api/reference.md:2034 msgid "`hostname` — module" msgstr "`hostname` — Modul" -#: src/api/reference.md:2050 +#: src/api/reference.md:2035 msgid "`loadavg` — module" msgstr "`loadavg` — Modul" -#: src/api/reference.md:2051 +#: src/api/reference.md:2036 msgid "`machine` — module" msgstr "`machine` — Modul" -#: src/api/reference.md:2052 +#: src/api/reference.md:2037 msgid "`networkInterfaces` — module" msgstr "`networkInterfaces` — Modul" -#: src/api/reference.md:2053 +#: src/api/reference.md:2038 msgid "`platform` — module" msgstr "`platform` — Modul" -#: src/api/reference.md:2054 +#: src/api/reference.md:2039 msgid "`release` — module" msgstr "`release` — Modul" -#: src/api/reference.md:2055 +#: src/api/reference.md:2040 msgid "`setPriority` — module" msgstr "`setPriority` — Modul" -#: src/api/reference.md:2056 +#: src/api/reference.md:2041 msgid "`tmpdir` — module" msgstr "`tmpdir` — Modul" -#: src/api/reference.md:2057 +#: src/api/reference.md:2042 msgid "`totalmem` — module" msgstr "`totalmem` — Modul" -#: src/api/reference.md:2058 +#: src/api/reference.md:2043 msgid "`type` — module" msgstr "`type` — Modul" -#: src/api/reference.md:2059 src/api/reference.md:2767 +#: src/api/reference.md:2044 src/api/reference.md:2767 msgid "`uptime` — module" msgstr "`uptime` — Modul" -#: src/api/reference.md:2060 +#: src/api/reference.md:2045 msgid "`userInfo` — module" msgstr "`userInfo` — Modul" -#: src/api/reference.md:2061 +#: src/api/reference.md:2046 msgid "`version` — module" msgstr "`version` — Modul" -#: src/api/reference.md:2065 +#: src/api/reference.md:2050 msgid "`EOL`" msgstr "`EOL`" -#: src/api/reference.md:2068 +#: src/api/reference.md:2053 msgid "`devNull`" msgstr "`devNull`" -#: src/api/reference.md:2070 +#: src/api/reference.md:2055 msgid "`path`" msgstr "`path`" -#: src/api/reference.md:2074 src/api/reference.md:2100 -#: src/api/reference.md:2126 +#: src/api/reference.md:2059 src/api/reference.md:2085 +#: src/api/reference.md:2111 msgid "`_makeLong` — module" msgstr "`_makeLong` — Modul" -#: src/api/reference.md:2075 src/api/reference.md:2101 -#: src/api/reference.md:2127 +#: src/api/reference.md:2060 src/api/reference.md:2086 +#: src/api/reference.md:2112 msgid "`basename` — module" msgstr "`basename` — Modul" -#: src/api/reference.md:2076 src/api/reference.md:2102 -#: src/api/reference.md:2128 +#: src/api/reference.md:2061 src/api/reference.md:2087 +#: src/api/reference.md:2113 msgid "`dirname` — module" msgstr "`dirname` — Modul" -#: src/api/reference.md:2077 src/api/reference.md:2103 -#: src/api/reference.md:2129 +#: src/api/reference.md:2062 src/api/reference.md:2088 +#: src/api/reference.md:2114 msgid "`extname` — module" msgstr "`extname` — Modul" -#: src/api/reference.md:2078 src/api/reference.md:2104 -#: src/api/reference.md:2130 src/api/reference.md:3186 +#: src/api/reference.md:2063 src/api/reference.md:2089 +#: src/api/reference.md:2115 src/api/reference.md:3186 #: src/api/reference.md:3413 src/api/reference.md:3448 msgid "`format` — module" msgstr "`format` — Modul" -#: src/api/reference.md:2079 src/api/reference.md:2105 -#: src/api/reference.md:2131 +#: src/api/reference.md:2064 src/api/reference.md:2090 +#: src/api/reference.md:2116 msgid "`isAbsolute` — module" msgstr "`isAbsolute` — Modul" -#: src/api/reference.md:2080 src/api/reference.md:2106 -#: src/api/reference.md:2132 +#: src/api/reference.md:2065 src/api/reference.md:2091 +#: src/api/reference.md:2117 msgid "`join` — module" msgstr "`join` — Modul" -#: src/api/reference.md:2081 src/api/reference.md:2107 -#: src/api/reference.md:2133 +#: src/api/reference.md:2066 src/api/reference.md:2092 +#: src/api/reference.md:2118 msgid "`matchesGlob` — module" msgstr "`matchesGlob` — Modul" -#: src/api/reference.md:2082 src/api/reference.md:2108 -#: src/api/reference.md:2134 +#: src/api/reference.md:2067 src/api/reference.md:2093 +#: src/api/reference.md:2119 msgid "`normalize` — module" msgstr "`normalize` — Modul" -#: src/api/reference.md:2083 src/api/reference.md:2109 -#: src/api/reference.md:2135 src/api/reference.md:2825 +#: src/api/reference.md:2068 src/api/reference.md:2094 +#: src/api/reference.md:2120 src/api/reference.md:2825 #: src/api/reference.md:3414 msgid "`parse` — module" msgstr "`parse` — Modul" -#: src/api/reference.md:2084 src/api/reference.md:2110 -#: src/api/reference.md:2136 +#: src/api/reference.md:2069 src/api/reference.md:2095 +#: src/api/reference.md:2121 msgid "`relative` — module" msgstr "`relative` — Modul" -#: src/api/reference.md:2086 src/api/reference.md:2112 -#: src/api/reference.md:2138 +#: src/api/reference.md:2071 src/api/reference.md:2097 +#: src/api/reference.md:2123 msgid "`toNamespacedPath` — module" msgstr "`toNamespacedPath` — Modul" -#: src/api/reference.md:2091 src/api/reference.md:2117 -#: src/api/reference.md:2143 +#: src/api/reference.md:2076 src/api/reference.md:2102 +#: src/api/reference.md:2128 msgid "`delimiter`" msgstr "`delimiter`" -#: src/api/reference.md:2092 src/api/reference.md:2118 -#: src/api/reference.md:2144 +#: src/api/reference.md:2077 src/api/reference.md:2103 +#: src/api/reference.md:2129 msgid "`posix`" msgstr "`posix`" -#: src/api/reference.md:2093 src/api/reference.md:2119 -#: src/api/reference.md:2145 +#: src/api/reference.md:2078 src/api/reference.md:2104 +#: src/api/reference.md:2130 msgid "`sep`" msgstr "`sep`" -#: src/api/reference.md:2094 src/api/reference.md:2120 -#: src/api/reference.md:2146 +#: src/api/reference.md:2079 src/api/reference.md:2105 +#: src/api/reference.md:2131 msgid "`win32`" msgstr "`win32`" -#: src/api/reference.md:2096 +#: src/api/reference.md:2081 msgid "`path/posix`" msgstr "`path/posix`" -#: src/api/reference.md:2122 +#: src/api/reference.md:2107 msgid "`path/win32`" msgstr "`path/win32`" -#: src/api/reference.md:2148 +#: src/api/reference.md:2133 msgid "`perf_hooks`" msgstr "`perf_hooks`" -#: src/api/reference.md:2152 +#: src/api/reference.md:2137 msgid "`Performance`" msgstr "`Performance`" -#: src/api/reference.md:2153 +#: src/api/reference.md:2138 msgid "`PerformanceEntry`" msgstr "`PerformanceEntry`" -#: src/api/reference.md:2154 +#: src/api/reference.md:2139 msgid "`PerformanceMark`" msgstr "`PerformanceMark`" -#: src/api/reference.md:2155 +#: src/api/reference.md:2140 msgid "`PerformanceMeasure`" msgstr "`PerformanceMeasure`" -#: src/api/reference.md:2156 +#: src/api/reference.md:2141 msgid "`PerformanceObserver`" msgstr "`PerformanceObserver`" -#: src/api/reference.md:2157 +#: src/api/reference.md:2142 msgid "`PerformanceObserverEntryList`" msgstr "`PerformanceObserverEntryList`" -#: src/api/reference.md:2158 +#: src/api/reference.md:2143 msgid "`PerformanceResourceTiming`" msgstr "`PerformanceResourceTiming`" -#: src/api/reference.md:2162 +#: src/api/reference.md:2147 msgid "`createHistogram` — module" msgstr "`createHistogram` — Modul" -#: src/api/reference.md:2163 +#: src/api/reference.md:2148 msgid "`disconnect` — instance _(class: `PerformanceObserver`)_" msgstr "`disconnect` — Instanz _(Klasse: `PerformanceObserver`)_" -#: src/api/reference.md:2164 +#: src/api/reference.md:2149 msgid "`eventLoopUtilization` — module" msgstr "`eventLoopUtilization` — Modul" -#: src/api/reference.md:2165 +#: src/api/reference.md:2150 msgid "`monitorEventLoopDelay` — module" msgstr "`monitorEventLoopDelay` — Modul" -#: src/api/reference.md:2166 +#: src/api/reference.md:2151 msgid "`observe` — instance _(class: `PerformanceObserver`)_" msgstr "`observe` — Instanz _(Klasse: `PerformanceObserver`)_" -#: src/api/reference.md:2167 +#: src/api/reference.md:2152 msgid "`takeRecords` — instance _(class: `PerformanceObserver`)_" msgstr "`takeRecords` — Instanz _(Klasse: `PerformanceObserver`)_" -#: src/api/reference.md:2168 +#: src/api/reference.md:2153 msgid "`timerify` — module" msgstr "`timerify` — Modul" -#: src/api/reference.md:2174 +#: src/api/reference.md:2159 msgid "`performance`" msgstr "`performance`" -#: src/api/reference.md:2176 src/contributing/architecture.md:26 +#: src/api/reference.md:2161 src/contributing/architecture.md:26 msgid "`perry`" msgstr "`perry`" -#: src/api/reference.md:2180 +#: src/api/reference.md:2165 msgid "`embeddedFiles` — module" msgstr "`embeddedFiles` — Modul" -#: src/api/reference.md:2181 +#: src/api/reference.md:2166 msgid "`readEmbedded` — module" msgstr "`readEmbedded` — Modul" -#: src/api/reference.md:2191 +#: src/api/reference.md:2176 msgid "`js_ads_banner_create` — module" msgstr "`js_ads_banner_create` — Modul" -#: src/api/reference.md:2192 +#: src/api/reference.md:2177 msgid "`js_ads_banner_destroy` — module" msgstr "`js_ads_banner_destroy` — Modul" -#: src/api/reference.md:2193 +#: src/api/reference.md:2178 msgid "`js_ads_interstitial_load` — module" msgstr "`js_ads_interstitial_load` — Modul" -#: src/api/reference.md:2194 +#: src/api/reference.md:2179 msgid "`js_ads_interstitial_show` — module" msgstr "`js_ads_interstitial_show` — Modul" -#: src/api/reference.md:2195 +#: src/api/reference.md:2180 msgid "`js_ads_request_consent` — module" msgstr "`js_ads_request_consent` — Modul" -#: src/api/reference.md:2196 +#: src/api/reference.md:2181 msgid "`js_ads_rewarded_load` — module" msgstr "`js_ads_rewarded_load` — Modul" -#: src/api/reference.md:2197 +#: src/api/reference.md:2182 msgid "`js_ads_rewarded_show` — module" msgstr "`js_ads_rewarded_show` — Modul" -#: src/api/reference.md:2199 +#: src/api/reference.md:2184 msgid "`perry/audio`" msgstr "`perry/audio`" -#: src/api/reference.md:2203 +#: src/api/reference.md:2188 msgid "`createBus` — module" msgstr "`createBus` — Modul" -#: src/api/reference.md:2204 +#: src/api/reference.md:2189 msgid "`crossfade` — module" msgstr "`crossfade` — Modul" -#: src/api/reference.md:2205 +#: src/api/reference.md:2190 msgid "`destroyBus` — module" msgstr "`destroyBus` — Modul" -#: src/api/reference.md:2206 +#: src/api/reference.md:2191 msgid "`fadeIn` — module" msgstr "`fadeIn` — Modul" -#: src/api/reference.md:2207 +#: src/api/reference.md:2192 msgid "`fadeOut` — module" msgstr "`fadeOut` — Modul" -#: src/api/reference.md:2208 src/api/reference.md:2332 +#: src/api/reference.md:2193 src/api/reference.md:2332 msgid "`getDuration` — module" msgstr "`getDuration` — Modul" -#: src/api/reference.md:2209 +#: src/api/reference.md:2194 msgid "`getPosition` — module" msgstr "`getPosition` — Modul" -#: src/api/reference.md:2210 src/api/reference.md:2334 +#: src/api/reference.md:2195 src/api/reference.md:2334 msgid "`isPlaying` — module" msgstr "`isPlaying` — Modul" -#: src/api/reference.md:2211 +#: src/api/reference.md:2196 msgid "`loadSound` — module" msgstr "`loadSound` — Modul" -#: src/api/reference.md:2212 +#: src/api/reference.md:2197 msgid "`muteBus` — module" msgstr "`muteBus` — Modul" -#: src/api/reference.md:2213 +#: src/api/reference.md:2198 msgid "`onEnded` — module" msgstr "`onEnded` — Modul" -#: src/api/reference.md:2214 +#: src/api/reference.md:2199 msgid "`onLoaded` — module" msgstr "`onLoaded` — Modul" -#: src/api/reference.md:2215 src/api/reference.md:2337 +#: src/api/reference.md:2200 src/api/reference.md:2337 msgid "`pause` — module" msgstr "`pause` — Modul" -#: src/api/reference.md:2216 src/api/reference.md:2338 +#: src/api/reference.md:2201 src/api/reference.md:2338 msgid "`play` — module" msgstr "`play` — Modul" -#: src/api/reference.md:2217 +#: src/api/reference.md:2202 msgid "`resume` — module" msgstr "`resume` — Modul" -#: src/api/reference.md:2218 +#: src/api/reference.md:2203 msgid "`resumeAll` — module" msgstr "`resumeAll` — Modul" -#: src/api/reference.md:2219 +#: src/api/reference.md:2204 msgid "`setMasterVolume` — module" msgstr "`setMasterVolume` — Modul" -#: src/api/reference.md:2220 +#: src/api/reference.md:2205 msgid "`setPan` — module" msgstr "`setPan` — Modul" -#: src/api/reference.md:2221 src/api/reference.md:2341 +#: src/api/reference.md:2206 src/api/reference.md:2341 msgid "`setRate` — module" msgstr "`setRate` — Modul" -#: src/api/reference.md:2222 src/api/reference.md:2342 +#: src/api/reference.md:2207 src/api/reference.md:2342 msgid "`setVolume` — module" msgstr "`setVolume` — Modul" -#: src/api/reference.md:2223 +#: src/api/reference.md:2208 msgid "`soloBus` — module" msgstr "`soloBus` — Modul" -#: src/api/reference.md:2224 src/api/reference.md:2247 +#: src/api/reference.md:2209 src/api/reference.md:2247 #: src/api/reference.md:2276 src/api/reference.md:2289 #: src/api/reference.md:2343 msgid "`stop` — module" msgstr "`stop` — Modul" -#: src/api/reference.md:2225 +#: src/api/reference.md:2210 msgid "`suspend` — module" msgstr "`suspend` — Modul" -#: src/api/reference.md:2226 +#: src/api/reference.md:2211 msgid "`unload` — module" msgstr "`unload` — Modul" -#: src/api/reference.md:2228 +#: src/api/reference.md:2213 msgid "`perry/background`" msgstr "`perry/background`" -#: src/api/reference.md:2232 +#: src/api/reference.md:2217 msgid "`cancel` — module" msgstr "`cancel` — Modul" -#: src/api/reference.md:2233 +#: src/api/reference.md:2218 msgid "`registerTask` — module" msgstr "`registerTask` — Modul" -#: src/api/reference.md:2234 +#: src/api/reference.md:2219 msgid "`schedule` — module" msgstr "`schedule` — Modul" +#: src/api/reference.md:2221 +#, fuzzy +msgid "`perry/component`" +msgstr "`perry/compose`" + +#: src/api/reference.md:2225 +#, fuzzy +msgid "`callComponent` — module" +msgstr "`compose` — Modul" + +#: src/api/reference.md:2226 +#, fuzzy +msgid "`callComponentImport` — module" +msgstr "`composeUp` — Modul" + +#: src/api/reference.md:2227 +#, fuzzy +msgid "`createComponentHostResource` — module" +msgstr "`createInterface` — Modul" + +#: src/api/reference.md:2228 +#, fuzzy +msgid "`createComponentResource` — module" +msgstr "`createInterface` — Modul" + +#: src/api/reference.md:2229 +#, fuzzy +msgid "`disposeComponent` — module" +msgstr "`isContext` — Modul" + +#: src/api/reference.md:2230 +#, fuzzy +msgid "`getComponentHostResourceValue` — module" +msgstr "`executionAsyncResource` — Modul" + +#: src/api/reference.md:2231 +#, fuzzy +msgid "`getComponentResourceValue` — module" +msgstr "`executionAsyncResource` — Modul" + +#: src/api/reference.md:2232 +#, fuzzy +msgid "`loadComponent` — module" +msgstr "`moment` — Modul" + +#: src/api/reference.md:2233 +#, fuzzy +msgid "`registerComponentExports` — module" +msgstr "`registerHooks` — Modul" + +#: src/api/reference.md:2234 +#, fuzzy +msgid "`runComponentCommand` — module" +msgstr "`runInContext` — Modul" + #: src/api/reference.md:2236 msgid "`perry/compose`" msgstr "`perry/compose`" @@ -43789,7 +44035,7 @@ msgstr "`platform`" msgid "`ppid`" msgstr "`ppid`" -#: src/api/reference.md:2794 src/contributing/building.md:52 +#: src/api/reference.md:2794 src/contributing/building.md:59 msgid "`release`" msgstr "`release`" @@ -44587,6 +44833,10 @@ msgstr "`WritableStreamDefaultController`" msgid "`WritableStreamDefaultWriter`" msgstr "`WritableStreamDefaultWriter`" +#: src/api/reference.md:3139 +msgid "`streams`" +msgstr "`streams`" + #: src/api/reference.md:3147 src/api/reference.md:3169 #: src/api/reference.md:3431 msgid "`TextDecoder`" @@ -46893,8 +47143,8 @@ msgstr "`volumes`" #: src/container/containers.md:54 msgid "" -"Volume mounts in `\"host:container[:ro]\"` form, e.g. `[\"./data:/data:ro" -"\"]`." +"Volume mounts in `\"host:container[:ro]\"` form, e.g. `[\"./data:/data:" +"ro\"]`." msgstr "" "Volume-Mounts in der Form `\"host:container[:ro]\"`, z. B. `[\"./data:/data:" "ro\"]`." @@ -47347,13 +47597,13 @@ msgstr "Backend-Introspektion" #: src/container/containers.md:212 msgid "" -"`getBackend()` is synchronous and returns the canonical backend name (`" -"\"docker\"`, `\"podman\"`, `\"apple/container\"`, etc.). It will perform a " +"`getBackend()` is synchronous and returns the canonical backend name " +"(`\"docker\"`, `\"podman\"`, `\"apple/container\"`, etc.). It will perform a " "synchronous in-place probe on first call so the result is always the live " "name; calls after the first hit a cached `OnceLock` and return instantly." msgstr "" -"`getBackend()` ist synchron und gibt den kanonischen Backend-Namen zurück (`" -"\"docker\"`, `\"podman\"`, `\"apple/container\"` usw.). Beim ersten Aufruf " +"`getBackend()` ist synchron und gibt den kanonischen Backend-Namen zurück " +"(`\"docker\"`, `\"podman\"`, `\"apple/container\"` usw.). Beim ersten Aufruf " "wird eine synchrone Sondierung durchgeführt, sodass das Ergebnis stets der " "aktuelle Name ist; nachfolgende Aufrufe treffen einen gecachten `OnceLock` " "und kehren sofort zurück." @@ -47466,8 +47716,8 @@ msgid "" " image: \"myorg/api:1.0\",\n" " depends_on: { db: { condition: \"service_healthy\" } },\n" " environment: {\n" -" DATABASE_URL: \"postgres://app:changeme@app-db:5432/app" -"\",\n" +" DATABASE_URL: \"postgres://app:changeme@app-db:5432/" +"app\",\n" " },\n" " ports: [\"8080:8080\"],\n" " networks: [\"app-db-net\", \"app-web-net\"],\n" @@ -47520,8 +47770,8 @@ msgstr "" " image: \"myorg/api:1.0\",\n" " depends_on: { db: { condition: \"service_healthy\" } },\n" " environment: {\n" -" DATABASE_URL: \"postgres://app:changeme@app-db:5432/app" -"\",\n" +" DATABASE_URL: \"postgres://app:changeme@app-db:5432/" +"app\",\n" " },\n" " ports: [\"8080:8080\"],\n" " networks: [\"app-db-net\", \"app-web-net\"],\n" @@ -48654,11 +48904,11 @@ msgstr "**Masquerade / NAT deaktivieren** (Host-seitig)" #: src/container/networking.md:178 msgid "" -"`driver_opts: { \"com.docker.network.bridge.enable_ip_masquerade\": \"false" -"\" }`" +"`driver_opts: { \"com.docker.network.bridge.enable_ip_masquerade\": " +"\"false\" }`" msgstr "" -"`driver_opts: { \"com.docker.network.bridge.enable_ip_masquerade\": \"false" -"\" }`" +"`driver_opts: { \"com.docker.network.bridge.enable_ip_masquerade\": " +"\"false\" }`" #: src/container/networking.md:179 msgid "**Custom MTU** (matches host network)" @@ -48937,7 +49187,7 @@ msgid "This matches `docker compose down` semantics:" msgstr "Dies entspricht der Semantik von `docker compose down`:" #: src/container/volumes.md:89 src/cli/commands.md:8 -#: src/contributing/building.md:48 +#: src/contributing/building.md:53 msgid "Command" msgstr "Befehl" @@ -49249,8 +49499,8 @@ msgid "" "Linux capabilities to add. Specific (e.g. `[\"NET_BIND_SERVICE\"]`), not " "blanket." msgstr "" -"Hinzuzufügende Linux-Capabilities. Spezifisch (z. B. `[\"NET_BIND_SERVICE" -"\"]`), nicht pauschal." +"Hinzuzufügende Linux-Capabilities. Spezifisch (z. B. " +"`[\"NET_BIND_SERVICE\"]`), nicht pauschal." #: src/container/security.md:21 msgid "" @@ -49356,8 +49606,8 @@ msgid "" "`nobody` on most distros)." msgstr "" "`user: \"nobody\"` — kein Root-Benutzer innerhalb des Containers. Falls das " -"Image keinen `nobody`-Benutzer hat, ersetzen Sie dies durch `" -"\"65534:65534\"` (die numerische UID/GID von `nobody` auf den meisten " +"Image keinen `nobody`-Benutzer hat, ersetzen Sie dies durch " +"`\"65534:65534\"` (die numerische UID/GID von `nobody` auf den meisten " "Distributionen)." #: src/container/security.md:78 @@ -49750,8 +50000,8 @@ msgid "" "**Drop all capabilities, add specific ones back** (`cap_drop: [\"ALL\"]` + " "minimal `cap_add`)." msgstr "" -"**Alle Funktionen fallen lassen, spezifische hinzufügen** (`cap_drop: [\"ALL" -"\"]` + minimal `cap_add`)." +"**Alle Funktionen fallen lassen, spezifische hinzufügen** (`cap_drop: " +"[\"ALL\"]` + minimal `cap_add`)." #: src/container/security.md:209 msgid "**Read-only root filesystem** (`read_only: true`)." @@ -49843,10 +50093,10 @@ msgid "" "down` invocation:" msgstr "" "Perrys Laufzeit liefert `process.on('SIGINT', ...)` derzeit nicht an Ihren " -"TypeScript-Code. Daher ist das kanonische Muster \"Strg-C beendet den Stack" -"\" heute nicht umsetzbar. Folgen Sie stattdessen dem Modell `docker compose " -"up -d` / `docker compose down`: Deploy + Verifizierung + exit 0, mit dem " -"Abbau hinter einem separaten `--down`-Aufruf:" +"TypeScript-Code. Daher ist das kanonische Muster \"Strg-C beendet den " +"Stack\" heute nicht umsetzbar. Folgen Sie stattdessen dem Modell `docker " +"compose up -d` / `docker compose down`: Deploy + Verifizierung + exit 0, mit " +"dem Abbau hinter einem separaten `--down`-Aufruf:" #: src/container/production-patterns.md:20 msgid "" @@ -51061,8 +51311,8 @@ msgstr "// Beide produzieren ContainerInfo mit der gleichen Feldsemantik:" #: src/container/determinism.md:301 msgid "" -"User code reading `info.status` sees `\"running\"` from any backend — not `" -"\"Up 5 seconds\"` from docker vs `\"running\"` from apple." +"User code reading `info.status` sees `\"running\"` from any backend — not " +"`\"Up 5 seconds\"` from docker vs `\"running\"` from apple." msgstr "" "Benutzercode lesen `info.status` sieht `\"running\"` von jedem Backend — " "nicht `\"Up 5 seconds\"` von Docker vs `\"running\"` von Apfel." @@ -52466,18 +52716,18 @@ msgid "" "code determines the **symbol** (`USD` → `$`, `EUR` → `€`, `GBP` → `£`, …; " "codes without a well-known symbol render as the code itself), while the " "locale keeps controlling the **layout** — separators and symbol placement. " -"With `en = \"GBP\"`, English output becomes `£1,234.50`; with `de = \"USD" -"\"`, German output becomes `1.234,50 $`. Locales without an entry (exact " -"locale first, then base language) use their built-in default symbol." +"With `en = \"GBP\"`, English output becomes `£1,234.50`; with `de = " +"\"USD\"`, German output becomes `1.234,50 $`. Locales without an entry " +"(exact locale first, then base language) use their built-in default symbol." msgstr "" "Wenn `Currency(value)` aufgerufen wird, bestimmt der konfigurierte ISO 4217-" -"Code des aktiven Locales den **Symbol** (`USD` → `$`, `EUR` → `€`, `GBP` → `" -"£`, ...; Codes ohne ein bekanntes Symbol, das als Code selbst rendern wird), " -"während die Lokalität die **Layout** — Abscheider und Symbolplatzierung. Mit " -"`en = \"GBP\"` wird die englische Ausgabe `£1,234.50`; mit `de = \"USD\"` " -"wird die deutsche Ausgabe `1.234,50 $`. Lokale ohne Eintrag (genaue " -"Lokalisierung zuerst, dann Basissprache) verwenden ihr eingebautes " -"Standardsymbol." +"Code des aktiven Locales den **Symbol** (`USD` → `$`, `EUR` → `€`, `GBP` → " +"`£`, ...; Codes ohne ein bekanntes Symbol, das als Code selbst rendern " +"wird), während die Lokalität die **Layout** — Abscheider und " +"Symbolplatzierung. Mit `en = \"GBP\"` wird die englische Ausgabe " +"`£1,234.50`; mit `de = \"USD\"` wird die deutsche Ausgabe `1.234,50 $`. " +"Lokale ohne Eintrag (genaue Lokalisierung zuerst, dann Basissprache) " +"verwenden ihr eingebautes Standardsymbol." #: src/i18n/cli.md:1 msgid "i18n CLI Tools" @@ -52541,7 +52791,7 @@ msgstr "" msgid "Example Output" msgstr "Beispielausgabe" -#: src/i18n/cli.md:32 +#: src/i18n/cli.md:32 src/testing/ci-tiers.md:267 msgid "Workflow" msgstr "Workflow" @@ -52756,13 +53006,13 @@ msgstr "" #: src/updater/overview.md:28 msgid "" "```typescript\n" -"// import { checkForUpdate, initUpdater, markHealthy } from \"@perry/updater" -"\"\n" +"// import { checkForUpdate, initUpdater, markHealthy } from \"@perry/" +"updater\"\n" "```" msgstr "" "```typescript\n" -"// import { checkForUpdate, initUpdater, markHealthy } from \"@perry/updater" -"\"\n" +"// import { checkForUpdate, initUpdater, markHealthy } from \"@perry/" +"updater\"\n" "```" #: src/updater/overview.md:32 @@ -52778,8 +53028,8 @@ msgstr "" #: src/updater/overview.md:36 msgid "" "```typescript\n" -"// Pseudocode using @perry/updater's wrapper. Drop into a \"Check for updates" -"\"\n" +"// Pseudocode using @perry/updater's wrapper. Drop into a \"Check for " +"updates\"\n" "// menu item or a periodic timer. The manifest URL must serve over HTTPS.\n" "//\n" "// const update = await checkForUpdate({\n" @@ -52803,8 +53053,8 @@ msgid "" "```" msgstr "" "```typescript\n" -"// Pseudocode using @perry/updater's wrapper. Drop into a \"Check for updates" -"\"\n" +"// Pseudocode using @perry/updater's wrapper. Drop into a \"Check for " +"updates\"\n" "// menu item or a periodic timer. The manifest URL must serve over HTTPS.\n" "//\n" "// const update = await checkForUpdate({\n" @@ -52903,8 +53153,8 @@ msgid "" "// \"notes\": \"Bug fixes and performance improvements\",\n" "// \"platforms\": {\n" "// \"darwin-aarch64\": {\n" -"// \"url\": \"https://example.com/app-1.4.0-darwin-aarch64.bin" -"\",\n" +"// \"url\": \"https://example.com/app-1.4.0-darwin-aarch64." +"bin\",\n" "// \"sha256\": \"0123456789abcdef...\",\n" "// \"signature\": \"base64sig==\",\n" "// \"size\": 12345678\n" @@ -52927,8 +53177,8 @@ msgstr "" "// \"notes\": \"Bug fixes and performance improvements\",\n" "// \"platforms\": {\n" "// \"darwin-aarch64\": {\n" -"// \"url\": \"https://example.com/app-1.4.0-darwin-aarch64.bin" -"\",\n" +"// \"url\": \"https://example.com/app-1.4.0-darwin-aarch64." +"bin\",\n" "// \"sha256\": \"0123456789abcdef...\",\n" "// \"signature\": \"base64sig==\",\n" "// \"size\": 12345678\n" @@ -53732,8 +53982,8 @@ msgid "" msgstr "" "**Privilegierte Installation** für systemweite Speicherorte (`/" "Applications`, `Program Files`). Der aktuelle Install-Pfad behandelt nur " -"benutzerschreibbare Speicherorte (`~/Applications`, `~/.local/bin`, `" -"%LOCALAPPDATA%`). UAC / `SMJobBless` ist eine separate Angelegenheit." +"benutzerschreibbare Speicherorte (`~/Applications`, `~/.local/bin`, " +"`%LOCALAPPDATA%`). UAC / `SMJobBless` ist eine separate Angelegenheit." #: src/updater/overview.md:427 msgid "" @@ -53882,11 +54132,11 @@ msgstr "`getDeviceIdiom()`" #: src/system/overview.md:25 msgid "" -"`\"phone\"`, `\"pad\"`, `\"mac\"`, `\"tv\"`, `\"watch\"`, `\"vision\"`, `" -"\"desktop\"`" +"`\"phone\"`, `\"pad\"`, `\"mac\"`, `\"tv\"`, `\"watch\"`, `\"vision\"`, " +"`\"desktop\"`" msgstr "" -"`\"phone\"`, `\"pad\"`, `\"mac\"`, `\"tv\"`, `\"watch\"`, `\"vision\"`, `" -"\"desktop\"`" +"`\"phone\"`, `\"pad\"`, `\"mac\"`, `\"tv\"`, `\"watch\"`, `\"vision\"`, " +"`\"desktop\"`" #: src/system/overview.md:26 msgid "`getDeviceModel()`" @@ -55783,8 +56033,8 @@ msgstr "" msgid "" "Stub platforms link cleanly against the same FFI surface — code that imports " "`perry/media` compiles on every target. `createPlayer` returns `0` on a stub " -"backend so `if (player === 0)` is the canonical \"feature not available here" -"\" check." +"backend so `if (player === 0)` is the canonical \"feature not available " +"here\" check." msgstr "" "Stub-Plattformen linken sauber gegen dieselbe FFI-Oberfläche — Code, der " "`perry/media` importiert, kompiliert auf jedem Target. `createPlayer` gibt " @@ -56093,8 +56343,8 @@ msgid "" " return `${serverUrl}/rest/stream?${params.toString()}`;\n" "}\n" "\n" -"const player = createPlayer(streamUrl(\"https://music.example.com\", \"alice" -"\", \"secret\", \"12345\"));\n" +"const player = createPlayer(streamUrl(\"https://music.example.com\", " +"\"alice\", \"secret\", \"12345\"));\n" "setNowPlaying(player, \"All These Things That I've Done\", \"The Killers\", " "\"Hot Fuss\",\n" " \"https://music.example.com/rest/getCoverArt?" @@ -56120,8 +56370,8 @@ msgstr "" " return `${serverUrl}/rest/stream?${params.toString()}`;\n" "}\n" "\n" -"const player = createPlayer(streamUrl(\"https://music.example.com\", \"alice" -"\", \"secret\", \"12345\"));\n" +"const player = createPlayer(streamUrl(\"https://music.example.com\", " +"\"alice\", \"secret\", \"12345\"));\n" "setNowPlaying(player, \"All These Things That I've Done\", \"The Killers\", " "\"Hot Fuss\",\n" " \"https://music.example.com/rest/getCoverArt?" @@ -56228,8 +56478,8 @@ msgid "" "`\"no-provider-available\"`, `\"unsupported-platform\"`." msgstr "" "`onError(message)` — feuert bei Berechtigungs-Verweigerung, Timeout oder " -"Plattform-Unverfügbarkeit. Häufige Nachrichten: `\"permission-denied\"`, `" -"\"no-location\"`, `\"no-provider-available\"`, `\"unsupported-platform\"`." +"Plattform-Unverfügbarkeit. Häufige Nachrichten: `\"permission-denied\"`, " +"`\"no-location\"`, `\"no-provider-available\"`, `\"unsupported-platform\"`." #: src/system/geolocation.md:42 msgid "`geolocationWatch(callback): number`" @@ -56263,8 +56513,8 @@ msgstr "`geolocationRequestPermission(callback)`" #: src/system/geolocation.md:54 msgid "" "Request location permission. Calls `callback(status)` where status is one of " -"`\"granted\"`, `\"denied\"`, `\"restricted\"`, or `\"unsupported-platform" -"\"`. Safe to call repeatedly — already-granted permissions return " +"`\"granted\"`, `\"denied\"`, `\"restricted\"`, or `\"unsupported-" +"platform\"`. Safe to call repeatedly — already-granted permissions return " "immediately." msgstr "" "Fordert Standort-Berechtigung an. Ruft `callback(status)` auf, wobei status " @@ -56313,11 +56563,11 @@ msgstr "**tvOS / watchOS / visionOS / GTK4 / Windows / Web**" #: src/system/geolocation.md:66 msgid "" -"No-op stub — `geolocationGetCurrent` invokes `onError` immediately with `" -"\"unsupported-platform\"`." +"No-op stub — `geolocationGetCurrent` invokes `onError` immediately with " +"`\"unsupported-platform\"`." msgstr "" -"No-op-Stub — `geolocationGetCurrent` ruft `onError` sofort mit `" -"\"unsupported-platform\"` auf." +"No-op-Stub — `geolocationGetCurrent` ruft `onError` sofort mit " +"`\"unsupported-platform\"` auf." #: src/system/geolocation.md:68 msgid "Promise wrapper" @@ -57030,12 +57280,12 @@ msgid "" "identifier (`\"iPhone15,2\"`, `\"MacBookPro18,3\"`, etc. — on macOS this is " "sysctl `hw.model`)." msgstr "" -"`getDeviceIdiom()` gibt den breiten Formfaktor als String zurück: `\"phone" -"\"` oder `\"pad\"` auf iOS (und `\"phone\"` auf Android), `\"mac\"` auf " -"macOS, `\"tv\"` auf tvOS, `\"watch\"` auf watchOS, `\"vision\"` auf visionOS " -"und `\"desktop\"` auf Windows und Linux. `getDeviceModel()` gibt die " -"plattformspezifische Modellkennung (`\"iPhone15,2\"`, `\"MacBookPro18,3\"`, " -"etc.) zurück — auf macOS ist dies sysctl `hw.model`." +"`getDeviceIdiom()` gibt den breiten Formfaktor als String zurück: " +"`\"phone\"` oder `\"pad\"` auf iOS (und `\"phone\"` auf Android), `\"mac\"` " +"auf macOS, `\"tv\"` auf tvOS, `\"watch\"` auf watchOS, `\"vision\"` auf " +"visionOS und `\"desktop\"` auf Windows und Linux. `getDeviceModel()` gibt " +"die plattformspezifische Modellkennung (`\"iPhone15,2\"`, " +"`\"MacBookPro18,3\"`, etc.) zurück — auf macOS ist dies sysctl `hw.model`." #: src/system/other.md:74 msgid "[UI Overview](../ui/overview.md) — Building UIs" @@ -57493,8 +57743,8 @@ msgid "" "Widget({\n" " kind: \"TemplateLiteralWidget\",\n" " displayName: \"Template Literal\",\n" -" description: \"Template literals compile to Swift string interpolation" -"\",\n" +" description: \"Template literals compile to Swift string " +"interpolation\",\n" " entryFields: {\n" " name: \"string\",\n" " score: \"number\",\n" @@ -57510,8 +57760,8 @@ msgstr "" "Widget({\n" " kind: \"TemplateLiteralWidget\",\n" " displayName: \"Template Literal\",\n" -" description: \"Template literals compile to Swift string interpolation" -"\",\n" +" description: \"Template literals compile to Swift string " +"interpolation\",\n" " entryFields: {\n" " name: \"string\",\n" " score: \"number\",\n" @@ -57543,8 +57793,8 @@ msgid "" " displayName: \"City Weather\",\n" " description: \"Weather for a chosen city\",\n" " config: {\n" -" city: { type: \"string\", displayName: \"City\", default: \"New York" -"\" },\n" +" city: { type: \"string\", displayName: \"City\", default: \"New " +"York\" },\n" " units: {\n" " type: \"enum\",\n" " displayName: \"Units\",\n" @@ -57563,8 +57813,8 @@ msgstr "" " displayName: \"City Weather\",\n" " description: \"Weather for a chosen city\",\n" " config: {\n" -" city: { type: \"string\", displayName: \"City\", default: \"New York" -"\" },\n" +" city: { type: \"string\", displayName: \"City\", default: \"New " +"York\" },\n" " units: {\n" " type: \"enum\",\n" " displayName: \"Units\",\n" @@ -57597,8 +57847,8 @@ msgid "" " displayName: \"Stock Price\",\n" " description: \"Shows current stock price\",\n" " config: {\n" -" symbol: { type: \"string\", displayName: \"Symbol\", default: \"AAPL" -"\" },\n" +" symbol: { type: \"string\", displayName: \"Symbol\", default: " +"\"AAPL\" },\n" " },\n" " entryFields: { price: \"number\", change: \"string\" },\n" " provider: async (config) => {\n" @@ -57624,8 +57874,8 @@ msgstr "" " displayName: \"Stock Price\",\n" " description: \"Shows current stock price\",\n" " config: {\n" -" symbol: { type: \"string\", displayName: \"Symbol\", default: \"AAPL" -"\" },\n" +" symbol: { type: \"string\", displayName: \"Symbol\", default: " +"\"AAPL\" },\n" " },\n" " entryFields: { price: \"number\", change: \"string\" },\n" " provider: async (config) => {\n" @@ -57653,11 +57903,12 @@ msgid "" "issues/195). The verified extract uses the supported inline-options form " "`Text(\"...\", { font: \"title\" })`." msgstr "" -"Hinweis: Die Modifikatoren im Kettenstil (`.font(\"title\").color(\"green" -"\")`) werden mit einer Compil-Time-Diagnose abgelehnt, sodass Styling nicht " -"still verschwinden kann; dieses Verhalten schloss [\\#195](https://github." -"com/PerryTS/perry/issues/195). Der verifizierte Extrakt verwendet die " -"unterstützten Inline-Optionen von `Text(\"...\", { font: \"title\" })`." +"Hinweis: Die Modifikatoren im Kettenstil (`.font(\"title\")." +"color(\"green\")`) werden mit einer Compil-Time-Diagnose abgelehnt, sodass " +"Styling nicht still verschwinden kann; dieses Verhalten schloss [\\#195]" +"(https://github.com/PerryTS/perry/issues/195). Der verifizierte Extrakt " +"verwendet die unterstützten Inline-Optionen von `Text(\"...\", { font: " +"\"title\" })`." #: src/widgets/creating-widgets.md:192 msgid "Placeholder Data" @@ -57733,13 +57984,13 @@ msgstr "" #: src/widgets/creating-widgets.md:222 msgid "" -"Supported families: `\"systemSmall\"`, `\"systemMedium\"`, `\"systemLarge" -"\"`, `\"accessoryCircular\"`, `\"accessoryRectangular\"`, `\"accessoryInline" -"\"`." +"Supported families: `\"systemSmall\"`, `\"systemMedium\"`, " +"`\"systemLarge\"`, `\"accessoryCircular\"`, `\"accessoryRectangular\"`, " +"`\"accessoryInline\"`." msgstr "" -"Unterstützte Familien: `\"systemSmall\"`, `\"systemMedium\"`, `\"systemLarge" -"\"`, `\"accessoryCircular\"`, `\"accessoryRectangular\"`, `\"accessoryInline" -"\"`." +"Unterstützte Familien: `\"systemSmall\"`, `\"systemMedium\"`, " +"`\"systemLarge\"`, `\"accessoryCircular\"`, `\"accessoryRectangular\"`, " +"`\"accessoryInline\"`." #: src/widgets/creating-widgets.md:224 msgid "App Group" @@ -57853,8 +58104,8 @@ msgstr "" "id` von einem `// widget-bundle-id:`-Banner ([\\#194](https://github.com/" "PerryTS/perry/issues/194)) übergeben; End-to-End-Targets erfordern auch ihre " "Plattform SDK. Die Syntax des Modifiers ist bewusst auf **Inline-Option-" -"Objekt-Argumente** — e.g. `Text(\"hi\", { font: \"title\", color: \"red" -"\" })` und `VStack([...], { padding: 16 })`. Methoden-Stil Ketten wie " +"Objekt-Argumente** — e.g. `Text(\"hi\", { font: \"title\", color: " +"\"red\" })` und `VStack([...], { padding: 16 })`. Methoden-Stil Ketten wie " "`Text(\"hi\").font(\"title\")` werden mit einer umsetzbaren Compil-Time-" "Diagnose abgelehnt, anstatt stillschweigend ignoriert zu werden; dieses " "Verhalten schloss [\\#195](https://github.com/PerryTS/perry/issues/195). Die " @@ -58235,8 +58486,8 @@ msgid "" " VStack([\n" " Text(`${entry.steps}`, { font: \"title\", fontWeight: " "\"bold\" }),\n" -" Text(\"steps\", { font: \"caption\", color: \"gray" -"\" }),\n" +" Text(\"steps\", { font: \"caption\", color: " +"\"gray\" }),\n" " ]),\n" " Spacer(),\n" " VStack([\n" @@ -58279,8 +58530,8 @@ msgstr "" " VStack([\n" " Text(`${entry.steps}`, { font: \"title\", fontWeight: " "\"bold\" }),\n" -" Text(\"steps\", { font: \"caption\", color: \"gray" -"\" }),\n" +" Text(\"steps\", { font: \"caption\", color: " +"\"gray\" }),\n" " ]),\n" " Spacer(),\n" " VStack([\n" @@ -58390,8 +58641,8 @@ msgid "" "\n" " provider: async (config: { sortBy: string; dateRange: string }) => {\n" " const res = await fetch(\n" -" `https://api.example.com/stats?sort=${config.sortBy}&range=" -"${config.dateRange}`,\n" +" `https://api.example.com/stats?sort=${config.sortBy}" +"&range=${config.dateRange}`,\n" " )\n" " const data = await res.json()\n" " return {\n" @@ -58402,8 +58653,8 @@ msgid "" "\n" " render: (entry) =>\n" " VStack([\n" -" Text(`${entry.total}`, { font: \"title\", fontWeight: \"bold" -"\" }),\n" +" Text(`${entry.total}`, { font: \"title\", fontWeight: " +"\"bold\" }),\n" " Text(entry.label, { font: \"caption\", color: \"secondary\" }),\n" " ]),\n" "})\n" @@ -58439,8 +58690,8 @@ msgstr "" "\n" " provider: async (config: { sortBy: string; dateRange: string }) => {\n" " const res = await fetch(\n" -" `https://api.example.com/stats?sort=${config.sortBy}&range=" -"${config.dateRange}`,\n" +" `https://api.example.com/stats?sort=${config.sortBy}" +"&range=${config.dateRange}`,\n" " )\n" " const data = await res.json()\n" " return {\n" @@ -58451,8 +58702,8 @@ msgstr "" "\n" " render: (entry) =>\n" " VStack([\n" -" Text(`${entry.total}`, { font: \"title\", fontWeight: \"bold" -"\" }),\n" +" Text(`${entry.total}`, { font: \"title\", fontWeight: " +"\"bold\" }),\n" " Text(entry.label, { font: \"caption\", color: \"secondary\" }),\n" " ]),\n" "})\n" @@ -58518,8 +58769,8 @@ msgstr "" msgid "" "```text\n" "provider: async (config: { sortBy: string; dateRange: string }) => {\n" -" // config.sortBy === \"clicks\" | \"impressions\" | \"ctr\" | \"position" -"\"\n" +" // config.sortBy === \"clicks\" | \"impressions\" | \"ctr\" | " +"\"position\"\n" " // config.dateRange === \"7d\" | \"28d\" | \"90d\"\n" " const url = `https://api.example.com/data?sort=${config.sortBy}`;\n" " const res = await fetch(url);\n" @@ -58530,8 +58781,8 @@ msgid "" msgstr "" "```text\n" "provider: async (config: { sortBy: string; dateRange: string }) => {\n" -" // config.sortBy === \"clicks\" | \"impressions\" | \"ctr\" | \"position" -"\"\n" +" // config.sortBy === \"clicks\" | \"impressions\" | \"ctr\" | " +"\"position\"\n" " // config.dateRange === \"7d\" | \"28d\" | \"90d\"\n" " const url = `https://api.example.com/data?sort=${config.sortBy}`;\n" " const res = await fetch(url);\n" @@ -58623,8 +58874,8 @@ msgid "" "Users configure the widget by long-pressing and selecting \"Edit Widget\", " "which presents the system-generated AppIntent UI." msgstr "" -"Nutzer konfigurieren das Widget per Long-Press und Auswahl von \"Edit Widget" -"\", was die systemgenerierte AppIntent-UI präsentiert." +"Nutzer konfigurieren das Widget per Long-Press und Auswahl von \"Edit " +"Widget\", was die systemgenerierte AppIntent-UI präsentiert." #: src/widgets/configuration.md:118 msgid "Android / Wear OS (Configuration Activity)" @@ -58811,8 +59062,8 @@ msgid "" " },\n" "\n" " provider: async () => {\n" -" const res = await fetch(\"https://api.weather.example.com/current" -"\")\n" +" const res = await fetch(\"https://api.weather.example.com/" +"current\")\n" " const data = await res.json()\n" " return {\n" " entries: [\n" @@ -58843,8 +59094,8 @@ msgstr "" " },\n" "\n" " provider: async () => {\n" -" const res = await fetch(\"https://api.weather.example.com/current" -"\")\n" +" const res = await fetch(\"https://api.weather.example.com/" +"current\")\n" " const data = await res.json()\n" " return {\n" " entries: [\n" @@ -59033,14 +59284,14 @@ msgstr "`{ after: { minutes: N } }`" #: src/widgets/data-fetching.md:136 msgid "" "Re-fetch after N minutes. Compiles to `.after(Date()." -"addingTimeInterval(N*60))` on iOS/watchOS, `android:updatePeriodMillis=" -"\"N*60000\"` on Android, and `setFreshnessIntervalMillis(N*60000)` on Wear " -"OS." +"addingTimeInterval(N*60))` on iOS/watchOS, `android:" +"updatePeriodMillis=\"N*60000\"` on Android, and " +"`setFreshnessIntervalMillis(N*60000)` on Wear OS." msgstr "" "Nach N-Minuten wieder zurückholen. Kompiliert mit `.after(Date()." -"addingTimeInterval(N*60))` auf iOS/watchOS, `android:updatePeriodMillis=" -"\"N*60000\"` auf Android und `setFreshnessIntervalMillis(N*60000)` auf Wear " -"OS." +"addingTimeInterval(N*60))` auf iOS/watchOS, `android:" +"updatePeriodMillis=\"N*60000\"` auf Android und " +"`setFreshnessIntervalMillis(N*60000)` auf Wear OS." #: src/widgets/data-fetching.md:137 msgid "_(omitted)_" @@ -59436,6 +59687,15 @@ msgid "Text fallback" msgstr "Text-Fallback" #: src/widgets/platforms.md:34 src/widgets/platforms.md:40 +#: src/internals/weakmap-owned-index-design.md:62 +#: src/internals/weakmap-owned-index-design.md:63 +#: src/internals/weakmap-owned-index-design.md:64 +#: src/internals/weakmap-owned-index-design.md:65 +#: src/internals/weakmap-owned-index-design.md:66 +#: src/internals/weakmap-owned-index-design.md:67 +#: src/internals/weakmap-owned-index-design.md:68 +#: src/internals/weakmap-owned-index-design.md:69 +#: src/internals/weakmap-owned-index-design.md:70 msgid "N/A" msgstr "Nicht zutreffend" @@ -61147,11 +61407,11 @@ msgstr "" #: src/plugins/native-extensions.md:95 msgid "" -"Array of LLVM types: `\"i64\"` for pointers/strings, `\"f64\"` for numbers, `" -"\"i32\"` for integers" +"Array of LLVM types: `\"i64\"` for pointers/strings, `\"f64\"` for numbers, " +"`\"i32\"` for integers" msgstr "" -"Array von LLVM-Typen: `\"i64\"` für Zeiger/Strings, `\"f64\"` für Zahlen, `" -"\"i32\"` für Integer" +"Array von LLVM-Typen: `\"i64\"` für Zeiger/Strings, `\"f64\"` für Zahlen, " +"`\"i32\"` für Integer" #: src/plugins/native-extensions.md:96 msgid "Return type — typically `\"f64\"` (NaN-boxed value or promise handle)" @@ -62556,11 +62816,35 @@ msgstr "" "Es gibt absichtlich keinen dritten Weg. Keine Schwelle zu stoßen, keine `--" "allow-dark`, keine Umgebungsvariable." -#: src/testing/test-registration.md:115 src/testing/http2-conformance.md:442 +#: src/testing/test-registration.md:115 +msgid "GC witness execution metadata" +msgstr "" + +#: src/testing/test-registration.md:117 +msgid "" +"Registration is not proof that a witness ran under its required conditions. " +"Use `// parity-env: KEY=VALUE ...` for explicit stress settings. The matrix " +"validates its GC-only settings and applies them at compile time and runtime " +"only in `loop_polls`; shipped/default/OFF controls remain unchanged. `// " +"parity-node-argv: --expose-gc` reaches the Node oracle in both harnesses." +msgstr "" + +#: src/testing/test-registration.md:123 +msgid "" +"`// parity-rlimit-as-mb: 2048` requires a 2048 MiB **process address-space** " +"ceiling, not an RSS limit or GC pressure target. Both harnesses validate " +"this positive integer and apply it only to the native witness run (only " +"`loop_polls` in the matrix), never to Node or compilation. Setup/readback " +"failure refuses execution with exit 125. Hosts that cannot enforce " +"`RLIMIT_AS` need native acceptance on a supported host; an uncapped run is " +"not a substitute." +msgstr "" + +#: src/testing/test-registration.md:130 src/testing/http2-conformance.md:442 msgid "Not covered" msgstr "Nicht erfasst" -#: src/testing/test-registration.md:117 +#: src/testing/test-registration.md:132 msgid "" "`tests/*.sh`, `tests/*.py` and `tests/*.ts` have no registry to diff against " "— 143 of the 171 files there are referenced by nothing in the tree. That is " @@ -62803,8 +63087,8 @@ msgid "Menu item" msgstr "Menüeintrag" #: src/testing/geisterhand.md:92 src/cli/perry-toml.md:426 -#: src/internals/node-api-host.md:588 src/internals/node-api-host.md:589 -#: src/internals/node-api-host.md:590 src/internals/node-api-host.md:591 +#: src/internals/node-api-host.md:628 src/internals/node-api-host.md:629 +#: src/internals/node-api-host.md:630 src/internals/node-api-host.md:631 msgid "6" msgstr "6" @@ -62816,8 +63100,8 @@ msgstr "Tastenkürzel" msgid "Data table" msgstr "Datentabelle" -#: src/testing/geisterhand.md:94 src/internals/node-api-host.md:593 -#: src/internals/node-api-host.md:594 src/internals/node-api-host.md:621 +#: src/testing/geisterhand.md:94 src/internals/node-api-host.md:633 +#: src/internals/node-api-host.md:634 src/internals/node-api-host.md:661 msgid "8" msgstr "8" @@ -63080,8 +63364,8 @@ msgid "" msgstr "" "Findet einen registrierten Menüeintrag, dessen Shortcut passt, und löst " "dessen Callback aus. Shortcut-Strings sind case-insensitive und matchen den " -"Key-String, der an `menuAddItem` übergeben wurde (z. B. `\"s\"` für Cmd+S, `" -"\"S\"` für Cmd+Umschalt+S, `\"n\"` für Cmd+N)." +"Key-String, der an `menuAddItem` übergeben wurde (z. B. `\"s\"` für Cmd+S, " +"`\"S\"` für Cmd+Umschalt+S, `\"n\"` für Cmd+N)." #: src/testing/geisterhand.md:221 msgid "" @@ -63909,8 +64193,8 @@ msgstr "\"Inkremente\"" #: src/testing/geisterhand.md:657 #, fuzzy msgid "" -"# {\"handle\":4,\"widget_type\":0,\"callback_kind\":0,\"label\":\"Reset" -"\"},\n" +"# {\"handle\":4,\"widget_type\":0,\"callback_kind\":0,\"label\":" +"\"Reset\"},\n" msgstr "" "# ‚Begriff‘:4,‚widget_type‘:0,‚callback_kind‘:0,‚Beschriftung‘:" "‚Zurücksetzen‘}," @@ -63998,8 +64282,8 @@ msgid "" "**Widget Registration**: As UI widgets are created (Button, TextField, " "Slider, etc.), each one calls `perry_geisterhand_register(handle, " "widget_type, callback_kind, closure_f64, label)` to register its callback in " -"the global registry. This is gated behind `#[cfg(feature = \"geisterhand" -"\")]` so normal builds have zero overhead." +"the global registry. This is gated behind `#[cfg(feature = " +"\"geisterhand\")]` so normal builds have zero overhead." msgstr "" "**Widget-Registrierung**: Während UI-Widgets erstellt werden (Button, " "TextField, Slider usw.), ruft jedes `perry_geisterhand_register(handle, " @@ -64216,8 +64500,8 @@ msgid "" "All geisterhand code is behind `#[cfg(feature = \"geisterhand\")]` feature " "gates:" msgstr "" -"Der gesamte Geisterhand-Code steht hinter `#[cfg(feature = \"geisterhand" -"\")]`-Feature-Gates:" +"Der gesamte Geisterhand-Code steht hinter `#[cfg(feature = " +"\"geisterhand\")]`-Feature-Gates:" #: src/testing/geisterhand.md:790 msgid "" @@ -64613,9 +64897,10 @@ msgstr "" "Vermögenswert zur Pin-Zeit überprüft wird." #: src/testing/node-compat-matrix.md:77 +#, fuzzy msgid "" -"Currently pinned: **Node 26.5.1** (the latest CURRENT stable). This is a " -"separate concern from `.node-version` (26.5.0), which pins the gap-suite / " +"Currently pinned: **Node 26.12.1** (the latest CURRENT stable). This is a " +"separate concern from `.node-version` (26.12.1), which pins the gap-suite / " "node-suite oracle; the compat matrix carries its own \"latest stable\" pin." msgstr "" "Derzeit festgeheftet: **Knoten 26.5.1** (der neueste LAUFENDE Stall). Dies " @@ -65452,8 +65737,8 @@ msgstr "" #: src/testing/http2-conformance.md:232 msgid "" -"`RST_STREAM stream=5 code=7`, `RST_STREAM stream=7 code=7` — REFUSED" -"\\_STREAM, session survives" +"`RST_STREAM stream=5 code=7`, `RST_STREAM stream=7 code=7` — " +"REFUSED\\_STREAM, session survives" msgstr "" #: src/testing/http2-conformance.md:233 @@ -65462,8 +65747,8 @@ msgstr "" #: src/testing/http2-conformance.md:233 msgid "" -"`RST_STREAM stream=1 code=2`, `GOAWAY stream=0 last=3 code=2` — INTERNAL" -"\\_ERROR, connection torn down, `ERR_HTTP2_ERROR errno=-505`" +"`RST_STREAM stream=1 code=2`, `GOAWAY stream=0 last=3 code=2` — " +"INTERNAL\\_ERROR, connection torn down, `ERR_HTTP2_ERROR errno=-505`" msgstr "" #: src/testing/http2-conformance.md:235 @@ -65761,8 +66046,8 @@ msgstr "" #: src/testing/http2-conformance.md:325 msgid "" -"trailers: event order is exactly `[\"response\",\"data\",\"trailers\",\"end" -"\"]`;" +"trailers: event order is exactly `[\"response\",\"data\",\"trailers\"," +"\"end\"]`;" msgstr "" #: src/testing/http2-conformance.md:326 @@ -66091,7 +66376,7 @@ msgstr "" "ist `needs: plan` und ist auf `fromJSON(needs.plan.outputs.plan).jobs." "` gegated." -#: src/testing/ci-tiers.md:13 src/testing/ci-tiers.md:124 +#: src/testing/ci-tiers.md:13 src/testing/ci-tiers.md:187 msgid "tier" msgstr "tier" @@ -66132,9 +66417,11 @@ msgid "every `push` to `main` (coalesced) **+ a two-hourly cron backstop**" msgstr "alle `push` bis `main` (gekohlt) **+ ein zweistündiger Cron Backstop**" #: src/testing/ci-tiers.md:16 +#, fuzzy msgid "" -"post-merge truth for `main`: the PR tier unscoped plus the medium-weight " -"jobs that do not fit the PR budget" +"post-merge truth for `main`: unscoped unit/package tests plus medium-weight " +"jobs; Perry's large integration inventory stays in the nightly/release full " +"tier" msgstr "" "Post-Merge Wahrheit für `main`: die PR-Stufe unscoped plus die " "mittelschweren Jobs, die nicht in das PR-Budget passen" @@ -66156,8 +66443,9 @@ msgstr "" "`run-extended-tests`" #: src/testing/ci-tiers.md:17 +#, fuzzy msgid "" -"everything, incl. parity, compile-smoke, doc-tests, package smokes, the 8-" +"everything, incl. parity, compile-smoke, doc-tests, package smokes, the 24-" "shard auto-optimize gap suite" msgstr "" "alles, inkl. Parität, Compil-Smoke, Doc-Tests, Paketrauche, die 8-harte Auto-" @@ -66180,143 +66468,183 @@ msgstr "" "ob diese Kopie aktuell ist." #: src/testing/ci-tiers.md:24 +msgid "" +"The PR gap tier uses twelve fast-mode shards after a six-way shard exhausted " +"the 110-minute job bound. The full gap tier uses twenty-four shards with " +"auto-optimize enabled. Both retain every fixture and the existing snapshot " +"acceptance gate; CI timings must establish the new margin. Compile-smoke " +"partitions the complete top-level `test-files/*.ts` inventory into four " +"stable round-robin shards, with at most two smoke shards running " +"concurrently. Each file is assigned once before the existing platform " +"exclusions are applied. Every shard retains the default compiler invocation " +"and failure markers; `full-suite-gate` requires the matrix job's aggregate " +"result. These splits address twelve-way gap jobs reaching their 110-minute " +"bound and the unsharded smoke job reaching the hosted six-hour limit. Actual " +"CI durations must still establish the new margin." +msgstr "" + +#: src/testing/ci-tiers.md:37 msgid "job" msgstr "job" -#: src/testing/ci-tiers.md:24 +#: src/testing/ci-tiers.md:37 msgid "pr" msgstr "pr" -#: src/testing/ci-tiers.md:24 src/testing/ci-tiers.md:128 +#: src/testing/ci-tiers.md:37 src/testing/ci-tiers.md:191 msgid "sweep" msgstr "sweep" -#: src/testing/ci-tiers.md:24 src/testing/ci-tiers.md:129 +#: src/testing/ci-tiers.md:37 src/testing/ci-tiers.md:192 msgid "full" msgstr "full" -#: src/testing/ci-tiers.md:26 +#: src/testing/ci-tiers.md:39 msgid "`lint`" msgstr "`lint`" -#: src/testing/ci-tiers.md:26 +#: src/testing/ci-tiers.md:39 msgid "always" msgstr "always" -#: src/testing/ci-tiers.md:27 src/cli/commands.md:11 +#: src/testing/ci-tiers.md:40 src/cli/commands.md:11 msgid "`check`" msgstr "`check`" -#: src/testing/ci-tiers.md:28 +#: src/testing/ci-tiers.md:41 msgid "`warnings`" msgstr "`warnings`" -#: src/testing/ci-tiers.md:29 +#: src/testing/ci-tiers.md:42 msgid "`cargo-test`" msgstr "`cargo-test`" -#: src/testing/ci-tiers.md:30 +#: src/testing/ci-tiers.md:43 #, fuzzy msgid "`cargo-test-perry`" msgstr "`cargo-test`" -#: src/testing/ci-tiers.md:31 +#: src/testing/ci-tiers.md:44 msgid "`gap-suite`" msgstr "`gap-suite`" -#: src/testing/ci-tiers.md:31 -msgid "6x fast" +#: src/testing/ci-tiers.md:44 +#, fuzzy +msgid "12x fast" msgstr "6x schnell" -#: src/testing/ci-tiers.md:31 +#: src/testing/ci-tiers.md:44 msgid "3x fast" msgstr "3x schnell" -#: src/testing/ci-tiers.md:31 -msgid "8x full" +#: src/testing/ci-tiers.md:44 +#, fuzzy +msgid "24x full" msgstr "8x vollständig" -#: src/testing/ci-tiers.md:32 +#: src/testing/ci-tiers.md:45 +#, fuzzy +msgid "`wasi-execution`" +msgstr "`flexDirection`" + +#: src/testing/ci-tiers.md:46 +msgid "`gc-call-effects`" +msgstr "" + +#: src/testing/ci-tiers.md:47 msgid "`gc-stress`" msgstr "`gc-stress`" -#: src/testing/ci-tiers.md:32 +#: src/testing/ci-tiers.md:47 msgid "1x pr" msgstr "" -#: src/testing/ci-tiers.md:32 +#: src/testing/ci-tiers.md:47 msgid "4x all" msgstr "" -#: src/testing/ci-tiers.md:33 +#: src/testing/ci-tiers.md:48 msgid "`e2e-scoped`" msgstr "`e2e-scoped`" -#: src/testing/ci-tiers.md:34 +#: src/testing/ci-tiers.md:49 msgid "`security-audit`" msgstr "`security-audit`" -#: src/testing/ci-tiers.md:34 +#: src/testing/ci-tiers.md:49 msgid "deps only" msgstr "nur Deps" -#: src/testing/ci-tiers.md:35 +#: src/testing/ci-tiers.md:50 msgid "`windows-build`" msgstr "`windows-build`" -#: src/testing/ci-tiers.md:36 +#: src/testing/ci-tiers.md:51 msgid "`windows-arm64-build`" msgstr "`windows-arm64-build`" -#: src/testing/ci-tiers.md:37 +#: src/testing/ci-tiers.md:52 msgid "`compiler-output-regression`" msgstr "`compiler-output-regression`" -#: src/testing/ci-tiers.md:38 +#: src/testing/ci-tiers.md:53 msgid "`repsel-census`" msgstr "`repsel-census`" -#: src/testing/ci-tiers.md:39 +#: src/testing/ci-tiers.md:54 msgid "`harmonyos-smoke`" msgstr "`harmonyos-smoke`" -#: src/testing/ci-tiers.md:40 +#: src/testing/ci-tiers.md:55 msgid "`binary-size`" msgstr "`binary-size`" -#: src/testing/ci-tiers.md:41 +#: src/testing/ci-tiers.md:56 msgid "`parity`" msgstr "`parity`" -#: src/testing/ci-tiers.md:42 +#: src/testing/ci-tiers.md:57 msgid "`compile-smoke`" msgstr "`compile-smoke`" -#: src/testing/ci-tiers.md:43 +#: src/testing/ci-tiers.md:58 msgid "`native-abi-evidence-packet`" msgstr "`native-abi-evidence-packet`" -#: src/testing/ci-tiers.md:44 +#: src/testing/ci-tiers.md:59 msgid "`drizzle-mysql-smoke`" msgstr "`drizzle-mysql-smoke`" -#: src/testing/ci-tiers.md:45 +#: src/testing/ci-tiers.md:60 msgid "`ink-link-smoke`" msgstr "`ink-link-smoke`" -#: src/testing/ci-tiers.md:46 +#: src/testing/ci-tiers.md:61 msgid "`effect-basic-smoke`" msgstr "`effect-basic-smoke`" -#: src/testing/ci-tiers.md:47 +#: src/testing/ci-tiers.md:62 msgid "`doc-tests`" msgstr "`doc-tests`" -#: src/testing/ci-tiers.md:49 +#: src/testing/ci-tiers.md:64 +msgid "" +"`windows-build` also runs `python scripts/run_windows_runtime_regressions." +"py` after building the compiler and both static archives. It compares the " +"Windows path/file-URL, realpath, shell quoting, child `argv0`, platform " +"metadata, and named-pipe shutdown fixtures with the exact Node oracle in `." +"node-version`. The pipe fixtures cover duplex replies and queued writes as " +"well as EOF. A native unread-peer probe also checks that destroying a socket " +"releases the drain's duplicated handle while the JavaScript process remains " +"alive. These fixtures skip their Windows bodies on other hosts; use the full " +"tier (`run-extended-tests`) when reviewing changes to this behavior." +msgstr "" + +#: src/testing/ci-tiers.md:74 msgid "Within the **pr** tier the changed-file list narrows the plan further:" msgstr "In der **pr** Ebene die geänderte Dateiliste verengt den Plan weiter:" -#: src/testing/ci-tiers.md:51 +#: src/testing/ci-tiers.md:76 msgid "" "**docs-only** (only `docs/`, `*.md`, `benchmarks/`, `npm/`, `packaging/`, `." "claude/`, … — see `NON_CORE_GLOBS` in `ci_plan.py`) → only `lint` runs." @@ -66324,7 +66652,7 @@ msgstr "" "**Nur für** (nur `docs/`, `*.md`, `benchmarks/`, `npm/`, `packaging/`, `." "claude/`, ... — siehe `NON_CORE_GLOBS` in `ci_plan.py`) → nur `lint` läuft." -#: src/testing/ci-tiers.md:53 +#: src/testing/ci-tiers.md:78 msgid "" "**core** (anything that can change the compiler, the runtime, or a test " "outcome) → the whole PR tier." @@ -66332,15 +66660,137 @@ msgstr "" "**Kern** (alles, was den Compiler, die Laufzeit oder ein Testergebnis ändern " "kann) → die gesamte PR-Ebene." -#: src/testing/ci-tiers.md:55 +#: src/testing/ci-tiers.md:80 +#, fuzzy msgid "" "**deps** (a lockfile, manifest, `deny.toml`, `package.json`, `.claude/`, " -"`skills/`, …) → additionally the `security-audit` reusable workflow." +"`skills/`, …) → additionally the inlined `security-audit` suite." msgstr "" "**Depens** (ein Lockfile, Manifest, `deny.toml`, `package.json`, `.claude/`, " "`skills/`, ...) → zusätzlich der wiederverwendbare Workflow `security-audit`." -#: src/testing/ci-tiers.md:58 +#: src/testing/ci-tiers.md:83 +msgid "" +"Within `cargo-test`, runtime changes also select `perry-stdlib` unit tests: " +"those tests exercise runtime GC, arenas, closures, promises and the event " +"loop. The `perry-ext-*` crates remain excluded from dependency fan-out " +"unless directly changed. `scripts/ci_test_scope.py` owns this policy, with " +"regression tests in `lint`." +msgstr "" + +#: src/testing/ci-tiers.md:89 +msgid "Rust test lanes and timeboxes" +msgstr "" + +#: src/testing/ci-tiers.md:91 +msgid "" +"Perry's Cargo suites use the same fast / mid / slow idea as socket-" +"wheelhouse, but their wall times are measured in minutes because Rust " +"compilation and the runtime-linked test binaries dominate these suites. The " +"wheelhouse's 10s / 30s / 60s limits apply to its small Vitest lanes and " +"should not be copied onto Cargo." +msgstr "" + +#: src/testing/ci-tiers.md:96 +msgid "Lane" +msgstr "" + +#: src/testing/ci-tiers.md:96 +#, fuzzy +msgid "What runs" +msgstr "Was zu laufen ist" + +#: src/testing/ci-tiers.md:96 +msgid "Expected time" +msgstr "" + +#: src/testing/ci-tiers.md:96 +msgid "Enforced timebox" +msgstr "" + +#: src/testing/ci-tiers.md:98 +msgid "**Fast**" +msgstr "" + +#: src/testing/ci-tiers.md:98 +msgid "" +"PR-scoped crate unit tests (`--lib --bins`), plus the always-on FFI ABI unit " +"check" +msgstr "" + +#: src/testing/ci-tiers.md:98 +msgid "`<10 min` for the scoped Cargo loop" +msgstr "" + +#: src/testing/ci-tiers.md:98 +msgid "" +"`30 min` Cargo job cap; the PR gate targets `≤30 min` wall clock once queued." +msgstr "" + +#: src/testing/ci-tiers.md:99 +#, fuzzy +msgid "**Mid**" +msgstr "**Android**" + +#: src/testing/ci-tiers.md:99 +msgid "" +"Full workspace package tests on main sweeps, including Perry bin/unit tests; " +"Perry integration tests are left to the slow lane" +msgstr "" + +#: src/testing/ci-tiers.md:99 +msgid "" +"`<60 min` target; the prior full Cargo job measured `50–60 min` warm and `90–" +"103 min` cold before removing Perry's serial integration inventory" +msgstr "" + +#: src/testing/ci-tiers.md:99 +msgid "`120 min` Cargo job cap." +msgstr "" + +#: src/testing/ci-tiers.md:100 +msgid "**Slow**" +msgstr "" + +#: src/testing/ci-tiers.md:100 +msgid "" +"Complete Perry integration inventory on nightly, release tags, and opt-in " +"full runs; changed suites run through `e2e-scoped` on PRs" +msgstr "" + +#: src/testing/ci-tiers.md:100 +msgid "Eight round-robin shards" +msgstr "" + +#: src/testing/ci-tiers.md:100 +msgid "" +"`120 min` per shard. The separate scoped e2e job applies `25 min` subprocess " +"bounds where configured." +msgstr "" + +#: src/testing/ci-tiers.md:102 +msgid "" +"The hard caps are failure cutoffs, not performance goals. Although fast and " +"mid share the `cargo-test` job, its timeout comes from the planner tier: 30 " +"minutes for PR scope and 120 minutes for full workspace scope. A manual " +"`workflow_dispatch --tier pr` has full workspace scope without the sharded " +"slow lane, so it retains a 180-minute cap. The main sweep now runs Perry's " +"bin/unit target in the `cargo-test` job while the complete Perry integration " +"inventory stays in the nightly/release shards; this avoids repeating the " +"expensive serial integration loop on every merge without dropping it from " +"the full-suite gate. A run that approaches its cap should trigger a measured " +"build/test optimization, not a larger timeout. Keep `RUST_TEST_THREADS=1` " +"for `perry-runtime`: its tests share process-global GC, arena, timer, and " +"notification state. Keep `CARGO_BUILD_JOBS=1` for the runtime-linked test " +"binaries until runner memory measurements support increasing it. The sccache-" +"backed CI jobs set `CARGO_INCREMENTAL=0`, so sccache can reuse compiler " +"outputs. Mr Boxington-backed release jobs use mbx's default cache policy " +"instead; local `make build-dev` and `make build-prod` leave " +"`MBX_INCREMENTAL` unset so mbx can keep private incremental state for edited " +"crates while sharing unchanged compilations." +msgstr "" + +#: src/testing/ci-tiers.md:121 msgid "" "`e2e-scoped` runs integration suites selected by the diff, but its " "`SUITE_EXCLUSIONS` check is deliberately not scoped: whenever that list is " @@ -66355,7 +66805,7 @@ msgstr "" "HIR, transformieren, oder eine andere Abhängigkeit, ohne Rust-Setup zu docs-" "only PRs hinzuzufügen." -#: src/testing/ci-tiers.md:64 +#: src/testing/ci-tiers.md:127 msgid "" "An empty or failed file listing is treated as **core** and a failed `plan` " "job fails the gate outright — a broken planner must never turn into " @@ -66365,11 +66815,11 @@ msgstr "" "fehlgeschlagener `plan`-Job versagt das Tor direkt – ein kaputter Planer " "darf sich nie in \"alles übersprungen, also grün\" verwandeln." -#: src/testing/ci-tiers.md:68 +#: src/testing/ci-tiers.md:131 msgid "Why it looks like this (measured 2026-08-16)" msgstr "Warum es so aussieht (gemessen 2026-08-16)" -#: src/testing/ci-tiers.md:70 +#: src/testing/ci-tiers.md:133 msgid "" "The organisation runs on GitHub's Free plan: **20 concurrent hosted jobs, 5 " "of them macOS**, for the whole org. Before this shape, every PR push fanned " @@ -66382,13 +66832,13 @@ msgstr "" "sah ~66 PR drückt und ~58 verschmilzt pro Tag. Das ist 1.5–2× " "Gesamtkapazität, also:" -#: src/testing/ci-tiers.md:75 +#: src/testing/ci-tiers.md:138 msgid "job queue waits were 3–7 h (`conformance-smoke` shards: median 4 h);" msgstr "" "Die Wartezeiten für die Job-Warteschlange betrugen 3–7 h (`conformance-" "smoke`-Scherben: mediane 4 h);" -#: src/testing/ci-tiers.md:76 +#: src/testing/ci-tiers.md:139 msgid "" "**0 of 66** PR runs of the `Tests` workflow reached a conclusion in the " "sample window — 8 failed, 56 were cancelled by the next push;" @@ -66397,7 +66847,7 @@ msgstr "" "im Beispielfenster — 8 fehlgeschlagen, 56 wurden durch den nächsten Push " "abgesagt;" -#: src/testing/ci-tiers.md:78 +#: src/testing/ci-tiers.md:141 msgid "" "the required contexts included two jobs (`parity`, `compile-smoke`) that " "never ran on a PR and one (`conformance-smoke-complete`) that had been red " @@ -66410,7 +66860,7 @@ msgstr "" "Zusammenführungen war ein Admin Bypass** mit `lint` und `cargo-test` stehen " "noch an." -#: src/testing/ci-tiers.md:83 +#: src/testing/ci-tiers.md:146 msgid "" "The always-red required-gate incident was tracked in [\\#8092](https://" "github.com/PerryTS/perry/issues/8092). #8087 restored `lint`, \\#8095 made " @@ -66425,20 +66875,21 @@ msgstr "" "ersetzt die fragmentierte erforderliche-Kontext-Liste durch die einzige `pr-" "gate`-Fan-In oben beschrieben." -#: src/testing/ci-tiers.md:89 +#: src/testing/ci-tiers.md:152 msgid "Two specific costs dominated:" msgstr "Zwei spezifische Kosten dominierten:" -#: src/testing/ci-tiers.md:91 +#: src/testing/ci-tiers.md:154 +#, fuzzy msgid "" "`conformance-smoke` was 8 shards × ~60 min = **480 job-minutes per push**, " "and 96 % of each shard's test time was ~10 tests at ~200 s each — the auto-" "optimize path rebuilding a feature-stripped runtime per distinct feature " "set, redundantly in every shard. The harness's `PERRY_SKIP_BUILD=1` mode " "runs the same tests against one prebuilt release compiler at ~1.5 s each; " -"that is the `fast` gap mode the PR and sweep tiers use. The 8-shard auto-" -"optimize mode is kept in the full tier because it is the only arm that sees " -"auto-optimize-only link bugs." +"that is the `fast` gap mode the PR and sweep tiers use. The auto-optimize " +"mode is kept in the full tier because it is the only arm that sees auto-" +"optimize-only link bugs." msgstr "" "`conformance-smoke` war 8 Scherben × ~60 min = **480 Arbeitsminuten pro " "Schub**, und 96 % der Testzeit eines jeden Shards waren ~10 Tests bei " @@ -66450,7 +66901,7 @@ msgstr "" "Optimierungsmodus wird in der ganzen Ebene gehalten, weil er der einzige Arm " "ist, der nur auto-Optimierungs-Verbindungsfehler sieht." -#: src/testing/ci-tiers.md:98 +#: src/testing/ci-tiers.md:161 msgid "" "Every job saved a fresh ~0.5–1.3 GB sccache tarball on every PR push (~200 " "GB/day into a 10 GB repo cache budget), evicting every useful entry within " @@ -66466,7 +66917,7 @@ msgstr "" "`cache-warm.yml` ist weg: der Sweep ist der Cache-produzierende Build auf " "`main`." -#: src/testing/ci-tiers.md:104 +#: src/testing/ci-tiers.md:167 msgid "" "A later release run exposed a separate serial bottleneck: its 246 `perry` " "integration-test binaries had not reached their midpoint when `cargo-test` " @@ -66478,7 +66929,7 @@ msgid "" "result is a direct dependency of `full-suite-gate`." msgstr "" -#: src/testing/ci-tiers.md:112 +#: src/testing/ci-tiers.md:175 msgid "" "The **satellite gates** (`gc-ratchet`, `gc-root-dominance`, `gc-native-" "roots`, `gc-moving-witnesses`, `gc-parse-churn-gate`, `gc-ptr-shape-off-" @@ -66501,75 +66952,75 @@ msgstr "" "bekommt immer noch eine Runde von jedem – mit jedem Job übersprungen, was " "keinen Läufer-Slot kostet." -#: src/testing/ci-tiers.md:122 +#: src/testing/ci-tiers.md:185 msgid "Budgets" msgstr "Budgets" -#: src/testing/ci-tiers.md:124 +#: src/testing/ci-tiers.md:187 msgid "typical jobs" msgstr "typische Arbeitsplätze" -#: src/testing/ci-tiers.md:124 +#: src/testing/ci-tiers.md:187 msgid "typical runner-minutes" msgstr "typische Runner-Minuten" -#: src/testing/ci-tiers.md:124 +#: src/testing/ci-tiers.md:187 msgid "target wall clock" msgstr "Zielwanduhr" -#: src/testing/ci-tiers.md:126 +#: src/testing/ci-tiers.md:189 msgid "pr (core)" msgstr "pr (Kern)" -#: src/testing/ci-tiers.md:126 +#: src/testing/ci-tiers.md:189 msgid "~13 (6 gap shards)" msgstr "~13 (6 Spaltscheren)" -#: src/testing/ci-tiers.md:126 +#: src/testing/ci-tiers.md:189 msgid "~200" msgstr "~200" -#: src/testing/ci-tiers.md:126 +#: src/testing/ci-tiers.md:189 msgid "≤ 30 min once queued" msgstr "≤ 30 min einmal in der Warteschlange" -#: src/testing/ci-tiers.md:127 +#: src/testing/ci-tiers.md:190 msgid "pr (docs-only)" msgstr "pr (nur für Ärzte)" -#: src/testing/ci-tiers.md:127 +#: src/testing/ci-tiers.md:190 msgid "~5" msgstr "~5" -#: src/testing/ci-tiers.md:127 +#: src/testing/ci-tiers.md:190 msgid "≤ 5 min" msgstr "≤ 5 min" -#: src/testing/ci-tiers.md:128 +#: src/testing/ci-tiers.md:191 msgid "~19" msgstr "~19" -#: src/testing/ci-tiers.md:128 +#: src/testing/ci-tiers.md:191 msgid "~300" msgstr "~300" -#: src/testing/ci-tiers.md:128 +#: src/testing/ci-tiers.md:191 msgid "not a target — it coalesces" msgstr "kein Ziel — es verschmolzen" -#: src/testing/ci-tiers.md:129 +#: src/testing/ci-tiers.md:192 msgid "~30" msgstr "~30" -#: src/testing/ci-tiers.md:129 +#: src/testing/ci-tiers.md:192 msgid "~1500" msgstr "~1500" -#: src/testing/ci-tiers.md:129 +#: src/testing/ci-tiers.md:192 msgid "not a target" msgstr "kein Ziel" -#: src/testing/ci-tiers.md:131 +#: src/testing/ci-tiers.md:194 msgid "" "`push` to `main` uses ONE constant concurrency group with `cancel-in-" "progress: false`: GitHub keeps at most one running + one pending run per " @@ -66599,11 +67050,11 @@ msgstr "" "eines Sweep-Ausfalles erfolgt durch Fenster (`previous sweep SHA .. this " "sweep SHA`), genau wie bei den sechsstündigen Toren." -#: src/testing/ci-tiers.md:142 +#: src/testing/ci-tiers.md:205 msgid "Opting a PR into more" msgstr "Eine PR in mehr entscheiden" -#: src/testing/ci-tiers.md:144 +#: src/testing/ci-tiers.md:207 msgid "" "**`run-cc-parity` label** — runs the [Claude Code bundle parity gate](cc-" "parity.md) on changes to crates, build inputs, or the gate. This " @@ -66612,7 +67063,7 @@ msgid "" "goldens on one macOS runner." msgstr "" -#: src/testing/ci-tiers.md:148 +#: src/testing/ci-tiers.md:211 msgid "" "**`run-extended-tests` label** — promotes the PR's `test.yml` run to the " "`full` tier AND enables the PR arm of every satellite gate. Use it for GC / " @@ -66626,7 +67077,7 @@ msgstr "" "werden sollten, und für alles, was eine voll-tier-only Suite berührt. Das " "Anwenden des Etiketts feuert die Runs erneut (`labeled` Trigger)." -#: src/testing/ci-tiers.md:152 +#: src/testing/ci-tiers.md:215 msgid "" "**`skip-changelog` label** — skips the changeset step in `lint` (a `crates/` " "change must otherwise add a `changelog.d/-.md` fragment)." @@ -66635,7 +67086,7 @@ msgstr "" "`lint` (eine `crates/`-Änderung muss ansonsten ein `changelog.d/-." "md`-Fragment hinzufügen)." -#: src/testing/ci-tiers.md:154 +#: src/testing/ci-tiers.md:217 msgid "" "**`workflow_dispatch`** on any branch: `tier` (`pr` / `sweep` / `full`) and " "`update_gap_snapshot`." @@ -66643,11 +67094,11 @@ msgstr "" "**`workflow_dispatch`** auf jedem Zweig: `tier` (`pr` / `sweep` / `full`) " "und `update_gap_snapshot`." -#: src/testing/ci-tiers.md:157 +#: src/testing/ci-tiers.md:220 msgid "Re-baselining the gap snapshot" msgstr "Den Lücken-Snapshot neu basieren" -#: src/testing/ci-tiers.md:159 +#: src/testing/ci-tiers.md:222 msgid "" "`test-parity/gap_snapshot.json` is a both-direction snapshot: any divergence " "— a test that started failing OR started passing — is red. When `main` has " @@ -66660,17 +67111,17 @@ msgstr "" "Orakeländerung), regenerieren Sie es **von CI**, nicht von einem Laptop (der " "erforderliche Ausgangswert ist Linux, `fast`-Modus):" -#: src/testing/ci-tiers.md:165 +#: src/testing/ci-tiers.md:228 #, fuzzy msgid "# wait for the run, then:\n" msgstr "# warten Sie auf den Lauf, dann:" -#: src/testing/ci-tiers.md:168 +#: src/testing/ci-tiers.md:231 #, fuzzy msgid "# fill in `issue` / `reason` for every new entry, then commit\n" msgstr "# `issue` / `reason` für jeden neuen Eintrag ausfüllen, dann übergeben" -#: src/testing/ci-tiers.md:172 +#: src/testing/ci-tiers.md:235 msgid "" "New entries land as `category: untriaged`; give each an issue and a reason " "before merging. A crash may never be parked in the snapshot (`run_gap_tests." @@ -66680,11 +67131,11 @@ msgstr "" "Problem und einen Grund vor dem Zusammenführen. Ein Absturz darf niemals im " "Snapshot geparkt werden (`run_gap_tests.sh` verweigert)." -#: src/testing/ci-tiers.md:175 +#: src/testing/ci-tiers.md:238 msgid "Branch protection" msgstr "Zweigschutz" -#: src/testing/ci-tiers.md:177 +#: src/testing/ci-tiers.md:240 msgid "" "Required status checks on `main`: **`pr-gate`** only. Adding, removing or " "renaming a job in `test.yml` never needs a branch-protection edit again; the " @@ -66701,11 +67152,11 @@ msgstr "" "der eigene Lauf des Gates trägt, ob das Ergebnis passiert oder " "fehlgeschlagen ist." -#: src/testing/ci-tiers.md:183 +#: src/testing/ci-tiers.md:246 msgid "Release" msgstr "Release" -#: src/testing/ci-tiers.md:185 +#: src/testing/ci-tiers.md:248 msgid "" "`release-packages.yml`'s `await-tests` dispatches `test.yml` with " "`tier=full` on the pinned release branch and polls the SHA for a run whose " @@ -66717,7 +67168,7 @@ msgstr "" "suite-gate`** job succeeded — ein grüner Sweep- oder PR-Tierlauf auf " "demselben SHA zählt nicht. Siehe [Releasing](../contributing/releasing.md)." -#: src/testing/ci-tiers.md:190 +#: src/testing/ci-tiers.md:253 msgid "" "`parity` runs as 8 shards (`run_parity_tests.sh --shard N/8`) after the " "unsharded job was killed by GitHub's 6-hour job cap on 2026-08-16. " @@ -66734,6 +67185,207 @@ msgstr "" "parity_report_merge.py`, die einen fehlenden Shard ablehnt, anstatt die " "Suite zu schrumpfen)." +#: src/testing/ci-tiers.md:261 +msgid "Workflow suite selection" +msgstr "" + +#: src/testing/ci-tiers.md:263 +msgid "" +"The **CI** Actions workflow defaults to `suite=core`, preserving the tiered " +"`pr-gate`, `main-gate`, and `full-suite-gate`. Select `suite=coverage`, " +"`suite=security-audit`, or another auxiliary ID to run that nested workflow " +"independently; `suite=all` adds all auxiliary workflows to core CI. The " +"`tier` selector continues to control core CI." +msgstr "" + +#: src/testing/ci-tiers.md:265 +msgid "" +"The Actions sidebar has six repository workflows. GitHub also registers four " +"independent entries for Dependabot Updates, Dependency Graph, Copilot, and " +"Pages, making ten entries once retired workflow history is cleaned up." +msgstr "" + +#: src/testing/ci-tiers.md:267 +#, fuzzy +msgid "Categories and suite selection" +msgstr "Kategorien und Migrationstore" + +#: src/testing/ci-tiers.md:269 +msgid "**CI**" +msgstr "" + +#: src/testing/ci-tiers.md:269 +msgid "" +"Required core CI and auxiliary security/coverage checks; defaults to " +"`suite=core`" +msgstr "" + +#: src/testing/ci-tiers.md:270 +msgid "**Extended Tests** (`compiler-runtime.yml`)" +msgstr "" + +#: src/testing/ci-tiers.md:270 +msgid "" +"Compiler/runtime, compatibility, integration, and performance; choose a " +"category such as `suite=compatibility`, one suite such as `suite=simctl-" +"tests`, or `suite=all`" +msgstr "" + +#: src/testing/ci-tiers.md:271 +msgid "**GC**" +msgstr "" + +#: src/testing/ci-tiers.md:271 +msgid "Six collector suites; choose an individual suite or `suite=all`" +msgstr "" + +#: src/testing/ci-tiers.md:272 +msgid "**Repository** (`maintenance.yml`)" +msgstr "" + +#: src/testing/ci-tiers.md:272 +msgid "" +"Documentation and repository maintenance; defaults to offline " +"`suite=validate`; select `suite=docs-check` for docs checks or `suite=docs` " +"for deployment" +msgstr "" + +#: src/testing/ci-tiers.md:273 +msgid "**Publish to npm / GitHub Release**" +msgstr "" + +#: src/testing/ci-tiers.md:273 +msgid "Compiler packages, platform archives, and GitHub releases" +msgstr "" + +#: src/testing/ci-tiers.md:274 +#, fuzzy +msgid "**Publish to npm / @perryts/hono-server**" +msgstr "`@perryts/hono-server`" + +#: src/testing/ci-tiers.md:274 +msgid "Independent adapter package publication" +msgstr "" + +#: src/testing/ci-tiers.md:276 +msgid "" +"All 38 original suites remain represented. Schedules select their original " +"suites even when several categories share a parent. Category and `all` " +"dispatches use the original suite input defaults; individual suite " +"dispatches accept their custom inputs. Live maintenance tasks must be " +"selected explicitly and dispatched from `main`. Documentation deployment can " +"still be dispatched on a release tag. The release workflows retain their " +"filenames for npm trusted publisher authorization." +msgstr "" + +#: src/testing/ci-tiers.md:278 +msgid "" +"Job display names use lowercase. Nested suite jobs use the stable suite ID " +"as their prefix, for example `docs-check / build-and-validation` and `docs-" +"check / suite result`. Workflow category names retain their sidebar casing. " +"Keep suite prefixes stable: freshness checks, failure monitoring, and " +"release orchestration select jobs by these names. `scripts/" +"check_actions_topology.py` enforces lowercase labels and suite prefixes." +msgstr "" + +#: src/testing/ci-tiers.md:285 +msgid "" +"For example, `gh workflow run compiler-runtime.yml -f suite=performance` " +"runs the performance category; `gh workflow run compiler-runtime.yml -f " +"suite=benchmark` runs only the benchmark suite. Release orchestration " +"dispatches the simulator suite on the exact candidate SHA and checks its " +"actual job result, independently of other Extended Tests jobs." +msgstr "" + +#: src/testing/ci-tiers.md:287 +msgid "" +"After a consolidation lands, Repository automatically deletes completed runs " +"whose repository workflow file no longer exists. It allows queued/running " +"jobs to finish before deleting their history and leaves GitHub's dynamic " +"registrations alone. This removes retired entries from the sidebar as their " +"last runs are cleaned up." +msgstr "" + +#: src/testing/ci-tiers.md:289 +msgid "Required WASI command and component execution" +msgstr "" + +#: src/testing/ci-tiers.md:291 +msgid "" +"`wasi-execution` joins the core PR, sweep and full tiers. On Linux it builds " +"Perry with `target-wasi` and a matching wasm32-wasip2 runtime, checks the IR " +"ABI, then runs all six smoke cases, twenty acceptance cases and ten pinned-" +"Node comparisons. It then builds matching native component tools and " +"instrumented runtimes and runs both component harnesses: native hosting, " +"Perry-authored guests, resource lifetimes, forced moving GC and direct Rust/" +"Perry composition. The job has a 120-minute budget for the combined build " +"and execution. Per-case logs, component phase verdicts, source revision and " +"artifacts are retained. The required `pr-gate` rejects a skipped or missing " +"planned WASI job as well as failures and cancellation. Docs-only PRs skip " +"this build. The wider Windows/macOS matrix remains in the extended suite. " +"Native component execution is currently qualified on Linux." +msgstr "" + +#: src/testing/tak-performance.md:1 +#, fuzzy +msgid "Perry CLI performance reports" +msgstr "Performance-Hinweise" + +#: src/testing/tak-performance.md:3 +msgid "" +"The scheduled and release-triggered `tak Performance Report` workflow " +"measures four local Perry commands: startup/version, help output, a full " +"compile of the JSON parsing app-pattern kernel, and the compiler's `check` " +"path on a second app-pattern kernel. The workloads are declared in [`tak." +"toml`](../../../tak.toml). They read only checked-in sources and do not " +"access the network." +msgstr "" + +#: src/testing/tak-performance.md:9 +msgid "" +"The workflow runs on Ubuntu 24.04 with tak 0.0.14 and the pinned Valgrind " +"package from `external-tools.json`. Cargo sources, Perry build outputs, and " +"the pinned tak binary are cached in CI. The full measurement-series class, " +"including these tool versions and the Rust toolchain, is recorded in `tak." +"toml`. It attaches the measurement summary to the Actions run and uploads " +"JSON plus text output as an artifact. A separate trusted job publishes the " +"exact-SHA measurement into Git notes under `refs/notes/tak`; the build and " +"measurement job itself has no write permission. The run also renders recent " +"measurements and `tak detect`'s instruction-count steps, which name the " +"commit where each step appeared. This starts a history; the first " +"measurement on a runner has nothing to compare against." +msgstr "" + +#: src/testing/tak-performance.md:20 +msgid "" +"The workflow is report-only and does not gate pull requests. Wall-clock " +"samples are informational. tak's instruction counts may be considered for a " +"gate after reviewing a stable history on the same runner class. The class is " +"pinned in `tak.toml` so a toolchain change starts a separate comparison " +"series." +msgstr "" + +#: src/testing/tak-performance.md:25 +msgid "To inspect the configured workloads locally, install tak and run:" +msgstr "" + +#: src/testing/tak-performance.md:32 +msgid "" +"Run and record measurements with `tak run --no-progress --record`. See " +"history with `tak log --limit 10`, or identify instruction-count steps with " +"`tak detect --no-gate`. Instruction counts require Linux and Valgrind; Apple " +"Silicon macOS can report timings only." +msgstr "" + +#: src/testing/tak-performance.md:38 +msgid "" +"This report complements the [app-pattern benchmarks](../../../benchmarks/app-" +"patterns/README.md), which compare generated-program runtime against Bun and " +"Node with checksummed outputs. It is separate from the published [Node/Bun " +"performance baseline](../../../benchmarks/results/public-node-bun-v1.json) " +"and `benchmark.yml`'s release regression gate." +msgstr "" + #: src/testing/cc-parity.md:1 msgid "Claude Code bundle parity" msgstr "" @@ -66790,12 +67442,12 @@ msgstr "Was ein Scheck schickt" msgid "" "`tests/cc-parity/manifest.json` pins the npm tarball and extracted `package/" "cli.js` by both size and SHA-256. Only that regular file is extracted; no " -"package install hooks run. The compiler is built first, then the runtime, " -"stdlib, Wasm host, and all native extension archives are built together with " -"`perry-runtime/wasm-host`. This avoids stale runtime copies in extension " -"archives (#6303). Compilation uses `--no-auto-optimize --no-cache --enable-" -"wasm-runtime`, with four LLVM workers (`PERRY_CODEGEN_UNIT_JOBS=4`) to use " -"the Intel runner's four cores within its memory budget." +"package install hooks run. The compiler, runtime, stdlib, Wasm host, and all " +"native extension archives are built together in one Cargo graph. This avoids " +"stale runtime copies in extension archives (#6303). Compilation uses `--no-" +"auto-optimize --no-cache --enable-wasm-runtime`, with four LLVM workers " +"(`PERRY_CODEGEN_UNIT_JOBS=4`) to use the Intel runner's four cores within " +"its memory budget." msgstr "" #: src/testing/cc-parity.md:42 @@ -67053,8 +67705,8 @@ msgid "" msgstr "" "**Es ist nicht der Concurrency-Fehler, und es ist nicht macOS Läufer " "Verfügbarkeit.** Beides war die offensichtliche Lektüre, und beide liegen " -"falsch. Das Richtige zu bekommen zählt, weil jede falsche Lektüre ein \"Fix" -"\" hat, das die Dinge noch schlimmer machen würde." +"falsch. Das Richtige zu bekommen zählt, weil jede falsche Lektüre ein " +"\"Fix\" hat, das die Dinge noch schlimmer machen würde." #: src/testing/ci-gate-scheduling.md:58 msgid "" @@ -67094,8 +67746,8 @@ msgid "" "The `github.sha` arm is guarded on `github.event_name == 'push'`. #7856 — " "the change this very document describes — moved the main-line arm from " "`push: branches: [main]` to `schedule:`. The guard stopped matching, the " -"expression fell through to `github.ref` (constant `refs/heads/main`), and **" -"\\#7205 came straight back on the arm \\#7856 created.** Measured " +"expression fell through to `github.ref` (constant `refs/heads/main`), and " +"**\\#7205 came straight back on the arm \\#7856 created.** Measured " "2026-08-12, identically on all ten gates: oldest run `queued` holding the " "group, the next two `cancelled` with `jobs: 0`, newest `pending`. `gate-" "freshness` itself was cancelled the same way." @@ -67126,9 +67778,9 @@ msgstr "" #: src/testing/ci-gate-scheduling.md:85 msgid "" -"**The lesson is about the sentence, not the YAML.** \"Do not fix this again" -"\" is a claim about the future, and a scheduling change three days later " -"invalidated it. A repaired invariant should be written down as an " +"**The lesson is about the sentence, not the YAML.** \"Do not fix this " +"again\" is a claim about the future, and a scheduling change three days " +"later invalidated it. A repaired invariant should be written down as an " "_executable check_, not as an instruction to the next human to stop looking." msgstr "" "**Die Lektion ist über den Satz, nicht über die YAML.** \"Fixieren Sie dies " @@ -67665,8 +68317,8 @@ msgid "**branches that still existed**" msgstr "**Zweige, die noch existierten**" #: src/testing/ci-gate-scheduling.md:253 -#: src/internals/gc-rooting-invariant.md:331 -#: src/internals/gc-rooting-invariant.md:332 +#: src/internals/gc-rooting-invariant.md:358 +#: src/internals/gc-rooting-invariant.md:359 msgid "**2**" msgstr "**2**" @@ -67724,8 +68376,8 @@ msgstr "" #: src/testing/ci-gate-scheduling.md:275 msgid "" -"Why \"the gate was dark\" is not the same as \"the gate would have caught it" -"\"" +"Why \"the gate was dark\" is not the same as \"the gate would have caught " +"it\"" msgstr "" "Warum \"das Tor dunkel war\" ist nicht dasselbe wie \"das Tor hätte es " "gefangen\"" @@ -67757,8 +68409,8 @@ msgstr "" #: src/testing/ci-gate-scheduling.md:285 msgid "" -"The two dimensions that did move — wall time and RSS — are explicitly `" -"\"gating\": false` in the `shared_ci` profile CI runs, with the rationale " +"The two dimensions that did move — wall time and RSS — are explicitly " +"`\"gating\": false` in the `shared_ci` profile CI runs, with the rationale " "recorded in `tolerances.json`. They gate only under `pinned_host`, which CI " "never uses." msgstr "" @@ -67788,6 +68440,43 @@ msgstr "" "dritte Frage, und ein Frische-Dashboard, das ganz grün ist, hätte es immer " "noch nicht gefangen." +#: src/testing/ci-gate-scheduling.md:297 +#, fuzzy +msgid "GitHub Actions category runs" +msgstr "" +"# GitHub-Actions-Beispiel\n" +"jobs" + +#: src/testing/ci-gate-scheduling.md:299 +msgid "" +"The Actions sidebar is organized around these entrypoints: `CI`, `GC`, " +"`Compiler and Runtime`, `Compatibility`, `Integration`, `Performance`, " +"`Documentation`, `Publish to npm / GitHub Release`, `Publish to npm / Hono " +"Server`, and `Maintenance`. Category runs expose each selected workflow as a " +"nested job. Their schedules remain staggered and unchanged; the router " +"selects only the suite that owns the fired cron." +msgstr "" + +#: src/testing/ci-gate-scheduling.md:301 +msgid "" +"Use the **Run workflow** suite selector for focused manual runs. For " +"example, choose `suite=gc-root-dominance` on **GC**, `suite=node-core-" +"subset` on **Compatibility**, or `suite=simctl-tests` on **Integration**. " +"Choose `suite=all` only when the full category is intended. CI defaults to " +"`suite=core`; select an auxiliary suite such as `coverage` or `security-" +"audit` to run it without the protected core gate. Maintenance defaults to " +"offline validation; choose a live maintenance suite only when its effects " +"are intended." +msgstr "" + +#: src/testing/ci-gate-scheduling.md:303 +msgid "" +"Release automation continues to dispatch the full CI tier and waits for the " +"selected nested simulator job in the Integration run. The parent run may " +"contain unrelated skipped or failed siblings; release gating follows the " +"required subject job." +msgstr "" + #: src/testing/linux-incident-capture.md:1 msgid "Capturing a Linux server hang or memory slope" msgstr "" @@ -67974,7 +68663,7 @@ msgstr "`run`" msgid "Compile and run in one step." msgstr "Kompilieren und in einem Schritt laufen." -#: src/cli/commands.md:22 +#: src/cli/commands.md:22 src/contributing/building.md:56 msgid "`dev`" msgstr "`dev`" @@ -68086,7 +68775,7 @@ msgstr "# Oder Shorthand (auto-detects compilieren):" #: src/cli/commands.md:216 src/cli/commands.md:230 src/cli/commands.md:283 #: src/cli/commands.md:295 src/cli/flags.md:80 src/cli/flags.md:143 #: src/cli/flags.md:191 src/cli/flags.md:291 src/cli/flags.md:379 -#: src/cli/flags.md:410 src/cli/flags.md:417 +#: src/cli/flags.md:412 src/cli/flags.md:419 msgid "Flag" msgstr "Flag" @@ -68143,7 +68832,7 @@ msgstr "`--keep-intermediates`" msgid "Keep `.o` and `.asm` files" msgstr "`.o`- und `.asm`-Dateien behalten" -#: src/cli/commands.md:56 src/cli/commands.md:103 src/cli/flags.md:419 +#: src/cli/commands.md:56 src/cli/commands.md:103 src/cli/flags.md:421 msgid "`--enable-js-runtime`" msgstr "`--enable-js-runtime`" @@ -68151,7 +68840,7 @@ msgstr "`--enable-js-runtime`" msgid "Enable V8 JavaScript runtime fallback" msgstr "V8-JavaScript-Runtime-Fallback aktivieren" -#: src/cli/commands.md:57 src/cli/commands.md:104 src/cli/flags.md:420 +#: src/cli/commands.md:57 src/cli/commands.md:104 src/cli/flags.md:422 msgid "`--enable-wasm-runtime`" msgstr "`--enable-wasm-runtime`" @@ -68164,7 +68853,7 @@ msgstr "" "Verwendung von `WebAssembly.*` automatisch erkannt)" #: src/cli/commands.md:58 src/cli/commands.md:105 src/cli/flags.md:150 -#: src/cli/flags.md:421 +#: src/cli/flags.md:423 msgid "`--type-check`" msgstr "`--type-check`" @@ -68476,8 +69165,8 @@ msgstr "" #: src/cli/commands.md:152 msgid "" "Watches the project root (plus any `--watch` dirs) recursively using the " -"`notify` crate. A 300 ms **debounce** window collapses editor \"save storms" -"\" into one rebuild." +"`notify` crate. A 300 ms **debounce** window collapses editor \"save " +"storms\" into one rebuild." msgstr "" "Beobachtet das Projekt-Root (plus alle `--watch`-Verzeichnisse) rekursiv mit " "der `notify`-Crate. Ein 300-ms-**Debounce**-Fenster kollabiert Editor-" @@ -68571,7 +69260,7 @@ msgstr "" "State-Erhaltung über Rebuilds / HMR — \"schneller Restart\" ist das ehrliche " "Ziel." -#: src/cli/commands.md:175 src/internals/garbage-collector.md:366 +#: src/cli/commands.md:175 src/internals/garbage-collector.md:448 msgid "check" msgstr "check" @@ -68990,9 +69679,9 @@ msgstr "" "(~1,5 GB) herunter, damit Perry ohne Visual Studio Build Tools linken kann. " "Erfordert LLVM (`winget install LLVM.LLVM`) und fragt nach der Akzeptanz der " "Microsoft-Redistributable-Lizenz — übergeben Sie `--accept-license`, um den " -"Prompt für CI zu überspringen. Die Ausgabe landet in `%LOCALAPPDATA%\\perry" -"\\windows-sdk`. Siehe den [Windows-Plattform-Leitfaden](../platforms/windows." -"md) für den vollständigen Toolchain-Vergleich." +"Prompt für CI zu überspringen. Die Ausgabe landet in `%LOCALAPPDATA%" +"\\perry\\windows-sdk`. Siehe den [Windows-Plattform-Leitfaden](../platforms/" +"windows.md) für den vollständigen Toolchain-Vergleich." #: src/cli/commands.md:320 msgid "Credential wizards store their output in `~/.perry/config.toml`." @@ -69038,7 +69727,7 @@ msgid "`--mode` writes `[update] mode` to `~/.perry/config.toml`:" msgstr "`--mode` schreibt `[update] mode` auf `~/.perry/config.toml`:" #: src/cli/commands.md:339 src/cli/updates.md:47 -#: src/internals/gc-rooting-invariant.md:327 +#: src/internals/gc-rooting-invariant.md:354 msgid "mode" msgstr "mode" @@ -70030,8 +70719,8 @@ msgstr "Eingebettete Dateien sind zur Laufzeit auf drei Arten erreichbar:" #: src/cli/flags.md:205 msgid "" "```typescript,no-test\n" -"import { embeddedFiles, readEmbedded, isStandaloneExecutable } from \"perry" -"\";\n" +"import { embeddedFiles, readEmbedded, isStandaloneExecutable } from " +"\"perry\";\n" "import { readFileSync } from \"fs\";\n" "\n" "for (const f of embeddedFiles()) {\n" @@ -70045,8 +70734,8 @@ msgid "" "```" msgstr "" "```typescript,no-test\n" -"import { embeddedFiles, readEmbedded, isStandaloneExecutable } from \"perry" -"\";\n" +"import { embeddedFiles, readEmbedded, isStandaloneExecutable } from " +"\"perry\";\n" "import { readFileSync } from \"fs\";\n" "\n" "for (const f of embeddedFiles()) {\n" @@ -70068,8 +70757,8 @@ msgid "" msgstr "" "`embeddedFiles()` ist eine Funktion (nicht ein blanker Wert wie Bun " "`embeddedFiles`), so dass Array-Methoden auf dem Ergebnis senden. " -"`readEmbedded(path)` und `node:fs` akzeptieren entweder den virtuellen Pfad `" -"$perryfs/` oder den embed-relative Schlüssel." +"`readEmbedded(path)` und `node:fs` akzeptieren entweder den virtuellen Pfad " +"`$perryfs/` oder den embed-relative Schlüssel." #: src/cli/flags.md:222 msgid "" @@ -70271,10 +70960,10 @@ msgstr "`--debug-symbols`" #: src/cli/flags.md:299 msgid "" "Retain symbols/DWARF (and emit a Windows PDB) instead of stripping the " -"result." +"result, and emit a DWARF **line table** mapping machine code back to your `." +"ts` lines so debuggers can set breakpoints. See [Source-level debugging]" +"(debugging.md)." msgstr "" -"Behalten Sie symbols/DWARF (und emittieren Sie eine Windows PDB) statt das " -"Ergebnis zu entfernen." #: src/cli/flags.md:300 msgid "`--function-source `" @@ -70363,11 +71052,10 @@ msgstr "`--statepoint-report[=json]`" #: src/cli/flags.md:307 msgid "" -"Report native-stack GC root pressure: calls with live roots, audited " -"non-collecting calls omitted, relocations, plain-map fallbacks, and " -"live-root widths. Research-only; reports the mandatory native " -"statepoint backend (the plain stack-map and explicit-bridge modes it " -"also named are gone)" +"Report native-stack GC root pressure: calls with live roots, audited non-" +"collecting calls omitted, relocations, plain-map fallbacks, and live-root " +"widths. Research-only; reports the mandatory native statepoint backend (the " +"plain stack-map and explicit-bridge modes it also named are gone)" msgstr "" #: src/cli/flags.md:309 @@ -70379,10 +71067,10 @@ msgid "" "llvm` forces a full recompile (the object cache otherwise skips codegen for " "unchanged modules, leaving the trace dir empty)." msgstr "" -"Das `--trace`/`--focus`-Paar lokalisiert Fehler des Typs \"falsch compiliert" -"\": `perry compile foo.ts --trace hir,llvm --focus parseRow` gibt nur den " -"abgesenkten HIR der Funktion `parseRow` und das LLVM-IR des Moduls aus, " -"sodass erkennbar ist, in welcher Stufe der Fehler aufgetreten ist, ohne " +"Das `--trace`/`--focus`-Paar lokalisiert Fehler des Typs \"falsch " +"compiliert\": `perry compile foo.ts --trace hir,llvm --focus parseRow` gibt " +"nur den abgesenkten HIR der Funktion `parseRow` und das LLVM-IR des Moduls " +"aus, sodass erkennbar ist, in welcher Stufe der Fehler aufgetreten ist, ohne " "einen vollständigen Modul-Dump durchsuchen zu müssen. `--trace llvm` " "erzwingt eine vollständige Neukompilierung (der Objekt-Cache überspringt " "andernfalls das Codegen für unveränderte Module und lässt das Trace-" @@ -70571,19 +71259,41 @@ msgstr "" "Kontrolle der verschmolzenen Multiplikations-Add-Kontraktion getrennt von " "der Reassoziation." +#: src/cli/flags.md:387 +msgid "`--record-function-order`" +msgstr "" + +#: src/cli/flags.md:387 +msgid "" +"Build a binary that appends each compiled function's name to " +"`$PERRY_FUNCTION_ORDER_OUT` the first time it runs; see [Function Order]" +"(function-order.md)." +msgstr "" + +#: src/cli/flags.md:388 +msgid "`--function-order `" +msgstr "" + #: src/cli/flags.md:388 msgid "" +"Place the functions a recording listed first and together, in list order, so " +"startup code shares pages; unknown names are ignored. See [Function Order]" +"(function-order.md)." +msgstr "" + +#: src/cli/flags.md:390 +msgid "" "Minification strips comments, collapses whitespace, and mangles local " "variable/parameter/non-exported function names for smaller output." msgstr "" "Minifizierung entfernt Kommentare, kollabiert Whitespace und mangelt lokale " "Variablen-/Parameter-/nicht-exportierte-Funktions-Namen für kleinere Ausgabe." -#: src/cli/flags.md:390 +#: src/cli/flags.md:392 msgid "Size-optimized builds" msgstr "Größenoptimierte Builds" -#: src/cli/flags.md:392 +#: src/cli/flags.md:394 msgid "" "For the smallest possible native binaries, two opt-in environment variables " "rebuild the auto-optimized runtime/stdlib archives tuned for size instead of " @@ -70595,11 +71305,11 @@ msgstr "" "Geschwindigkeit abgestimmt sind (sie benötigen einen Perry-Workspace " "Checkout, wie der Rest von Auto-optimize):" -#: src/cli/flags.md:399 +#: src/cli/flags.md:401 msgid "`PERRY_SIZE_OPT=z` (or `s`)" msgstr "`PERRY_SIZE_OPT=z` (or `s`)" -#: src/cli/flags.md:399 +#: src/cli/flags.md:401 msgid "" "Rebuild the runtime/stdlib at `-C opt-level=z`/`s` instead of `3`. Roughly " "halves a small program's binary at some runtime-speed cost (compute-heavy " @@ -70612,11 +71322,11 @@ msgstr "" "Größenoptimierte und normale Archive werden unabhängig voneinander " "zwischengespeichert." -#: src/cli/flags.md:400 +#: src/cli/flags.md:402 msgid "`PERRY_SIZE_LTO=fat`" msgstr "`PERRY_SIZE_LTO=fat`" -#: src/cli/flags.md:400 +#: src/cli/flags.md:402 msgid "" "Additionally run whole-archive fat LTO over the rebuilt archives (slower " "rebuild, smaller binary). Only meaningful together with `PERRY_SIZE_OPT`." @@ -70625,11 +71335,11 @@ msgstr "" "Archive (langsamer Wiederaufbau, kleinere Binär). Nur sinnvoll zusammen mit " "`PERRY_SIZE_OPT`." -#: src/cli/flags.md:401 +#: src/cli/flags.md:403 msgid "`PERRY_SIZE_PANIC=abort-immediate`" msgstr "`PERRY_SIZE_PANIC=abort-immediate`" -#: src/cli/flags.md:401 +#: src/cli/flags.md:403 msgid "" "Additionally rebuild the Rust standard library with the `immediate-abort` " "panic strategy when auto-optimize proves that no UI/thread/plugin callback " @@ -70648,7 +71358,7 @@ msgstr "" "ohne ein symbolisiertes Backtrace ab — JS `throw`/`catch`, `finally`, " "Fehlerstacks und `uncaughtException` bleiben unberührt." -#: src/cli/flags.md:403 +#: src/cli/flags.md:405 msgid "" "A `console.log` hello world on macOS arm64: 4.03 MB default → 2.17 MB with " "`PERRY_SIZE_OPT=z PERRY_SIZE_LTO=fat` → 1.87 MB adding " @@ -70660,15 +71370,15 @@ msgstr "" "`PERRY_SIZE_PANIC=abort-immediate`. Programme, die mehr der Laufzeit " "verwenden, schrumpfen proportional weniger." -#: src/cli/flags.md:408 +#: src/cli/flags.md:410 msgid "Testing Flags" msgstr "Test-Flags" -#: src/cli/flags.md:412 +#: src/cli/flags.md:414 msgid "`--enable-geisterhand`" msgstr "`--enable-geisterhand`" -#: src/cli/flags.md:412 +#: src/cli/flags.md:414 msgid "" "Embed the [Geisterhand](../testing/geisterhand.md) HTTP server for " "programmatic UI testing (default port 7676)" @@ -70676,26 +71386,26 @@ msgstr "" "Bettet den [Geisterhand](../testing/geisterhand.md)-HTTP-Server für " "programmatisches UI-Testing ein (Standard-Port 7676)" -#: src/cli/flags.md:413 +#: src/cli/flags.md:415 msgid "`--geisterhand-port `" msgstr "`--geisterhand-port `" -#: src/cli/flags.md:413 +#: src/cli/flags.md:415 msgid "" "Set a custom port for the Geisterhand server (implies `--enable-geisterhand`)" msgstr "" "Benutzerdefinierten Port für den Geisterhand-Server setzen (impliziert `--" "enable-geisterhand`)" -#: src/cli/flags.md:415 +#: src/cli/flags.md:417 msgid "Runtime Flags" msgstr "Runtime-Flags" -#: src/cli/flags.md:419 +#: src/cli/flags.md:421 msgid "Enable V8 JavaScript runtime for unsupported npm packages" msgstr "V8-JavaScript-Runtime für nicht unterstützte npm-Pakete aktivieren" -#: src/cli/flags.md:420 +#: src/cli/flags.md:422 msgid "" "Force-link the wasmi WebAssembly host runtime (auto-detected when " "`WebAssembly.*` is referenced; needed only when loading via dlopen / FFI " @@ -70705,15 +71415,15 @@ msgstr "" "erkannt, wenn `WebAssembly.*` referenziert wird; nur erforderlich beim Laden " "via dlopen / FFI ohne statische Referenz)" -#: src/cli/flags.md:421 +#: src/cli/flags.md:423 msgid "Enable type checking via tsgo IPC" msgstr "Typprüfung über tsgo-IPC aktivieren" -#: src/cli/flags.md:422 +#: src/cli/flags.md:424 msgid "`--strict-eval`" msgstr "`--strict-eval`" -#: src/cli/flags.md:422 +#: src/cli/flags.md:424 msgid "" "Fail the build if any runtime-unknown `eval(...)` / `new Function()` site is reachable. By default such a site is compiled to a deferred " @@ -70730,11 +71440,11 @@ msgstr "" "(package.json oder perry.toml) einstellbar. `PERRY_ALLOW_EVAL=1` zwingt es " "ab. Siehe [Limitations](../language/limitations.md#no-eval-or-dynamic-code)." -#: src/cli/flags.md:423 +#: src/cli/flags.md:425 msgid "`--strict-dynamic-import`" msgstr "`--strict-dynamic-import`" -#: src/cli/flags.md:423 +#: src/cli/flags.md:425 msgid "" "Fail the build if a dynamic `import(...)` has a runtime-computed (non-" "resolvable) specifier. By default such a site is compiled to a rejected " @@ -70758,11 +71468,11 @@ msgstr "" "unberührt. Siehe [Limitations](../language/limitations.md#no-eval-or-dynamic-" "code)." -#: src/cli/flags.md:424 +#: src/cli/flags.md:426 msgid "`--strict-unimplemented`" msgstr "`--strict-unimplemented`" -#: src/cli/flags.md:424 +#: src/cli/flags.md:426 msgid "" "Fail at compile time when a recognized but unimplemented Node/stdlib API is " "referenced instead of emitting a deferred runtime error." @@ -70771,22 +71481,22 @@ msgstr "" "Node/stdlib API referenziert wird, anstatt einen latenten Laufzeitfehler " "auszusenden." -#: src/cli/flags.md:425 +#: src/cli/flags.md:427 msgid "`--emit-attest`" msgstr "`--emit-attest`" -#: src/cli/flags.md:425 +#: src/cli/flags.md:427 msgid "Emit `.attest.json`; see [Binary attestation](emit-attest.md)." msgstr "" "Emit `.attest.json`; siehe [Binäre Bescheinigung](emit-attest.md)." -#: src/cli/flags.md:426 +#: src/cli/flags.md:428 msgid "" "Emit the platform sandbox sidecar; see [Sandbox profiles](emit-sandbox.md)." msgstr "" "Die Sandkasten-Sandbox auslassen; siehe [Sandkastenprofile](emit-sandbox.md)." -#: src/cli/flags.md:427 +#: src/cli/flags.md:429 msgid "" "Refuse reachable arbitrary-code-execution surfaces; see [Lockdown](lockdown." "md)." @@ -70794,31 +71504,41 @@ msgstr "" "Nicht erreichbare beliebige Code-Ausführungsflächen; siehe [Lockdown]" "(lockdown.md)." -#: src/cli/flags.md:429 src/cli/perry-toml.md:512 +#: src/cli/flags.md:431 +msgid "" +"`--type-check` requires a project `tsconfig.json` and the verified preview " +"build: install with `npm install --save-dev @typescript/native-preview@7.0.0-" +"dev.20260612.1`. It reports configuration, syntax, and type errors and stops " +"compilation on errors. If tsgo is missing or has an unsupported version, " +"Perry warns and continues without checking. The preview API has no version " +"handshake, so other builds are explicitly refused before IPC." +msgstr "" + +#: src/cli/flags.md:433 src/cli/perry-toml.md:512 msgid "Environment Variables" msgstr "Umgebungsvariablen" -#: src/cli/flags.md:433 src/cli/perry-toml.md:520 +#: src/cli/flags.md:437 src/cli/perry-toml.md:520 msgid "`PERRY_LICENSE_KEY`" msgstr "`PERRY_LICENSE_KEY`" -#: src/cli/flags.md:433 +#: src/cli/flags.md:437 msgid "Perry Hub license key for `perry publish`" msgstr "Perry-Hub-Lizenzschlüssel für `perry publish`" -#: src/cli/flags.md:434 src/cli/perry-toml.md:522 +#: src/cli/flags.md:438 src/cli/perry-toml.md:522 msgid "`PERRY_APPLE_CERTIFICATE_PASSWORD`" msgstr "`PERRY_APPLE_CERTIFICATE_PASSWORD`" -#: src/cli/flags.md:434 +#: src/cli/flags.md:438 msgid "Password for .p12 certificate" msgstr "Passwort für .p12-Zertifikat" -#: src/cli/flags.md:435 +#: src/cli/flags.md:439 msgid "`PERRY_TARGET_CPU`" msgstr "`PERRY_TARGET_CPU`" -#: src/cli/flags.md:435 +#: src/cli/flags.md:439 msgid "" "CPU baseline for generated machine code (same values as `--march`; the flag " "and perry.toml `[build] march` win over the env var)" @@ -70826,62 +71546,62 @@ msgstr "" "CPU-Basiswert für generierten Maschinencode (gleiche Werte wie `--march`; " "die Flagge und perry.toml `[build] march` gewinnen über die Env var)" -#: src/cli/flags.md:436 src/cli/updates.md:146 +#: src/cli/flags.md:440 src/cli/updates.md:146 msgid "`PERRY_NO_UPDATE_CHECK=1`" msgstr "`PERRY_NO_UPDATE_CHECK=1`" -#: src/cli/flags.md:436 +#: src/cli/flags.md:440 msgid "Disable automatic update checks" msgstr "Automatische Update-Prüfungen deaktivieren" -#: src/cli/flags.md:437 src/cli/updates.md:147 +#: src/cli/flags.md:441 src/cli/updates.md:147 msgid "`NO_UPDATE_NOTIFIER`" msgstr "`NO_UPDATE_NOTIFIER`" -#: src/cli/flags.md:437 +#: src/cli/flags.md:441 msgid "The same, using the ecosystem-wide spelling" msgstr "Gleiches gilt für die Verwendung der ökosystemweiten Rechtschreibung" -#: src/cli/flags.md:438 src/cli/updates.md:148 +#: src/cli/flags.md:442 src/cli/updates.md:148 msgid "`PERRY_UPDATE_MODE`" msgstr "`PERRY_UPDATE_MODE`" -#: src/cli/flags.md:438 +#: src/cli/flags.md:442 msgid "`off`/`notify`/`prompt`/`auto` for one run — see [Updates](updates.md)" msgstr "" "`off`/`notify`/`prompt`/`auto` für einen Lauf — siehe [Updates](updates.md)" -#: src/cli/flags.md:439 src/cli/updates.md:149 +#: src/cli/flags.md:443 src/cli/updates.md:149 msgid "`PERRY_UPDATE_SERVER`" msgstr "`PERRY_UPDATE_SERVER`" -#: src/cli/flags.md:439 +#: src/cli/flags.md:443 msgid "Custom update server URL" msgstr "URL für benutzerdefinierten Update-Server" -#: src/cli/flags.md:440 +#: src/cli/flags.md:444 msgid "`CI=true`" msgstr "`CI=true`" -#: src/cli/flags.md:440 +#: src/cli/flags.md:444 msgid "Auto-skip update checks (set by most CI systems)" msgstr "" "Update-Prüfungen automatisch überspringen (von den meisten CI-Systemen " "gesetzt)" -#: src/cli/flags.md:441 +#: src/cli/flags.md:445 msgid "`RUST_LOG`" msgstr "`RUST_LOG`" -#: src/cli/flags.md:441 +#: src/cli/flags.md:445 msgid "Debug logging level (`debug`, `info`, `trace`)" msgstr "Debug-Logging-Level (`debug`, `info`, `trace`)" -#: src/cli/flags.md:442 +#: src/cli/flags.md:446 msgid "`PERRY_OPT_REPORT`" msgstr "`PERRY_OPT_REPORT`" -#: src/cli/flags.md:442 +#: src/cli/flags.md:446 msgid "" "`1`/`text` or `json` — same as `--opt-report[=json]`, for driving the report " "from an environment where adding a flag is awkward" @@ -70890,7 +71610,7 @@ msgstr "" "Berichts aus einer Umgebung, in der das Hinzufügen einer Flagge unangenehm " "ist" -#: src/cli/flags.md:444 +#: src/cli/flags.md:448 msgid "" "The native-stack GC root-pressure report has **no** environment spelling: " "use `--statepoint-report[=json]`. The `PERRY_STATEPOINT_REPORT` variable is " @@ -70905,15 +71625,15 @@ msgstr "" "ein fünfter GC-env-Knopf ohne CI-Arm und wurde unter CLAUDE.mds GC-Knopf-" "Kill-Richtlinie gelöscht." -#: src/cli/flags.md:450 +#: src/cli/flags.md:454 msgid "Configuration Files" msgstr "Konfigurationsdateien" -#: src/cli/flags.md:452 +#: src/cli/flags.md:456 msgid "perry.toml (project)" msgstr "perry.toml (Projekt)" -#: src/cli/flags.md:454 +#: src/cli/flags.md:458 msgid "" "```toml\n" "[project]\n" @@ -70993,11 +71713,11 @@ msgstr "" "category = \"Development\"\n" "```" -#: src/cli/flags.md:492 +#: src/cli/flags.md:496 msgid "~/.perry/config.toml (global)" msgstr "~/.perry/config.toml (global)" -#: src/cli/flags.md:494 +#: src/cli/flags.md:498 msgid "" "```toml\n" "[apple]\n" @@ -71019,74 +71739,74 @@ msgstr "" "key_alias = \"my-key\"\n" "```" -#: src/cli/flags.md:507 +#: src/cli/flags.md:511 #, fuzzy msgid "# Simple CLI program\n" msgstr "# Einfaches CLI-Programm" -#: src/cli/flags.md:509 +#: src/cli/flags.md:513 #, fuzzy msgid "# iOS app for simulator\n" msgstr "# iOS App für Simulator" -#: src/cli/flags.md:512 +#: src/cli/flags.md:516 #, fuzzy msgid "# visionOS app for simulator\n" msgstr "# visionOS App für Simulator" -#: src/cli/flags.md:515 +#: src/cli/flags.md:519 #, fuzzy msgid "# Web app (WASM with DOM bridge — alias: --target wasm)\n" msgstr "# Web-App (WASM mit DOM-Brücke — Alias: --target wasm)" -#: src/cli/flags.md:518 +#: src/cli/flags.md:522 #, fuzzy msgid "# Plugin shared library\n" msgstr "# Freigabebibliothek des Moduls" -#: src/cli/flags.md:521 +#: src/cli/flags.md:525 #, fuzzy msgid "# iOS widget with bundle ID\n" msgstr "# iOS Widget mit Bundle ID" -#: src/cli/flags.md:524 +#: src/cli/flags.md:528 #, fuzzy msgid "# Debug compilation\n" msgstr "# Debug-Compilation" -#: src/cli/flags.md:527 +#: src/cli/flags.md:531 #, fuzzy msgid "# Verbose compilation\n" msgstr "# Verbose Zusammenstellung" -#: src/cli/flags.md:530 +#: src/cli/flags.md:534 #, fuzzy msgid "# Type-checked compilation\n" msgstr "# Typgesteuerte Zusammenstellung" -#: src/cli/flags.md:533 +#: src/cli/flags.md:537 #, fuzzy msgid "# Raw WASM binary (no HTML wrapper)\n" msgstr "# Raw WASM binär (kein HTML-Wrapper)" -#: src/cli/flags.md:536 +#: src/cli/flags.md:540 #, fuzzy msgid "# Minified web output (compresses embedded JS bridge)\n" msgstr "# Minifizierte Webausgabe (komprimiert eingebettete JS-Brücke)" -#: src/cli/flags.md:543 +#: src/cli/flags.md:547 msgid "[Commands](commands.md) — All CLI commands" msgstr "[Befehle](commands.md) — Alle CLI-Befehle" -#: src/cli/flags.md:544 +#: src/cli/flags.md:548 msgid "[Platform Overview](../platforms/overview.md) — Platform targets" msgstr "[Plattform-Überblick](../platforms/overview.md) — Plattform-Targets" -#: src/cli/flags.md:546 +#: src/cli/flags.md:550 msgid "Typed-feedback profile replay" msgstr "" -#: src/cli/flags.md:548 +#: src/cli/flags.md:552 msgid "" "`--typed-feedback-profile ` supplies an **advisory** profile to native " "LLVM lowering. Default builds do not read a profile. The first supported " @@ -71096,13 +71816,13 @@ msgid "" "explained." msgstr "" -#: src/cli/flags.md:554 +#: src/cli/flags.md:558 msgid "" "Capture a workload, then replay it with the **same compiler executable, " "source, target and lowering options**:" msgstr "" -#: src/cli/flags.md:568 +#: src/cli/flags.md:572 msgid "" "The conversion utility is in the Perry source checkout. Pair the catalog " "with the trace from that exact capture build. It retains only observed " @@ -71113,120 +71833,120 @@ msgid "" "normal binary cannot restore omitted instrumentation." msgstr "" -#: src/cli/flags.md:575 +#: src/cli/flags.md:579 msgid "The JSON replay schema is version 1:" msgstr "" -#: src/cli/flags.md:579 +#: src/cli/flags.md:583 #, fuzzy msgid "\"schema_version\"" msgstr "`schemaVersion`" -#: src/cli/flags.md:580 +#: src/cli/flags.md:584 #, fuzzy msgid "\"compiler\"" msgstr "compile" -#: src/cli/flags.md:580 +#: src/cli/flags.md:584 msgid "\"sha256:\"" msgstr "" -#: src/cli/flags.md:581 src/cli/perry-audit-sbom.md:48 +#: src/cli/flags.md:585 src/cli/perry-audit-sbom.md:48 msgid "\"modules\"" msgstr "\"Module\"" -#: src/cli/flags.md:582 +#: src/cli/flags.md:586 #, fuzzy msgid "\"identity\"" msgstr "Identität des Caches" -#: src/cli/flags.md:583 +#: src/cli/flags.md:587 #, fuzzy msgid "\"module\"" msgstr "\"Module\"" -#: src/cli/flags.md:583 +#: src/cli/flags.md:587 msgid "\"app.ts\"" msgstr "" -#: src/cli/flags.md:584 +#: src/cli/flags.md:588 #, fuzzy msgid "\"source_hash\"" msgstr "\"Quelle\"" -#: src/cli/flags.md:584 +#: src/cli/flags.md:588 msgid "\"sha256:\"" msgstr "" -#: src/cli/flags.md:585 +#: src/cli/flags.md:589 #, fuzzy msgid "\"hir_hash\"" msgstr "\"snippet_hash\"" -#: src/cli/flags.md:585 +#: src/cli/flags.md:589 msgid "\"\"" msgstr "" -#: src/cli/flags.md:586 +#: src/cli/flags.md:590 #, fuzzy msgid "\"lowering_hash\"" msgstr "\"Lodash\"" -#: src/cli/flags.md:586 +#: src/cli/flags.md:590 msgid "\"\"" msgstr "" -#: src/cli/flags.md:587 +#: src/cli/flags.md:591 #, fuzzy msgid "\"target\"" msgstr "\"Ziele\"" -#: src/cli/flags.md:587 +#: src/cli/flags.md:591 msgid "\"x86_64-unknown-linux-gnu\"" msgstr "" -#: src/cli/flags.md:589 +#: src/cli/flags.md:593 msgid "\"sites\"" msgstr "" -#: src/cli/flags.md:590 +#: src/cli/flags.md:594 #, fuzzy msgid "\"site_id\"" msgstr "\"client_id\"" -#: src/cli/flags.md:591 +#: src/cli/flags.md:595 #, fuzzy msgid "\"function\"" msgstr "\"Funktionen\"" -#: src/cli/flags.md:591 +#: src/cli/flags.md:595 #, fuzzy msgid "\"perry_fn_app_ts__read\"" msgstr "\"libperry_appreview.a\"" -#: src/cli/flags.md:592 +#: src/cli/flags.md:596 #, fuzzy msgid "\"array_element\"" msgstr "\"Inkremente\"" -#: src/cli/flags.md:593 +#: src/cli/flags.md:597 #, fuzzy msgid "\"operation\"" msgstr "\"caption\"" -#: src/cli/flags.md:593 +#: src/cli/flags.md:597 msgid "\"array[index]\"" msgstr "" -#: src/cli/flags.md:594 +#: src/cli/flags.md:598 msgid "\"observation_kind\"" msgstr "" -#: src/cli/flags.md:594 +#: src/cli/flags.md:598 msgid "\"numeric_array_element\"" msgstr "" -#: src/cli/flags.md:600 +#: src/cli/flags.md:604 msgid "" "Use generated identities, rather than copying this illustrative site ID. " "Site IDs identify deterministic lowering sites within an exact module/" @@ -71240,7 +71960,7 @@ msgid "" "replay is attempted." msgstr "" -#: src/cli/flags.md:610 +#: src/cli/flags.md:614 msgid "" "Malformed or unreadable explicit input is a compilation error naming the " "profile and how to create it. Well-formed schema/compiler/target/source/HIR/" @@ -71254,7 +71974,7 @@ msgid "" "lowering are deterministic for identical inputs." msgstr "" -#: src/cli/flags.md:620 +#: src/cli/flags.md:624 msgid "" "Profiles and TypeScript annotations never authorize an unchecked operation. " "Every replay-selected read rechecks the live receiver, array representation, " @@ -71267,11 +71987,11 @@ msgid "" "materialization record for every claimed profile selection." msgstr "" -#: src/cli/flags.md:630 +#: src/cli/flags.md:634 msgid "Unused re-export collection" msgstr "" -#: src/cli/flags.md:632 +#: src/cli/flags.md:636 msgid "" "Collection prunes unused `export { name } from`, `export * from`, and " "namespace re-export edges by default when the exporting file and every " @@ -71297,14 +72017,14 @@ msgid "" "deferred." msgstr "" -#: src/cli/flags.md:654 +#: src/cli/flags.md:658 msgid "" "Set `PERRY_NO_REEXPORT_PRUNE=1` to disable this collection pass for an A/B " "build. The compile summary reports unique omitted modules in the proven " "static dependency trees, excluding modules retained by another importer." msgstr "" -#: src/cli/flags.md:658 +#: src/cli/flags.md:662 msgid "" "Set `PERRY_COLLECT_ONLY=1` to stop after collection and write `/" "audit.json` and `module-graph.json` (paths, eager/deferred initialization, " @@ -71313,6 +72033,185 @@ msgid "" "checks. For example:" msgstr "" +#: src/cli/flags.md:673 +msgid "Linux hot text, including the Rust runtime" +msgstr "" + +#: src/cli/flags.md:675 +msgid "" +"Ordering changes layout only: every unlisted function remains available at " +"the same optimization level. Normal builds without an order keep the " +"original link arguments and startup code." +msgstr "" + +#: src/cli/flags.md:679 +msgid "" +"For a hot runtime profile, compile with `PERRY_KEEP_SYMBOLS=1`, then run " +"`scripts/record_function_order.py -o app.order -- ./app representative-" +"args`. The companion recorder samples the whole executable with Linux perf " +"and emits raw ELF names, including Rust runtime and stdlib archive " +"functions. Each sampled code body includes all of its symbol aliases, so a " +"folded Rust function still selects its canonical input section. Aliases stay " +"adjacent and the byte estimate counts each existing body once; no function " +"copies are introduced. The default coverage is 90% of executable samples; " +"use `--coverage` to choose another fraction. Shared-library code is " +"excluded. The existing `--record-function-order` build still records exact " +"generated first-call order with `PERRY_FUNCTION_ORDER_OUT`; its binary can " +"also be sampled by the companion, but a plain symbol-preserving binary " +"avoids instrumentation in the sample run." +msgstr "" + +#: src/cli/flags.md:692 +msgid "" +"Apply either list with `--function-order app.order`. On Linux the linker " +"places listed generated and Rust function sections together at the beginning " +"of text, retains ordinary ELF alignment and backs only complete aligned 2 " +"MiB pages inside the selected prefix after PIE relocation. Partial boundary " +"pages retain their original file mapping. No padding is inserted between " +"selected and unlisted code; rodata, RELRO and writable LOADs keep ordinary " +"page alignment. A prefix smaller than 2 MiB returns before policy reads, " +"copying or collapse. For eligible pages, startup tries file-backed " +"`MADV_COLLAPSE`; if unavailable it prepares an anonymous executable copy and " +"moves it into place. The additional anonymous memory is bounded by complete " +"selected pages, rather than total text size. qb6 lacks " +"`CONFIG_READ_ONLY_THP_FOR_FS`, so file collapse returns `EINVAL` there and " +"the anonymous fallback is required for eligible prefixes. System or process " +"THP disablement skips the operation. Linux kernels without collapse support " +"can still allocate THP via `MADV_HUGEPAGE`. On other targets there is no " +"huge-page startup call. Unknown names remain harmless; ELF linker " +"metacharacters are rejected." +msgstr "" + +#: src/cli/debugging.md:1 +msgid "Source-level Debugging (`--debug-symbols`)" +msgstr "" + +#: src/cli/debugging.md:3 +msgid "" +"`perry compile --debug-symbols` (or `PERRY_DEBUG_SYMBOLS=1`) emits a DWARF " +"**line table** that maps the generated machine code back to lines of your " +"TypeScript source. Any DWARF debugger — lldb (Xcode, VS Code's [CodeLLDB]" +"(https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)), " +"gdb — can then stop at `file.ts:line` breakpoints and show where a program " +"is in the TypeScript source when it stops or crashes." +msgstr "" + +#: src/cli/debugging.md:17 +msgid "" +"On macOS the compiler also runs `dsymutil`, writing `app.dSYM` next to the " +"binary. Apple's linker does not copy debug info into the executable, and the " +"intermediate objects it would otherwise point at are deleted after linking, " +"so keep the `.dSYM` beside the binary (lldb finds it there by UUID)." +msgstr "" + +#: src/cli/debugging.md:22 +msgid "" +"On Windows (MSVC targets) the same line information is emitted as CodeView " +"into the PDB instead of DWARF. This path is not validated on Windows yet." +msgstr "" + +#: src/cli/debugging.md:25 +#, fuzzy +msgid "Xcode" +msgstr "\"Code\"" + +#: src/cli/debugging.md:27 +msgid "" +"Add a build rule (or a Run Script phase) that compiles your `.ts` with `--" +"debug-symbols` into the product the scheme runs, e.g." +msgstr "" + +#: src/cli/debugging.md:31 +msgid "\"$SCRIPT_INPUT_FILE\"" +msgstr "" + +#: src/cli/debugging.md:31 +msgid "\"$BUILT_PRODUCTS_DIR/app\"" +msgstr "" + +#: src/cli/debugging.md:34 +msgid "" +"Open the `.ts` file in Xcode and click in the gutter to set breakpoints." +msgstr "" + +#: src/cli/debugging.md:36 +msgid "VS Code (CodeLLDB)" +msgstr "" + +#: src/cli/debugging.md:40 +msgid "\"lldb\"" +msgstr "" + +#: src/cli/debugging.md:41 +#, fuzzy +msgid "\"request\"" +msgstr "pull_request" + +#: src/cli/debugging.md:41 +msgid "\"launch\"" +msgstr "" + +#: src/cli/debugging.md:42 +msgid "\"Debug Perry binary\"" +msgstr "" + +#: src/cli/debugging.md:43 +#, fuzzy +msgid "\"program\"" +msgstr "Programm" + +#: src/cli/debugging.md:43 +msgid "\"${workspaceFolder}/app\"" +msgstr "" + +#: src/cli/debugging.md:44 +msgid "\"preLaunchTask\"" +msgstr "" + +#: src/cli/debugging.md:44 +#, fuzzy +msgid "\"perry: compile --debug-symbols\"" +msgstr "`--debug-symbols`" + +#: src/cli/debugging.md:48 +msgid "Breakpoints set in the `.ts` editor bind once the binary is loaded." +msgstr "" + +#: src/cli/debugging.md:50 +#, fuzzy +msgid "What is and is not covered" +msgstr "Was nicht funktioniert" + +#: src/cli/debugging.md:52 +msgid "This is a first slice — **lines and function frames only**:" +msgstr "" + +#: src/cli/debugging.md:54 +msgid "" +"Lines are recorded where an expression carries a source position — calls, " +"`new`, and property reads. A line holding only arithmetic on locals has no " +"code of its own in the table; debuggers slide a breakpoint on it to the next " +"line that does." +msgstr "" + +#: src/cli/debugging.md:58 +msgid "" +"**Variables cannot be inspected** yet (no DWARF variable/type info). " +"Stepping and backtraces work; `frame variable` shows nothing useful." +msgstr "" + +#: src/cli/debugging.md:60 +msgid "" +"Function frames are named by their generated symbol " +"(`perry_fn___`)." +msgstr "" + +#: src/cli/debugging.md:61 +msgid "" +"The optimizer still runs, so stepping can jump between lines the way it does " +"in any optimized native build." +msgstr "" + #: src/cli/cache-dir.md:1 msgid "Cache directory" msgstr "Verzeichnis verwalten" @@ -71606,14 +72505,14 @@ msgstr "" #: src/cli/fast-math.md:55 msgid "" -"The same setting is available through `PERRY_FP_CONTRACT=off|on|fast` or `" -"\"perry\": { \"fpContract\": \"on\" }` in package.json. Explicit package, " +"The same setting is available through `PERRY_FP_CONTRACT=off|on|fast` or " +"`\"perry\": { \"fpContract\": \"on\" }` in package.json. Explicit package, " "env, or CLI `fpContract` values override the `--fast-math` implied default." msgstr "" -"Dieselbe Einstellung ist über `PERRY_FP_CONTRACT=off|on|fast` oder `\"perry" -"\": { \"fpContract\": \"on\" }` in package.json verfügbar. Explizite Paket-, " -"Umgebungsvariablen- oder CLI-`fpContract`-Werte überschreiben den durch `--" -"fast-math` impliziten Standardwert." +"Dieselbe Einstellung ist über `PERRY_FP_CONTRACT=off|on|fast` oder " +"`\"perry\": { \"fpContract\": \"on\" }` in package.json verfügbar. Explizite " +"Paket-, Umgebungsvariablen- oder CLI-`fpContract`-Werte überschreiben den " +"durch `--fast-math` impliziten Standardwert." #: src/cli/fast-math.md:60 msgid "What it actually changes" @@ -71929,6 +72828,136 @@ msgstr "" "zufälligem FP-Code, was für echte Determinismus-Arbeit zu hoch ist — aber es " "ist eine Größenordnung besser als die ~30 % mit eingeschaltetem Flag." +#: src/cli/function-order.md:1 +msgid "Function Order (`--record-function-order`, `--function-order`)" +msgstr "" + +#: src/cli/function-order.md:3 +msgid "" +"A compiled program's machine code is laid out in the order the compiler " +"emitted it, which has nothing to do with when the code runs. A large program " +"that runs a few thousand functions while it starts touches pages spread over " +"its whole text, and each first touch reads a whole chunk of the file into " +"memory. Laying out the functions that run first, together and in the order " +"they first run, keeps far less of the binary resident and needs fewer page " +"faults." +msgstr "" + +#: src/cli/function-order.md:11 +msgid "The order comes from one real run, in two steps." +msgstr "" + +#: src/cli/function-order.md:13 +#, fuzzy +msgid "1. Record" +msgstr "POD-Datensätze" + +#: src/cli/function-order.md:17 +msgid "app.fnorder" +msgstr "" + +#: src/cli/function-order.md:17 +#, fuzzy +msgid "# use the app as usual\n" +msgstr "# Assert die App ist immer noch gesund" + +#: src/cli/function-order.md:20 +msgid "" +"The recording build calls a small hook the first time each compiled function " +"runs, and the hook appends the function's name to the file named by " +"`PERRY_FUNCTION_ORDER_OUT`: one name per line, in first-execution order. " +"Each name is written as soon as the function first runs, so stopping the " +"program at any point (even with `kill -9`) keeps everything recorded up to " +"then. The file is appended to, so delete it before a fresh recording. " +"Without `PERRY_FUNCTION_ORDER_OUT` the recording build records nothing." +msgstr "" + +#: src/cli/function-order.md:28 +msgid "" +"Record the part of the program whose memory and start-up time matter: up to " +"the first screen for a CLI or TUI, or through a typical request for a " +"server. The recording build is a little slower; don't ship it." +msgstr "" + +#: src/cli/function-order.md:32 +#, fuzzy +msgid "2. Build with the list" +msgstr "Mit Geisterhand bauen" + +#: src/cli/function-order.md:38 +msgid "" +"The listed functions are placed first in the text, together, in list order. " +"Every other function keeps its usual place. The list only changes where code " +"sits, never what it does: names the program doesn't define are ignored and " +"missing names fall back to the usual order, so a list recorded from an older " +"version of the program is harmless. It just orders less." +msgstr "" + +#: src/cli/function-order.md:44 +msgid "" +"Normal builds carry no recording code; `--function-order` costs nothing at " +"run time on non-Linux targets. Ordered Linux executables make one bounded " +"backing call at startup: prefixes smaller than 2 MiB return immediately, and " +"only complete selected 2 MiB pages are eligible for huge-page backing. The " +"linker keeps ordinary ELF alignment and does not pad the selected prefix. " +"After PIE relocation, backing covers only complete aligned pages inside " +"selected code; partial boundary pages retain their original file mapping." +msgstr "" + +#: src/cli/function-order.md:54 +msgid "How the order is applied" +msgstr "" + +#: src/cli/function-order.md:56 +msgid "Linux (GNU ld, the default `cc`)" +msgstr "" + +#: src/cli/function-order.md:56 +msgid "" +"The linker script collects ranked generated sections and native runtime " +"function sections at the start of `.text`, with ordinary ELF alignment." +msgstr "" + +#: src/cli/function-order.md:57 +#, fuzzy +msgid "Linux/Android with lld" +msgstr "Android-Builds" + +#: src/cli/function-order.md:57 +msgid "The same sections plus `--symbol-ordering-file`." +msgstr "" + +#: src/cli/function-order.md:58 +#, fuzzy +msgid "macOS / iOS (ld64)" +msgstr "**macOS / iOS**" + +#: src/cli/function-order.md:58 +msgid "`-order_file` with the list (Mach-O names add the leading `_`)." +msgstr "" + +#: src/cli/function-order.md:59 +#, fuzzy +msgid "Windows, WebAssembly" +msgstr "WebAssembly" + +#: src/cli/function-order.md:59 +msgid "Not applied; the build is unchanged." +msgstr "" + +#: src/cli/function-order.md:61 +#, fuzzy +msgid "The list format" +msgstr "Die Form `.other`" + +#: src/cli/function-order.md:63 +msgid "" +"Plain text, one function symbol per line, as the recording build writes it. " +"Blank lines and lines starting with `#` are ignored; if a name appears " +"twice, its first position counts. You can edit the list by hand, for example " +"to merge two recordings." +msgstr "" + #: src/cli/dynamic-dispatch.md:1 msgid "Dynamic Stdlib Dispatch (`--lockdown`)" msgstr "Dynamischer Stdlib-Versand (`--lockdown`)" @@ -71956,8 +72985,9 @@ msgstr "" #: src/cli/dynamic-dispatch.md:11 msgid "" "is the standard string-based obfuscation pattern used by malicious npm " -"packages: `process[\"bind\" + \"ing\"](\"dns\")`, `globalThis[atob(\"ZXZhbA==" -"\")]()`, `fs[methodName]()` where `methodName` is computed at runtime." +"packages: `process[\"bind\" + \"ing\"](\"dns\")`, " +"`globalThis[atob(\"ZXZhbA==\")]()`, `fs[methodName]()` where `methodName` is " +"computed at runtime." msgstr "" "ist das Standard-String-basierte Verschleierungsmuster, das von bösartigen " "npm-Paketen verwendet wird: `process[\"bind\" + \"ing\"](\"dns\")`, " @@ -72253,14 +73283,14 @@ msgstr "" #: src/cli/dynamic-dispatch.md:143 msgid "" "See [`#503`](https://github.com/PerryTS/perry/issues/503) for design " -"discussion and the broader supply-chain hardening series (\\[`#495`–`#506`" -"\\] (https://github.com/PerryTS/perry/issues?q=is%3Aissue+label%3Aenhancement" -"+security))." +"discussion and the broader supply-chain hardening series (\\[`#495`–" +"`#506`\\] (https://github.com/PerryTS/perry/issues?" +"q=is%3Aissue+label%3Aenhancement+security))." msgstr "" "Siehe [`#503`](https://github.com/PerryTS/perry/issues/503) für die Design-" "Diskussion und die umfassendere Supply-Chain-Hardening-Serie (\\[`#495`–" -"`#506`\\] (https://github.com/PerryTS/perry/issues?q=is%3Aissue+label" -"%3Aenhancement+security))." +"`#506`\\] (https://github.com/PerryTS/perry/issues?" +"q=is%3Aissue+label%3Aenhancement+security))." #: src/cli/allow-js-runtime.md:1 msgid "JS Runtime Opt-In (`perry.allowJsRuntime`)" @@ -73194,12 +74224,12 @@ msgstr "Zusammenspiel mit der übrigen Sicherheitsreihe" #: src/cli/lockdown.md:65 msgid "" "Lockdown is the umbrella mode for the wider supply-chain hardening series " -"([`#495`–`#506`](https://github.com/PerryTS/perry/issues?q=is%3Aissue+label" -"%3Aenhancement+security)):" +"([`#495`–`#506`](https://github.com/PerryTS/perry/issues?" +"q=is%3Aissue+label%3Aenhancement+security)):" msgstr "" "Lockdown ist der übergeordnete Modus für die umfassende Supply-Chain-" -"Härtungsreihe ([`#495`–`#506`](https://github.com/PerryTS/perry/issues?q=is" -"%3Aissue+label%3Aenhancement+security)):" +"Härtungsreihe ([`#495`–`#506`](https://github.com/PerryTS/perry/issues?" +"q=is%3Aissue+label%3Aenhancement+security)):" #: src/cli/lockdown.md:68 msgid "" @@ -73619,8 +74649,8 @@ msgstr "\"*\"" #: src/cli/capabilities.md:39 msgid "" -"Keys are exact npm package names (`@scope/pkg` accepted) or the universal `" -"\"*\"` default." +"Keys are exact npm package names (`@scope/pkg` accepted) or the universal " +"`\"*\"` default." msgstr "" "Schlüssel sind exakte npm-Paketnamen (`@scope/pkg` wird akzeptiert) oder der " "universelle `\"*\"`-Standard." @@ -74744,9 +75774,9 @@ msgid "" "machine crashes with SIGILL on older x86-64 CPUs. Equivalent to `--march` / " "`PERRY_TARGET_CPU`." msgstr "" -"CPU-Basiswert für den generierten Maschinencode: ein LLVM-CPU-Name (`" -"\"x86-64-v2\"`, `\"x86-64-v3\"`, `\"znver2\"`, `\"apple-m1\"`, ...), `" -"\"native\"` (Einstimmung auf den kompletten Befehlssatz des Baumaschinens) " +"CPU-Basiswert für den generierten Maschinencode: ein LLVM-CPU-Name " +"(`\"x86-64-v2\"`, `\"x86-64-v3\"`, `\"znver2\"`, `\"apple-m1\"`, ...), " +"`\"native\"` (Einstimmung auf den kompletten Befehlssatz des Baumaschinens) " "oder `\"generic\"` (die portable Basiswertlinie der Zielarchitektur). Pinen " "Sie dies, wenn der Binär auf anderen Rechnern als der Build-Box läuft – ein " "unpinned host-native Build auf einem AVX-512 Rechner stürzt mit SIGILL auf " @@ -74763,11 +75793,11 @@ msgstr "bool" #: src/cli/perry-toml.md:160 msgid "" -"Boolean shorthand for `march`: `true` → `\"native\"`, `false` → `\"generic" -"\"`. Ignored when `march` is set." +"Boolean shorthand for `march`: `true` → `\"native\"`, `false` → " +"`\"generic\"`. Ignored when `march` is set." msgstr "" -"Boolesche Kurzhand für `march`: `true` → `\"native\"`, `false` → `\"generic" -"\"`. Ignoriert, wenn `march` gesetzt ist." +"Boolesche Kurzhand für `march`: `true` → `\"native\"`, `false` → " +"`\"generic\"`. Ignoriert, wenn `march` gesetzt ist." #: src/cli/perry-toml.md:162 msgid "" @@ -74917,8 +75947,8 @@ msgid "" "Separate `.p12` certificate for notarization (only used with `distribute = " "\"both\"`)" msgstr "" -"Separates `.p12`-Zertifikat für Notarisierung (nur mit `distribute = \"both" -"\"` verwendet)" +"Separates `.p12`-Zertifikat für Notarisierung (nur mit `distribute = " +"\"both\"` verwendet)" #: src/cli/perry-toml.md:193 msgid "`notarize_signing_identity`" @@ -75470,8 +76500,8 @@ msgstr "`permissions`" #: src/cli/perry-toml.md:340 msgid "" -"Android permissions (e.g., `[\"INTERNET\", \"CAMERA\", \"ACCESS_FINE_LOCATION" -"\"]`)" +"Android permissions (e.g., `[\"INTERNET\", \"CAMERA\", " +"\"ACCESS_FINE_LOCATION\"]`)" msgstr "" "Android-Berechtigungen (z. B. `[\"INTERNET\", \"CAMERA\", " "\"ACCESS_FINE_LOCATION\"]`)" @@ -75527,11 +76557,11 @@ msgstr "Paketformat: `\"appimage\"`, `\"deb\"` oder `\"rpm\"`" #: src/cli/perry-toml.md:356 msgid "" -"Desktop application category (e.g., `\"Development\"`, `\"Utility\"`, `\"Game" -"\"`)" +"Desktop application category (e.g., `\"Development\"`, `\"Utility\"`, " +"`\"Game\"`)" msgstr "" -"Desktop-Anwendungs-Kategorie (z. B. `\"Development\"`, `\"Utility\"`, `\"Game" -"\"`)" +"Desktop-Anwendungs-Kategorie (z. B. `\"Development\"`, `\"Utility\"`, " +"`\"Game\"`)" #: src/cli/perry-toml.md:357 msgid "Application description for package metadata" @@ -75721,8 +76751,8 @@ msgid "" "this threshold. Values: `\"A\"`, `\"A-\"`, `\"B\"`, `\"C\"`, `\"D\"`, `\"F\"`" msgstr "" "Minimal akzeptable Audit-Note. Der Build schlägt fehl, wenn die tatsächliche " -"Note unter diesem Schwellenwert liegt. Werte: `\"A\"`, `\"A-\"`, `\"B\"`, `" -"\"C\"`, `\"D\"`, `\"F\"`" +"Note unter diesem Schwellenwert liegt. Werte: `\"A\"`, `\"A-\"`, `\"B\"`, " +"`\"C\"`, `\"D\"`, `\"F\"`" #: src/cli/perry-toml.md:417 msgid "`severity`" @@ -75734,11 +76764,11 @@ msgstr "`\"all\"`" #: src/cli/perry-toml.md:417 msgid "" -"Filter findings by severity: `\"all\"`, `\"critical\"`, `\"high\"`, `\"medium" -"\"`, `\"low\"`" +"Filter findings by severity: `\"all\"`, `\"critical\"`, `\"high\"`, " +"`\"medium\"`, `\"low\"`" msgstr "" -"Findings nach Schweregrad filtern: `\"all\"`, `\"critical\"`, `\"high\"`, `" -"\"medium\"`, `\"low\"`" +"Findings nach Schweregrad filtern: `\"all\"`, `\"critical\"`, `\"high\"`, " +"`\"medium\"`, `\"low\"`" #: src/cli/perry-toml.md:418 msgid "`ignore`" @@ -77583,8 +78613,8 @@ msgid "" "`recordEmbeddedResponse` reads the body according to your configured " "`source`, so a registry answering a `gh-releases` request is rejected rather " "than read as version `\"\"`. A version that does not parse is also rejected " -"— one malformed answer would otherwise become a permanent \"update available" -"\" your users cannot dismiss." +"— one malformed answer would otherwise become a permanent \"update " +"available\" your users cannot dismiss." msgstr "" "`recordEmbeddedResponse` liest den Körper nach Ihrem konfigurierten " "`source`, so dass eine Registry, die eine `gh-releases`-Anfrage beantwortet, " @@ -77606,9 +78636,9 @@ msgid "" "Perry sends no telemetry unless you accept the first-run prompt (or " "explicitly set `telemetry.enabled = true` in `~/.perry/config.toml`). This " "setting is the master consent gate for every telemetry channel. If it is " -"false or missing, nothing is sent, even when `compatibility_reports = \"on" -"\"`. The environment overrides `PERRY_NO_TELEMETRY=1` and `CI=true` always " -"win as well." +"false or missing, nothing is sent, even when `compatibility_reports = " +"\"on\"`. The environment overrides `PERRY_NO_TELEMETRY=1` and `CI=true` " +"always win as well." msgstr "" #: src/cli/telemetry.md:9 @@ -78423,7 +79453,7 @@ msgstr "" "runtime-genaue Helper-Barriers zur Laufzeit für Benchmark-/Debug-Bisection. " "Nicht gesetzt, `=1`, `=on` und `=true` halten Barriers aktiviert." -#: src/internals/memory-model.md:174 src/internals/garbage-collector.md:332 +#: src/internals/memory-model.md:174 src/internals/garbage-collector.md:413 msgid "`PERRY_GC_DIAG=1`" msgstr "`PERRY_GC_DIAG=1`" @@ -78851,299 +79881,2187 @@ msgstr "" "Speicherdruck gezählt, so Überschrift RSS-Zahlen überschreiben, was der " "Prozess tatsächlich unter Druck halten würde." -#: src/internals/memory-model.md:294 -msgid "" -"**`__DATA` dirty is not the inline caches any more.** Every property-access " -"site used to own a 96-byte `[12 x i64]` cache global — 25 MB of `__bss` on a " -"Claude Code build, 18.7 MB of it dirty at idle because a page is dirtied by " -"the first cache touched on it (#9708). A site now owns an 8-byte pointer " -"**slot** (`@perry_ic_N = private global ptr null`); the cache words are " -"allocated from a runtime arena on the site's first _priming_ miss and " -"published into the slot, so an unexecuted site costs its zero-filled slot " -"and nothing resident. The arena is one row of `PERRY_GC_CENSUS`'s " -"`side_tables` (`ic.lazy_caches`: resolved sites, arena bytes); a program " -"that reports `0` there executed no property site that could prime." +#: src/internals/memory-model.md:294 +msgid "" +"**`__DATA` dirty is not the inline caches any more.** Every property-access " +"site used to own a 96-byte `[12 x i64]` cache global — 25 MB of `__bss` on a " +"Claude Code build, 18.7 MB of it dirty at idle because a page is dirtied by " +"the first cache touched on it (#9708). A site now owns an 8-byte pointer " +"**slot** (`@perry_ic_N = private global ptr null`); the cache words are " +"allocated from a runtime arena on the site's first _priming_ miss and " +"published into the slot, so an unexecuted site costs its zero-filled slot " +"and nothing resident. The arena is one row of `PERRY_GC_CENSUS`'s " +"`side_tables` (`ic.lazy_caches`: resolved sites, arena bytes); a program " +"that reports `0` there executed no property site that could prime." +msgstr "" + +#: src/internals/memory-model.md:305 +msgid "Source map" +msgstr "Quellzuordnung" + +#: src/internals/memory-model.md:307 +msgid "" +"Paths, not line numbers: a line number is a claim nothing re-derives, and " +"every row of this table once pointed into a `gc.rs` that no longer exists." +msgstr "" +"Pfade, nicht Zeilennummern: Eine Zeilennummer ist ein Anspruch, der nichts " +"wiedergibt, und jede Zeile dieser Tabelle hat einmal in eine `gc.rs` " +"gezeigt, die nicht mehr existiert." + +#: src/internals/memory-model.md:310 +msgid "Topic" +msgstr "Thema" + +#: src/internals/memory-model.md:310 +msgid "Symbol to look for" +msgstr "Symbol für die Suche nach" + +#: src/internals/memory-model.md:312 +msgid "NaN-boxing tags" +msgstr "NaN-Box-Tags" + +#: src/internals/memory-model.md:312 +msgid "`crates/perry-runtime/src/value/tags.rs`" +msgstr "`crates/perry-runtime/src/value/tags.rs`" + +#: src/internals/memory-model.md:312 +msgid "`POINTER_TAG`, `STRING_TAG`" +msgstr "`POINTER_TAG`, `STRING_TAG`" + +#: src/internals/memory-model.md:313 +msgid "`GcHeader`, type/flag constants" +msgstr "`GcHeader`, Typ-/Flag-Konstanten" + +#: src/internals/memory-model.md:313 +msgid "`crates/perry-runtime/src/gc/types.rs`" +msgstr "`crates/perry-runtime/src/gc/types.rs`" + +#: src/internals/memory-model.md:313 +msgid "`GcHeader`" +msgstr "`GcHeader`" + +#: src/internals/memory-model.md:314 +msgid "`gc_malloc`" +msgstr "`gc_malloc`" + +#: src/internals/memory-model.md:314 +msgid "`crates/perry-runtime/src/gc/malloc.rs`" +msgstr "`crates/perry-runtime/src/gc/malloc.rs`" + +#: src/internals/memory-model.md:315 +msgid "Shadow frames (fallback root lowering)" +msgstr "Schatten-Rahmen (Fallback-Root-Absenkung)" + +#: src/internals/memory-model.md:315 +msgid "`crates/perry-runtime/src/gc/roots/shadow_stack.rs`" +msgstr "`crates/perry-runtime/src/gc/roots/shadow_stack.rs`" + +#: src/internals/memory-model.md:315 +msgid "`js_shadow_frame_push`" +msgstr "`js_shadow_frame_push`" + +#: src/internals/memory-model.md:316 +msgid "Registered root scanners" +msgstr "Registrierte Root-Scanner" + +#: src/internals/memory-model.md:316 +msgid "`crates/perry-runtime/src/gc/roots.rs`" +msgstr "`crates/perry-runtime/src/gc/roots.rs`" + +#: src/internals/memory-model.md:316 +msgid "`gc_register_mutable_root_scanner`" +msgstr "`gc_register_mutable_root_scanner`" + +#: src/internals/memory-model.md:317 +msgid "Copying minor" +msgstr "Minderjährige kopieren" + +#: src/internals/memory-model.md:317 +msgid "`crates/perry-runtime/src/gc/copying.rs`" +msgstr "`crates/perry-runtime/src/gc/copying.rs`" + +#: src/internals/memory-model.md:317 +msgid "`move_young`" +msgstr "`move_young`" + +#: src/internals/memory-model.md:318 +msgid "Whole-block in-place promotion" +msgstr "Ganzer Block an Ort und Stelle Beförderung" + +#: src/internals/memory-model.md:318 +msgid "`crates/perry-runtime/src/arena/promote.rs`" +msgstr "`crates/perry-runtime/src/arena/promote.rs`" + +#: src/internals/memory-model.md:318 +msgid "`finish_in_place_promotion`" +msgstr "`finish_in_place_promotion`" + +#: src/internals/memory-model.md:319 +msgid "Promotion policy" +msgstr "Absatzförderungspolitik" + +#: src/internals/memory-model.md:319 +msgid "`crates/perry-runtime/src/gc/promote_in_place.rs`" +msgstr "`crates/perry-runtime/src/gc/promote_in_place.rs`" + +#: src/internals/memory-model.md:319 +msgid "`PROMOTE_SURVIVAL_THRESHOLD_PERMILLE`" +msgstr "`PROMOTE_SURVIVAL_THRESHOLD_PERMILLE`" + +#: src/internals/memory-model.md:320 +msgid "Adaptive tenuring threshold" +msgstr "Anpassungsschwelle" + +#: src/internals/memory-model.md:320 +msgid "`crates/perry-runtime/src/gc/tenuring.rs`" +msgstr "`crates/perry-runtime/src/gc/tenuring.rs`" + +#: src/internals/memory-model.md:320 +msgid "`tenuring_survivals`" +msgstr "`tenuring_survivals`" + +#: src/internals/memory-model.md:321 +msgid "Write barriers" +msgstr "Schreibbarrieren" + +#: src/internals/memory-model.md:321 +msgid "`crates/perry-runtime/src/gc/barrier_store.rs`" +msgstr "`crates/perry-runtime/src/gc/barrier_store.rs`" + +#: src/internals/memory-model.md:321 +msgid "`runtime_write_barrier_slot`" +msgstr "`runtime_write_barrier_slot`" + +#: src/internals/memory-model.md:322 +msgid "Explicit pinning" +msgstr "Explizites Anstecken" + +#: src/internals/memory-model.md:322 +msgid "`crates/perry-runtime/src/gc/pin.rs`" +msgstr "`crates/perry-runtime/src/gc/pin.rs`" + +#: src/internals/memory-model.md:322 +msgid "`pin_object`" +msgstr "`pin_object`" + +#: src/internals/memory-model.md:323 +msgid "Conservative-pin predicate" +msgstr "Prädikat der Konservativen" + +#: src/internals/memory-model.md:323 +msgid "`crates/perry-runtime/src/gc/verify.rs`" +msgstr "`crates/perry-runtime/src/gc/verify.rs`" + +#: src/internals/memory-model.md:323 +msgid "`is_conservatively_pinned`" +msgstr "`is_conservatively_pinned`" + +#: src/internals/memory-model.md:324 +msgid "Collection triggers and pacing" +msgstr "Sammelauslöser und Tempos" + +#: src/internals/memory-model.md:324 +msgid "`crates/perry-runtime/src/gc/policy.rs`" +msgstr "`crates/perry-runtime/src/gc/policy.rs`" + +#: src/internals/memory-model.md:324 +msgid "`gc_check_trigger`" +msgstr "`gc_check_trigger`" + +#: src/internals/memory-model.md:325 +msgid "Current operations page" +msgstr "Seite der laufenden Operationen" + +#: src/internals/memory-model.md:325 +msgid "`docs/src/internals/garbage-collector.md`" +msgstr "`docs/src/internals/garbage-collector.md`" + +#: src/internals/memory-model.md:326 +msgid "Design plan (historical)" +msgstr "Entwurfsplan (historisch)" + +#: src/internals/memory-model.md:326 +msgid "`docs/generational-gc-plan.md`" +msgstr "`docs/generational-gc-plan.md`" + +#: src/internals/memory-model.md:340 +msgid "" +"Those rows are not decorative: each is bound to a `gc-symbol` marker above " +"and re-derived by `scripts/check_gc_doc_claims.py`, so a rename that leaves " +"this table behind fails `lint` instead of quietly pointing readers at " +"nothing." +msgstr "" +"Diese Reihen sind nicht dekorativ: jede wird an einen `gc-symbol`-Marker " +"oben gebunden und von `scripts/check_gc_doc_claims.py` neu abgeleitet, so " +"dass eine Umbenennung, die diese Tabelle hinter sich lässt, `lint` " +"fehlschlägt, anstatt leise Leser auf nichts zu zeigen." + +#: src/internals/retained-function-source.md:3 +msgid "" +"Permanent compiled function infos can name independent 4 KiB raw-DEFLATE " +"frames in the retained-source section. `FN_SOURCE_BLOCKS`, together with " +"`FN_HAS_SOURCE`, describes this immutable representation. Each frame has two " +"little-endian `u32` lengths (compressed, decoded), followed by its payload. " +"Frames are adjacent; the next header is at `frame + 8 + compressed_len`." +msgstr "" + +#: src/internals/retained-function-source.md:9 +msgid "" +"The info directly owns the first frame's signed displacement from the info, " +"the offset within that decoded frame, and the exact source byte length. When " +"there is no versioned clone, these occupy the existing idle versioned " +"fields: `versioned_captures` is the source length and the mask's storage " +"holds an `i32` displacement followed by a `u32` decoded offset. Common infos " +"remain 64 bytes. A versioned clone instead licenses a 16-byte source tail " +"containing displacement, decoded offset, source length and padding. Name and " +"constructor tails follow that authoritative layout. Raw legacy info ranges " +"remain readable." +msgstr "" + +#: src/internals/retained-function-source.md:18 +msgid "" +"A source read decodes into call-local scratch storage, copies the requested " +"intersection, then follows adjacent headers if the range spans frames. The " +"last frame produces only the prefix through the requested range end; its " +"unneeded suffix is not inflated. Fully traversed frames still validate " +"stream completion and lengths. Frames are trusted compiler-owned image data. " +"No decoded block, decoder state or runtime lookup index survives the call. " +"Nested ranges share frames. Frame boundaries may split Unicode sequences; " +"byte slicing and assembly happen before the original range becomes a string. " +"Nothing normalizes, replaces or truncates the original source bytes." +msgstr "" + +#: src/internals/retained-function-source.md:28 +msgid "" +"A function whose own source is at most 512 bytes " +"(`RETAINED_SOURCE_RAW_MAX_BYTES`) is not framed: its info names a raw copy " +"in the ordinary retained-source blob, the legacy layout without " +"`FN_SOURCE_BLOCKS`. This is a fixed size rule on the function itself, not a " +"hot/cold split and not a parent-size rule; the bytes also stay inside any " +"longer parent's frames. It needs no runtime table or cache." +msgstr "" + +#: src/internals/retained-function-source.md:34 +msgid "" +"Classes, raw method/accessor bodies, runtime source overrides and unloadable " +"images keep their existing raw registration and ownership contracts. In " +"particular, module initialization does not eagerly decode retained source." +msgstr "" + +#: src/internals/retained-function-source.md:38 +#, fuzzy +msgid "Reflection census" +msgstr "Keine Reflexion" + +#: src/internals/retained-function-source.md:40 +msgid "" +"Set `PERRY_SOURCE_READ_COUNT=1` when running a program to report these " +"counters on stderr at natural exit or explicit `process.exit()`:" +msgstr "" + +#: src/internals/retained-function-source.md:43 +msgid "" +"`function_to_string`: ordinary closure source requests, including implicit " +"string coercion;" +msgstr "" + +#: src/internals/retained-function-source.md:45 +msgid "" +"`class_source`: class source requests, including default coercion and error " +"formatting;" +msgstr "" + +#: src/internals/retained-function-source.md:47 +msgid "" +"`retained_info`: requests actually served by a source-bearing function info;" +msgstr "" + +#: src/internals/retained-function-source.md:48 +msgid "" +"`framed`: the part of `retained_info` that decoded DEFLATE frames; the rest " +"read raw bytes (functions whose own source is at most 512 bytes);" +msgstr "" + +#: src/internals/retained-function-source.md:49 +msgid "" +"`class_error`: the subset of class requests used by readonly-static errors." +msgstr "" + +#: src/internals/retained-function-source.md:51 +msgid "" +"Class closures use the class counter rather than counting twice. Counters " +"overlap where an ordinary function request is served by its info. The census " +"is off by default, owns no source or GC pointers, and does not affect " +"emitted code or object-cache identity. If no source helper runs, no census " +"line is registered and all counts are zero. The environment setting is read " +"on the first source request and is fixed for that process's census." +msgstr "" + +#: src/internals/regexp-program-cache.md:3 +msgid "" +"JavaScript RegExp construction uses Perex directly. There is one engine; " +"lookbehind, backreferences, and other accepted patterns share the same " +"construction path. `perex_construct.rs` retains eager syntax checking, so " +"invalid patterns still throw at construction and the first search does not " +"inherit deferred compilation work." +msgstr "" + +#: src/internals/regexp-program-cache.md:9 +msgid "" +"`regex/perex_cache.rs` retains immutable programs by source plus canonical " +"flags. The first lookup uses the source `StringHeader` identity and reads no " +"pattern bytes. An identity miss hashes the original bytes, then verifies " +"exact equality within the hash bucket. Independently allocated equal strings " +"share a program. Flags remain part of both keys; canonical ordering makes " +"`ig` and `gi` equivalent. Every new RegExp still owns its original source/" +"flags and independent `lastIndex`. Retained source strings are marked shared " +"to prevent unique-string append from modifying the cached pattern or " +"OriginalSource." +msgstr "" + +#: src/internals/regexp-program-cache.md:18 +msgid "" +"The cache holds at most 512 entries and 32 MiB of source/program payload. " +"Least-recently-used entries are evicted individually. Programs above the " +"byte limit remain usable through their RegExp owner without cache retention. " +"The cache registers its scanner before publishing its first root, so " +"programs that never construct a RegExp add no cache scanner work. Source and " +"program slots are mutable GC roots; evacuation rewrites them and rebuilds " +"the source-identity index. Content hashes are address independent." +msgstr "" + +#: src/internals/regexp-program-cache.md:26 +msgid "" +"Perex's `ProgramWitness` lives beside the immutable words in each program GC " +"cell (upstream #10166/#10183). The first binding validates the words; " +"subsequent bindings use that witness in constant work, including bindings " +"from another RegExp sharing the cached program. Each operation still roots " +"its own program, so eviction, collection, and reentrant receiver " +"recompilation cannot invalidate an active search. No borrowed program slice " +"survives a safepoint. Scratch buffers remain operation-owned and charged to " +"the existing memory budget." +msgstr "" + +#: src/internals/regexp-program-cache.md:34 +msgid "" +"Compound split/replace/match operations retain program and subject bindings " +"in `perex_api::Reuse`, checking the current receiver and program cell before " +"reuse. Within a compound operation, the previous position is reused only " +"with the same subject binding. Across JavaScript calls, upstream's four-" +"entry scalar position table can reuse a non-ASCII string's cursor when its " +"concealed address, lengths and heap generation still agree. Heap changes or " +"in-place length changes invalidate that identity. The table does not retain " +"a string or program. Validated heap strings use the existing counted-subject " +"path." +msgstr "" + +#: src/internals/regexp-program-cache.md:43 +msgid "" +"The fast builtin dispatch guard contains only immutable ShapeIds, field " +"indices, and epochs, with no untraced GC address. It verifies the current " +"builtin `exec` value, the receiver's metadata, expando table, and prototype. " +"Empty-string replacement additionally verifies builtin flags getters and " +"`Symbol.replace`, and requires primitive strings and numeric `lastIndex`. " +"Observable overrides take the ordinary dispatch path. Admitted replacements " +"use full-subject UTF-16 spans and preserve global/sticky index updates and " +"Unicode empty-match advancement, without allocating exec result arrays." +msgstr "" + +#: src/internals/regexp-program-cache.md:52 +msgid "" +"`PERRY_REGEX_DIAG=1` reports compile and validation counts, identity/content " +"hits, bytes hashed, canonical dispatches, searches, and scratch allocation " +"and growth counts. Set it while compiling as well as while running: it is " +"served by perry-runtime's `hot-diag` feature, which an auto-optimized build " +"only links when the knob (or `PERRY_GC_INSTRUMENTS=1`) is set at compile " +"time, and a binary built without it aborts at startup rather than report " +"nothing. Diagnostics deliberately inspect source bytes for attribution; " +"measure timings with diagnostics disabled. Cache payload lives in traced GC " +"cells; the census separately reports native cache metadata as `regex." +"program_cache`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:3 +msgid "" +"Status: owned-storage and conditional-ephemeron implementation is complete; " +"performance acceptance is blocked by TypeScript cycles. See [implementation " +"validation](weakmap-owned-index-validation.md) for the fresh qb6 program " +"matrix, floors, GC counts, and THP-disabled check. Rebased onto " +"`68e41faa0f9145d8b8ab67ecb0cf414eaf13420b`, including c85c2db93 (#12105). " +"The coordinator authorized the redesign on 2026-10-06 and filed the " +"conditional tracing defect as #12087. The original design and diagnostic " +"baseline below were recorded against " +"`4c2e7fa2b53e8721ec01aa0d1a7a0921148ca6b4`; they are historical evidence, " +"not acceptance measurements for the implementation." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:14 +#, fuzzy +msgid "Implemented representation" +msgstr "Native Darstellung" + +#: src/internals/weakmap-owned-index-design.md:16 +msgid "" +"WeakMap and WeakSet constructors add their internal brand to the Shape's " +"private brand facts. A spare Shape flag summarizes those facts without " +"changing the Shape record or ordinary object header size. Transitions retain " +"the brand. The object owns a tagged `GC_TYPE_WEAK_STORAGE` edge through " +"`ObjectMeta.native_state`; empty maps allocate that metadata lazily." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:22 +msgid "" +"The storage cell holds key/value pairs, twice-capacity open-addressed bucket " +"offsets, and a reverse bucket offset per entry. The reverse offsets make " +"delete and budgeted weak clearing constant work after lookup. Empty entries " +"reuse their value word as a scalar free-list offset. No owner-address index, " +"last-key cache, or extra copies of key pointer bits survive outside the " +"cell. Growth discards the lookup view, roots all call arguments, reloads " +"after allocation, and publishes the replacement through the existing meta " +"barrier." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:30 +msgid "" +"Collectors discover the cell through its owner edge. Conditional closure " +"traces values only for independently live keys, including cross-map and " +"Proxy chains. The copying collector repairs authoritative pairs and rebuilds " +"buckets before returning to the mutator. Budgeted non-moving closure and " +"clearing charge entries individually. Weak pair publication maintains old to " +"young coverage without unconditionally shading copied keys or values. Mark " +"verification checks enabled values; rewrite and coverage verification " +"continue to inspect both words." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:39 +#, fuzzy +msgid "Measured baseline and verification" +msgstr "Audit & Verifizierung" + +#: src/internals/weakmap-owned-index-design.md:41 +msgid "" +"Fresh Linux release build: `perry`, `perry-runtime-static` and `perry-stdlib-" +"static`, in this lane's `target-main`. All 35,590 tracked source files " +"matched the local baseline before building and after the diagnostic test was " +"removed. Compiler and archive hashes are retained with the evidence. The " +"host is the shared Ryzen 7 7700X, Node 26.5.1 and Bun 1.3.14." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:47 +msgid "" +"These are **full-static diagnostic baselines**, compiled with " +"`PERRY_KEEP_SYMBOLS=1 --no-cache --no-auto-optimize`. This mode differs from " +"the auto-specialized baseline in LEVERS.md, especially in startup and RSS. " +"It is not an A/B gate for a proposed performance patch. The exact `import " +"{ Schema } from \"effect\"` source passes on this baseline, with `ok=20000`; " +"the direct-import substitute was unnecessary." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:54 +msgid "" +"Each main row is the median of ten runs, interleaved with ten runs of the " +"identical binary, ASLR disabled and CPU 2 pinned. Performance counters and " +"peak RSS are uninstrumented. GC counts beside RSS come from three separate " +"trace runs and were identical across those runs. CPU is perf task-clock in " +"milliseconds; **cycles**, not task-clock, are the owner's CPU gate axis." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:60 +#, fuzzy +msgid "Main instructions:u, M" +msgstr "Build-Anweisungen" + +#: src/internals/weakmap-owned-index-design.md:60 +msgid "Main cycles:u, M" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:60 +msgid "Main CPU, ms" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:60 +msgid "Main RSS, MiB" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:60 +#, fuzzy +msgid "Minor/full GC" +msgstr "Minor GC" + +#: src/internals/weakmap-owned-index-design.md:60 +#, fuzzy +msgid "Fix" +msgstr "fix" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "weakmap-get, 1M" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "831.579" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "282.587" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "61.11" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "24.473" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +#: src/internals/weakmap-owned-index-design.md:63 +#: src/internals/weakmap-owned-index-design.md:65 +#: src/internals/weakmap-owned-index-design.md:66 +#: src/internals/weakmap-owned-index-design.md:67 +#: src/internals/weakmap-owned-index-design.md:68 +#, fuzzy +msgid "0/0" +msgstr "500" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "weakmap-hit-pair, 1M" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "1625.579" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "554.027" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "116.97" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "24.340" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "Effect, exact source" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "29081.772" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "17622.809" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "3589.69" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "194.000" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "18/2" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:65 +#: src/internals/weakmap-owned-index-validation.md:79 +#: src/internals/weakmap-owned-index-validation.md:101 +#, fuzzy +msgid "hello" +msgstr "Shell" + +#: src/internals/weakmap-owned-index-design.md:65 +msgid "1.317" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:65 +msgid "2.574" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:65 +msgid "2.99" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:65 +msgid "14.547" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +#: src/internals/weakmap-owned-index-validation.md:80 +#: src/internals/weakmap-owned-index-validation.md:102 +msgid "07_object_create" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +msgid "33.112" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +msgid "21.591" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +msgid "7.67" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +msgid "26.996" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +#: src/internals/weakmap-owned-index-validation.md:81 +#: src/internals/weakmap-owned-index-validation.md:103 +msgid "09_method_calls" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +msgid "61.479" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +msgid "124.527" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +msgid "28.29" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +msgid "23.691" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:68 +#: src/internals/weakmap-owned-index-validation.md:82 +#: src/internals/weakmap-owned-index-validation.md:104 +#, fuzzy +msgid "14_closure" +msgstr "Closures" + +#: src/internals/weakmap-owned-index-design.md:68 +msgid "251.326" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:68 +msgid "156.094" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:68 +msgid "34.14" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:68 +msgid "14.660" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +#: src/internals/weakmap-owned-index-validation.md:83 +#: src/internals/weakmap-owned-index-validation.md:105 +msgid "bench_object_property" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +msgid "181.586" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +msgid "75.679" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +msgid "19.19" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +msgid "34.695" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +#, fuzzy +msgid "1/0" +msgstr "10" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "Zod" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "5359.568" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "3236.034" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "659.80" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "55.082" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "27/0" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:72 +msgid "" +"TypeScript, qs parse/stringify, commander and fastify are **unmeasured** in " +"this design fallback. The first TypeScript setup accidentally omitted the " +"captures harness's explicit `typescript` AOT setting, selected the native " +"shim and failed reading `ScriptTarget.ES2022`; that run is invalid, not a " +"TypeScript-source baseline failure. The explicit setting was restored; the " +"real-source TypeScript build was not run. The copied captures harness " +"contained no qs/commander/fastify drivers, and no replacement workload was " +"substituted. The full real-program gate remains required for implementation. " +"`bench_object_property.ts`, absent from this snapshot's benchmark directory, " +"was copied unchanged from the captures lane along with its Zod/TypeScript " +"drivers." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:84 +msgid "" +"Identical-binary floor/main median deltas exceeded +0.5% for Effect cycles " +"(+1.185%) and RSS (+0.600%), and hello cycles (+0.982%). Instruction deltas " +"were below 0.01% on every measured program. These controls expose host " +"noise; they do not expand the owner's tolerance or establish a passing gate." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:89 +msgid "" +"Three-run instruction slopes at 1M and 2M iterations are **830.0 per get** " +"and **1624.0 per has/get pair**. Node's get slope at 100M/200M is 122.9; " +"Bun's is 60.6. These include loop/key-selection/checksum scaffolding. Exact " +"Effect three-run references are Node 3727.945M user instructions, 773.44ms " +"CPU, 204.773MiB RSS, and Bun 3276.357M, 684.84ms, 158.598MiB. The full-" +"static Perry/Node instruction ratio is 7.80x; Perry/Bun is 8.88x." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:96 +msgid "" +"DWARF captures used `-F 1999 --call-graph dwarf,8192` for time and `-e " +"instructions:u -c 100003 --call-graph dwarf,8192` for instructions. No lost " +"samples were reported. Caller extraction uses `perf script --no-inline` to " +"avoid expensive addr2line expansion; sampled instruction weights are checked " +"against perf's reported event total. Inline attribution and truncated deep " +"stacks are not claimed as complete ancestry." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:103 +msgid "" +"The standalone instruction profile puts 28.92% in `js_array_length`, 22.22% " +"in `js_array_get_f64`, 18.63% in `js_weakmap_get` self and 17.83% in " +"`weakref::index::find` self. The get ancestry contains both " +"`js_array_get_f64 -> index::find -> js_weakmap_get` and the second " +"`js_array_get_f64 -> js_weakmap_get` extraction. Within exact Effect, these " +"three validated-array/index leaves account for 181.805M (`find`), 141.004M " +"(`array_get`) and 104.603M (`array_length`) sampled user instructions under " +"WeakMap calls. The memoizer ancestry is directly recovered:" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:123 +msgid "" +"All recovered WeakMap ancestry, including insertion/allocation descendants, " +"is 3.748% of sampled Effect instructions and 3.307% of time samples. This is " +"an inclusive observation, not an exclusive saving budget. Never interpret " +"LLVM-merged hash symbols literally without checking their callers." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:128 +#, fuzzy +msgid "Verification:" +msgstr "Lokale Benachrichtigung" + +#: src/internals/weakmap-owned-index-design.md:130 +msgid "" +"Pristine `cargo test --release -p perry-runtime -- --test-threads=1`: 5,118 " +"passed, five ignored; integration test passed; eight doctests ignored." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:132 +msgid "" +"Six of seven existing `*weak*.ts` files match Node stdout and exits. " +"`test_issue_2656_weakref_finalization_gc.ts` already differs on main: Perry " +"clears two WeakRefs while Node keeps them live. No runtime code was changed " +"in this lane, so no previously matching test was altered." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:136 +msgid "" +"The new diagnostic behavior matrix matches Node byte-for-byte: primitives, " +"registered/fresh/well-known symbols, delete/re-set, buffer, typed array, " +"URLSearchParams, Proxy identity, function/class keys, subclasses, borrowed " +"methods and forged/Proxy receiver brand rejection. Existing index tests " +"cover many keys and movement." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:141 +msgid "" +"The added Rust ephemeron witness **fails on baseline**, after its actual " +"copying-minor assertion passes: entry count is 1, expected 0. A separate C " +"fixture linked against the pristine archives independently reports " +"`holder_moved=1 control_dead=1 value_backedge_key_dead=0`; its trace copied " +"13 objects. The Rust witness was then removed and all source hashes " +"rechecked. The failing witness is retained as evidence, not committed as a " +"passing or ignored test." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:148 +msgid "" +"`cargo fmt --all -- --check` already fails on pristine main at `buffer/" +"view_tests.rs:262`. Node-version consistency passes. Codegen tests and GC " +"call-effect checks are inapplicable: no codegen, FFI signature or runtime " +"effect changed. Conflict-marker and patch whitespace checks are empty." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:154 +msgid "" +"Evidence and the proposed Rust/C witnesses are retained locally under `/" +"Users/amlug/projects/perry/secret-tests/scratchpad/codex-small/weakmap/`. " +"Raw perf captures and benchmark binaries remain under `/root/codex-lanes/cx-" +"weakmap/`. Build target directories are removed after collection, as " +"required by the lane brief." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:160 +#, fuzzy +msgid "Why the widened request needs a redesign" +msgstr "Warum die Anfrage Ihnen gehört" + +#: src/internals/weakmap-owned-index-design.md:162 +msgid "The current successful get path does the following:" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:164 +msgid "Validate the receiver through `weak_wrapper_class_id`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:165 +msgid "Root the receiver and key and obtain its entries array." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:166 +msgid "Read generic array length in `index::find`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:167 +msgid "Find the owner in `WEAK_COLLECTION_INDEXES`, a thread-local hash table." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:168 +msgid "Read generic array length again in `with_index`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:169 +msgid "Probe the per-owner key hash table." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:170 +msgid "Read the entry through `js_array_get_f64` and verify its key." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:171 +msgid "" +"Return its integer slot, then read that same entry through " +"`js_array_get_f64` again in `find_entry`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:173 +msgid "Run the weak read barriers for key and value." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:175 +msgid "" +"`has` repeats the same lookup and keeps the key barrier. An overwriting " +"`set` and a successful `delete` repeat the entry extraction too. Insertion " +"calls `find`, `take_free`, allocation and `inserted`; allocation can move " +"every relevant object and discard the index. A view valid before allocation " +"cannot be carried into the publication step." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:181 +msgid "" +"The duplicate loads are removable on a callback-free path. However, just " +"returning the validated entry pointer and bypassing generic array access " +"would retain the address-keyed owner registry in `weakref/index.rs`. That " +"does not satisfy the widened requirement that the collection own all of its " +"storage and object facts live in Shapes." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:187 +msgid "" +"The existing ordinary object header has no owned-index field. Subclasses " +"retain their own class IDs, use parent-class registry traversal for weak " +"branding, and find `__perry_wk_entries` through a potentially allocating by-" +"name property access. Native payloads are also not a drop-in replacement: " +"`native_payload.rs` and `docs/native-payload-pattern.md` forbid JS values, " +"NaN-boxed bits and GC pointers in `Box`. Nothing traces or rewrites those " +"contents. Moving the current raw key index there would invalidate its " +"relocation and address-reuse safety argument." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:196 +#, fuzzy +msgid "Proposed ownership" +msgstr "Arena-Eigentum" + +#: src/internals/weakmap-owned-index-design.md:198 +msgid "" +"The Shape must carry the actual internal collection brand, storage location " +"and entry layout. This is initialized by the builtin constructor or " +"`super()`, not inferred from names or a prototype chain. Preserve these " +"facts through own-property changes, dictionary transitions, representation " +"changes and `Object.setPrototypeOf`. Inheriting `WeakMap.prototype` alone " +"must never install the brand. A Proxy over a WeakMap does not acquire its " +"internal slots." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:205 +msgid "" +"Keep the user-visible object and its existing header layout. Add an owned, " +"GC-managed storage cell reachable through a dedicated internal edge. Decide " +"the exact attachment representation together with the Shape schema: an " +"internal slot must not become a writable user property or depend on a " +"reserved spelling. Do not add a word or allocation to ordinary objects. " +"`ObjectMeta.native_state` is a candidate attachment point, but using it " +"needs an explicit typed-storage contract and audit of its current owners; it " +"is not permission to violate the native payload contract." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:214 +msgid "The storage cell owns:" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:216 +msgid "The authoritative entry storage and its capacity/live/free counts." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:217 +msgid "" +"Open-addressed buckets containing entry offsets and empty/tombstone scalars, " +"not extra copies of GC pointer bits." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:219 +msgid "Reusable entry offsets, with no owner-address lookup." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:221 +msgid "" +"Each occupied bucket selects an authoritative entry. Compare that entry's " +"current key to resolve collisions and recognize tombstones. No separate last-" +"key cache or memo is needed. Key and value words remain GC-visible under " +"their weak/conditional semantics. Dead owners release all storage by " +"ordinary reachability, without a persistent owner registry or cleanup latch." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:227 +msgid "" +"The existing Shape kind uses all eight codes in its three-bit encoding. " +"Collection branding must be a deliberate Shape identity extension, not an " +"unreviewed ninth kind, a numeric collision or a parallel brand map. Prefer a " +"sparse extension for collection Shapes; measure its cost and preservation " +"through transitions before choosing its final encoding." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:233 +msgid "One operation, one proof" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:235 +msgid "" +"Build a scoped `WeakCollectionView` from one receiver classification and " +"Shape lookup. The view carries a resolved storage pointer, entries pointer, " +"length/capacity and the exact layout needed for direct bounded loads. " +"Resolve forwarding before constructing it. It lives only within a proven non-" +"collecting, callback-free region." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:241 +msgid "" +"An internal brand does not prove which method a JS call selected. Own and " +"prototype overrides, accessors and their invalidation remain ordinary " +"dispatch. Construct the fast view only after the genuine intrinsic was " +"selected; borrowed intrinsic methods still perform the internal brand check." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:246 +msgid "" +"Classify the key once into a valid weak identity or an invalid primitive. " +"Retain non-registered and well-known symbol keys, and reject registered " +"symbols. Preserve every currently supported object representation: ordinary " +"objects, closures, class references, native objects, stream/async resources, " +"typed arrays, buffers and Proxy identities. Primitive insertion throws " +"TypeError; primitive `get`, `has` and `delete` return undefined/false. Avoid " +"probing symbol registries for receivers whose own header proves that they " +"are another kind." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:255 +msgid "" +"Probe once and return a validated entry/key/value result, not an offset that " +"the caller must independently revalidate. Keep collision equality, bounds, " +"key liveness and the existing key/value weak read barriers. A pending weak " +"slice may have tombstoned a bucket's entry since the previous JS operation; " +"that validation is necessary even when length has not changed." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:261 +msgid "" +"`has(a)` and `get(a)` remain two independent JS operations. Each pays one " +"lookup. There is no cross-call proof or cached pointer surviving a " +"safepoint. Rooted slow paths remain for allocation, storage growth and " +"foreign receiver delegation. Insertion reloads roots and reconstructs its " +"view after every collecting operation before publishing the new bucket." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:267 +msgid "Collector work required" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:269 +msgid "" +"Moving GC must repair authoritative live keys and values and then rehash " +"address-dependent buckets before the mutator resumes. Rebuild in place from " +"entry offsets using the existing capacity; do not allocate a second index or " +"retain stale address bits until a later call. Integrate this ordering with " +"copying nursery, promotion, full relocation and evacuation verification. " +"Weak processing between incremental slices must tombstone both entry words; " +"subsequent reads still validate the entry and reclaim its bucket/free slot." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:277 +msgid "" +"Discover collection storage through traced Shape-owned internal edges. " +"Collector-local pending work can hold the storage during a cycle; it must " +"not become a persistent mutator-side collection registry. Remove WeakMap/ " +"WeakSet entry dependence on `WEAK_HOLDERS` as part of this migration while " +"preserving WeakRef and FinalizationRegistry behavior outside this lane." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:283 +msgid "" +"There is a confirmed correctness gap to resolve before claiming ephemeron " +"preservation. `is_weak_branded_target_trace_slot` excludes entry field 0 " +"(the key), but field 1 (the value) is visited as a strong edge. " +"`process_weak_entry_after_mark` clears that value only after key liveness " +"has been decided. A value-to-key backedge preserves its own key on baseline. " +"The retained diagnostic witness tests `wm.set(key, key)` with only the map " +"rooted and asserts an actual copying collection before checking that the " +"entry cleared. Its measured outcome is recorded with the lane evidence." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:292 +msgid "" +"A correct ephemeron collector traces the value only once its key is " +"independently live. Pending ephemerons need a fixed point: a value can keep " +"another collection's key alive. Cover full tracing, copying minors, old-key/ " +"young-value entries, remembered-set scanning, incremental writes and reads, " +"remark, and deletion. Simply making both words weak would lose live values; " +"tracing values unconditionally would keep dead key cycles alive. This work " +"changes the collector protocol and cannot be hidden in an array accessor " +"optimization." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:301 +#, fuzzy +msgid "Implementation and acceptance sequence" +msgstr "Durchführungshinweis" + +#: src/internals/weakmap-owned-index-design.md:303 +msgid "" +"Add deterministic GC witnesses for direct/indirect value-to-key cycles, " +"multi-map ephemeron chains, strongly live keys and movement. Assert that the " +"tested collector actually copied or completed the relevant weak phase." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:306 +msgid "" +"Establish Shape-owned internal branding and storage attachment, including " +"subclasses, transition preservation, Proxy brand rejection and reflection." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:308 +msgid "" +"Implement owned buckets and the collector trace/rewrite/rehash protocol. " +"Delete the address-keyed index and its clearing hooks in the same change." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:310 +msgid "" +"Implement the scoped view and validated-hit return for get/has/overwrite/ " +"delete, then the rooted insertion path. Keep foreign receiver dispatch." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:312 +msgid "" +"Run Node 26.5.1 parity for invalid keys, fresh/registered/well-known " +"symbols, identity, deletion, re-set, many keys, subclasses, borrowed " +"methods, forged prototypes and exotic receiver/key cases." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:315 +msgid "" +"Run the runtime suite single-threaded and all scoped gap tests. Run codegen " +"tests if codegen changes, formatting, Node-version consistency and the " +"current GC effect checker if FFI signatures or effects change." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:318 +msgid "" +"Build pristine main and fix in separate targets with identical package sets. " +"Verify source and archive hashes. Compile the exact Effect barrel benchmark " +"when it works on main; otherwise retain the diagnostic import and clearly " +"report the exact-source blocker." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:322 +msgid "" +"Interleave at least ten runs per arm with ASLR disabled and CPU affinity " +"fixed. Include identical-binary controls, uninstrumented instruction/cycle/ " +"RSS measurements and separate GC counts. Required matrix: weakmap-get, " +"Effect, hello, object-create, method-calls, closure, object-property, Zod, " +"TypeScript, qs parse/stringify, commander and fastify. Reuse the real-" +"program harness, not a replacement workload with different semantics." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:329 +msgid "" +"The owner-approved PERF_POLICY_2026-10-06.md replaces the old fixed " +"percentage/byte gates. The 2026-10-07 coordinator requests five interleaved " +"runs per label and ten for TypeScript, on qb6 measurement cores under the " +"shared lock, with ASLR disabled. Real-program deltas beyond same-binary " +"floors need named mechanisms; a larger real-program regression goes to the " +"owner. The current validation records the unresolved TypeScript CPU issue. " +"Historical design measurements above do not establish an implementation pass." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:1 +msgid "WeakMap owned storage: implementation validation" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:3 +msgid "" +"**Status: implementation complete; performance acceptance blocked by " +"TypeScript cycles. This is an unaccepted review candidate, not a shippable " +"performance change.**" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:6 +msgid "" +"The implementation is rebased onto pristine main " +"`68e41faa0f9145d8b8ab67ecb0cf414eaf13420b`. This includes c85c2db93 " +"(#12105), the LLVM statepoint-root correction. The rebase preserves main's " +"persistent-symbol GC type and census initializer; owned weak storage uses " +"the next free GC type (33). The root-holder inventory keeps both current-" +"main audits and conditional-tracing audits." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:12 +#, fuzzy +msgid "Root cause and implementation" +msgstr "Werkzeug- und Implementierungsstatus" + +#: src/internals/weakmap-owned-index-validation.md:14 +msgid "" +"A hit previously revalidated generic array lengths and elements, searched an " +"external owner-address index, and then extracted the entry again. The GC " +"also followed a WeakMap value strongly before establishing independent key " +"liveness, allowing a value-to-key cycle to retain its own key (#12087)." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:19 +msgid "" +"WeakMap/WeakSet now own one GC storage cell through their object metadata. " +"Their intrinsic brand lives in the Shape and survives Shape transitions. " +"Authoritative key/value words remain in the cell; buckets and reverse " +"offsets contain scalar indices. Every get, has, set, and delete classifies " +"the key once, carries one validated view, and probes once. Growth roots " +"arguments and reloads them after allocation. The has/get pattern uses two " +"inexpensive independent probes without a last-key cache or external " +"ownership registry." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:27 +msgid "" +"Conditional ephemeron closure follows values only after independently live " +"keys. Moving collectors rewrite both words and rebuild identity buckets " +"before resuming the mutator. Weak writes maintain generational coverage " +"without unconditionally shading copied entries. Receiver-brand, exotic-key, " +"symbol, WeakRef, and FinalizationRegistry checks remain in place." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:33 +msgid "Measurement method" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:35 +msgid "" +"Fresh main and fix compiler/runtime/stdlib static wrappers use separate " +"targets on qb6. Compiles use CPUs 0–55 and at most eight workers. All source " +"files in both remote arms were checked against the local Git/source hashes " +"before building; TypeScript is explicitly compiled from its actual npm " +"source rather than routed to a native shim. The real-program sources were " +"copied unchanged from the captures2 lane; nothing was written there." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:42 +msgid "" +"Each acceptance row uses five main, five fix, and five identical-main floor " +"runs, with randomized interleaving; TypeScript has ten of each. Measurement " +"batches hold qb6's MEASURE.lock, pin CPU 56 within the reserved 56–63 set, " +"and disable ASLR. Batches are limited to 45 minutes with TypeScript, " +"otherwise 30 minutes. `instructions:u` and `cycles:u` are perf user-mode " +"counters. CPU is perf task-clock in milliseconds and is informational; RSS " +"is GNU time peak KiB. Acceptance follows the owner-approved " +"PERF_POLICY_2026-10-06.md, which replaces fixed per-axis ceilings: explain " +"real-program deltas beyond the same-binary floor, retain correct Shape/" +"ownership architecture, and name a fix-forward plan for any small " +"architectural regression. Signed identical-main floors are reported " +"separately for instructions, cycles, and RSS." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:54 +msgid "" +"GC counts accompany RSS but come from three separate runs of the same " +"uninstrumented executable. A ptrace reader stops its own child only at exec " +"and exit, then reads the runtime's existing GC_STATS TLS. It adds no mutator " +"counter or collection hook. The constant-output hello binary contains no " +"runtime and performs zero collections. Diagnostic GC logs and DWARF profiles " +"are separate from acceptance counter/RSS runs." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:61 +msgid "" +"The Effect input uses exactly `import { Schema } from \"effect\"`, pinned to " +"4.0.0-beta.83, constructs 2000 schemas and decodes 20000 values. Both arms " +"must print `ok=20000`. Zod runs 5000 parses. Package versions are Node " +"26.5.1, Bun 1.3.14, Zod 3.25.76, TypeScript 5.9.3, qs 6.16.0, Commander " +"15.0.0, and Fastify 5.12.5." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:66 +msgid "" +"The coordinator-directed buffer_heavy/worker_heavy skips are recorded: both " +"fail on main and belong to other sessions. They were not patched or " +"substituted." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:69 +msgid "A/B medians" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "Instructions M main → fix (Δ%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "Cycles M main → fix (Δ%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "CPU ms main → fix" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "RSS KiB main → fix (Δ KiB)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "Minor/full GC main → fix" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +#: src/internals/weakmap-owned-index-validation.md:95 +msgid "weakmap-get" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +msgid "825.229 → 240.689 (-70.834%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +msgid "287.808 → 84.158 (-70.759%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +msgid "79.770 → 25.680" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +#: src/internals/weakmap-owned-index-validation.md:75 +msgid "24304 → 23868 (-436)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +#: src/internals/weakmap-owned-index-validation.md:74 +#: src/internals/weakmap-owned-index-validation.md:75 +#: src/internals/weakmap-owned-index-validation.md:76 +#: src/internals/weakmap-owned-index-validation.md:77 +#: src/internals/weakmap-owned-index-validation.md:79 +#: src/internals/weakmap-owned-index-validation.md:80 +#: src/internals/weakmap-owned-index-validation.md:81 +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "0/0 → 0/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +#: src/internals/weakmap-owned-index-validation.md:96 +msgid "weakmap-hit-pair" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +msgid "1613.228 → 432.439 (-73.194%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +msgid "564.394 → 148.638 (-73.664%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +msgid "154.790 → 42.670" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +msgid "24308 → 23868 (-440)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:75 +#: src/internals/weakmap-owned-index-validation.md:97 +msgid "weakmap-set" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:75 +msgid "1193.232 → 278.189 (-76.686%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:75 +msgid "239.388 → 57.333 (-76.050%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:75 +msgid "66.010 → 17.750" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +#: src/internals/weakmap-owned-index-validation.md:98 +msgid "weakset-has" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +msgid "822.230 → 231.189 (-71.883%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +msgid "160.580 → 45.933 (-71.396%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +msgid "45.940 → 15.050" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +#: src/internals/weakmap-owned-index-validation.md:77 +msgid "23860 → 24312 (+452)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:77 +#: src/internals/weakmap-owned-index-validation.md:99 +msgid "weakset-add" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:77 +msgid "1330.230 → 294.189 (-77.884%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:77 +msgid "265.585 → 59.065 (-77.760%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:77 +msgid "73.290 → 18.190" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "24436.351 → 22754.859 (-6.881%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "8839.858 → 8271.501 (-6.429%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "2375.020 → 2224.220" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "189392 → 181676 (-7716)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "18/2 → 24/1" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:79 +msgid "0.250 → 0.250 (+0.000%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:79 +msgid "0.390 → 0.391 (+0.256%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:79 +msgid "0.870 → 0.880" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:79 +msgid "1592 → 1592 (+0)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:80 +msgid "32.734 → 32.734 (-0.000%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:80 +msgid "17.377 → 17.111 (-1.532%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:80 +msgid "7.050 → 6.960" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:80 +msgid "26968 → 26556 (-412)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:81 +msgid "61.129 → 61.129 (+0.001%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:81 +msgid "121.627 → 121.611 (-0.013%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:81 +msgid "34.470 → 34.450" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:81 +msgid "23900 → 23776 (-124)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "250.981 → 250.982 (+0.000%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "151.436 → 151.478 (+0.028%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "41.910 → 41.940" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "14588 → 14724 (+136)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "174.054 → 174.087 (+0.019%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "39.675 → 39.389 (-0.719%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "13.680 → 13.520" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "34136 → 33692 (-444)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "1/0 → 1/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +#: src/internals/weakmap-owned-index-validation.md:106 +msgid "zod" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "1328.640 → 1331.206 (+0.193%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "434.689 → 435.059 (+0.085%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "118.850 → 118.900" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "50724 → 50748 (+24)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "6/0 → 6/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +#: src/internals/weakmap-owned-index-validation.md:107 +msgid "tsc" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +msgid "256258.986 → 256757.935 (+0.195%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +msgid "94816.300 → 98686.655 (+4.082%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +msgid "25311.570 → 26327.035" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +msgid "271152 → 271512 (+360)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +#: src/internals/weakmap-owned-index-validation.md:224 +msgid "26/14 → 26/14" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +#: src/internals/weakmap-owned-index-validation.md:108 +msgid "qs_parse_nested" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "22306.853 → 21645.601 (-2.964%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "7955.556 → 7618.069 (-4.242%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "2115.530 → 2026.040" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "52608 → 52436 (-172)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "129/0 → 130/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +#: src/internals/weakmap-owned-index-validation.md:109 +msgid "qs_stringify_nested" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +msgid "57116.054 → 51186.191 (-10.382%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +msgid "17106.529 → 15278.690 (-10.685%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +msgid "4537.630 → 4055.180" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +msgid "54020 → 52216 (-1804)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +#: src/internals/weakmap-owned-index-validation.md:225 +msgid "439/0 → 408/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +#: src/internals/weakmap-owned-index-validation.md:110 +#, fuzzy +msgid "commander_parse_argv" +msgstr "commander (CLI-Parsing)" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "7151.612 → 7156.157 (+0.064%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "2694.822 → 2706.840 (+0.446%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "718.050 → 720.570" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "46124 → 46264 (+140)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "31/0 → 31/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +#: src/internals/weakmap-owned-index-validation.md:111 +#, fuzzy +msgid "fastify_inject" +msgstr "`fastify`" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "109761.894 → 109700.164 (-0.056%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "43309.484 → 43223.539 (-0.198%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "11531.300 → 11506.350" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "254544 → 254868 (+324)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "11/1 → 11/1" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:91 +msgid "Signed identical-main floor/main median deltas:" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:93 +#, fuzzy +msgid "Instructions floor %" +msgstr "Build-Anweisungen" + +#: src/internals/weakmap-owned-index-validation.md:93 +msgid "Cycles floor %" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:93 +msgid "RSS floor % (KiB)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:95 +msgid "\\-0.00009" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:95 +msgid "+0.429" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:95 +#: src/internals/weakmap-owned-index-validation.md:96 +#: src/internals/weakmap-owned-index-validation.md:98 +#: src/internals/weakmap-owned-index-validation.md:99 +#: src/internals/weakmap-owned-index-validation.md:101 +#: src/internals/weakmap-owned-index-validation.md:102 +#: src/internals/weakmap-owned-index-validation.md:103 +#: src/internals/weakmap-owned-index-validation.md:105 +#: src/internals/weakmap-owned-index-validation.md:106 +#: src/internals/weakmap-owned-index-validation.md:108 +#: src/internals/weakmap-owned-index-validation.md:109 +msgid "+0.000 (+0)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:96 +msgid "+0.00008" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:96 +msgid "\\-1.643" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:97 +msgid "\\-0.00005" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:97 +msgid "\\-0.149" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:97 +msgid "+0.016 (+4)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:98 +msgid "\\-0.00002" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:98 +msgid "+0.671" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:99 +msgid "+0.00001" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:99 +msgid "\\-0.227" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:100 +msgid "\\-0.00052" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:100 +msgid "+1.863" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:100 +msgid "\\-0.106 (-200)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:101 +msgid "+0.00040" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:101 +msgid "\\-0.369" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:102 +msgid "+0.00049" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:102 +msgid "\\-1.402" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:103 +msgid "\\-0.00003" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:103 +msgid "\\-0.046" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:104 +#, fuzzy +msgid "\\-0.00000" +msgstr "\"#000000\"" + +#: src/internals/weakmap-owned-index-validation.md:104 +msgid "\\-0.025" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:104 +msgid "\\-0.027 (-4)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:105 +msgid "\\-0.00012" msgstr "" -#: src/internals/memory-model.md:305 -msgid "Source map" -msgstr "Quellzuordnung" +#: src/internals/weakmap-owned-index-validation.md:105 +msgid "+0.466" +msgstr "" -#: src/internals/memory-model.md:307 -msgid "" -"Paths, not line numbers: a line number is a claim nothing re-derives, and " -"every row of this table once pointed into a `gc.rs` that no longer exists." +#: src/internals/weakmap-owned-index-validation.md:106 +msgid "\\-0.00080" msgstr "" -"Pfade, nicht Zeilennummern: Eine Zeilennummer ist ein Anspruch, der nichts " -"wiedergibt, und jede Zeile dieser Tabelle hat einmal in eine `gc.rs` " -"gezeigt, die nicht mehr existiert." -#: src/internals/memory-model.md:310 -msgid "Topic" -msgstr "Thema" +#: src/internals/weakmap-owned-index-validation.md:106 +msgid "\\-0.104" +msgstr "" -#: src/internals/memory-model.md:310 -msgid "Symbol to look for" -msgstr "Symbol für die Suche nach" +#: src/internals/weakmap-owned-index-validation.md:107 +msgid "+0.00204" +msgstr "" -#: src/internals/memory-model.md:312 -msgid "NaN-boxing tags" -msgstr "NaN-Box-Tags" +#: src/internals/weakmap-owned-index-validation.md:107 +msgid "\\-0.186" +msgstr "" -#: src/internals/memory-model.md:312 -msgid "`crates/perry-runtime/src/value/tags.rs`" -msgstr "`crates/perry-runtime/src/value/tags.rs`" +#: src/internals/weakmap-owned-index-validation.md:107 +msgid "+0.641 (+1738)" +msgstr "" -#: src/internals/memory-model.md:312 -msgid "`POINTER_TAG`, `STRING_TAG`" -msgstr "`POINTER_TAG`, `STRING_TAG`" +#: src/internals/weakmap-owned-index-validation.md:108 +msgid "+0.00078" +msgstr "" -#: src/internals/memory-model.md:313 -msgid "`GcHeader`, type/flag constants" -msgstr "`GcHeader`, Typ-/Flag-Konstanten" +#: src/internals/weakmap-owned-index-validation.md:108 +msgid "+1.638" +msgstr "" -#: src/internals/memory-model.md:313 -msgid "`crates/perry-runtime/src/gc/types.rs`" -msgstr "`crates/perry-runtime/src/gc/types.rs`" +#: src/internals/weakmap-owned-index-validation.md:109 +msgid "+0.00134" +msgstr "" -#: src/internals/memory-model.md:313 -msgid "`GcHeader`" -msgstr "`GcHeader`" +#: src/internals/weakmap-owned-index-validation.md:109 +msgid "\\-0.464" +msgstr "" -#: src/internals/memory-model.md:314 -msgid "`gc_malloc`" -msgstr "`gc_malloc`" +#: src/internals/weakmap-owned-index-validation.md:110 +msgid "+0.01583" +msgstr "" -#: src/internals/memory-model.md:314 -msgid "`crates/perry-runtime/src/gc/malloc.rs`" -msgstr "`crates/perry-runtime/src/gc/malloc.rs`" +#: src/internals/weakmap-owned-index-validation.md:110 +msgid "\\-0.056" +msgstr "" -#: src/internals/memory-model.md:315 -msgid "Shadow frames (fallback root lowering)" -msgstr "Schatten-Rahmen (Fallback-Root-Absenkung)" +#: src/internals/weakmap-owned-index-validation.md:110 +msgid "\\-0.009 (-4)" +msgstr "" -#: src/internals/memory-model.md:315 -msgid "`crates/perry-runtime/src/gc/roots/shadow_stack.rs`" -msgstr "`crates/perry-runtime/src/gc/roots/shadow_stack.rs`" +#: src/internals/weakmap-owned-index-validation.md:111 +msgid "+0.01990" +msgstr "" -#: src/internals/memory-model.md:315 -msgid "`js_shadow_frame_push`" -msgstr "`js_shadow_frame_push`" +#: src/internals/weakmap-owned-index-validation.md:111 +msgid "\\-0.144" +msgstr "" -#: src/internals/memory-model.md:316 -msgid "Registered root scanners" -msgstr "Registrierte Root-Scanner" +#: src/internals/weakmap-owned-index-validation.md:111 +msgid "\\-0.024 (-60)" +msgstr "" -#: src/internals/memory-model.md:316 -msgid "`crates/perry-runtime/src/gc/roots.rs`" -msgstr "`crates/perry-runtime/src/gc/roots.rs`" +#: src/internals/weakmap-owned-index-validation.md:113 +msgid "Why Effect performs more minor collections" +msgstr "" -#: src/internals/memory-model.md:316 -msgid "`gc_register_mutable_root_scanner`" -msgstr "`gc_register_mutable_root_scanner`" +#: src/internals/weakmap-owned-index-validation.md:115 +msgid "" +"The historical 10 → 25 total was 8 minor/2 full → 24 minor/1 full. The main " +"arm then retained value-to-key cycles because WeakMap values were strongly " +"traced before key liveness was known. Conditional tracing removes that false " +"reachability. The existing nursery retuner shrinks after two cycles with " +"less than 1% Eden survival; the historical fix consequently shrunk from " +"scale 16/4 to 1/4, while that main run ended before satisfying both low-" +"survival cycles. More roughly 4 MiB minors were expected from this unchanged " +"policy, rather than additional JS work or a new pacing heuristic." +msgstr "" -#: src/internals/memory-model.md:317 -msgid "Copying minor" -msgstr "Minderjährige kopieren" +#: src/internals/weakmap-owned-index-validation.md:124 +msgid "" +"The baseline-shifting #12105 merge requires fresh counts. On the current " +"baseline they are 18 minor/2 full → 24 minor/1 full (20 → 25 total), and " +"both arms eventually shrink their nursery. The fix's avoided second full is " +"partly replaced by small minors. At the first full, main retains 15,914,632 " +"bytes (15,333,120 mature), versus 6,011,240 (5,999,016 mature) with " +"conditional tracing. Allocation debt at that point is nearly equal: " +"134,987,032 versus 135,084,352 bytes (+0.072%). The fix shrinks 16/4 → 1/4 " +"at 4200 Eden-live bytes; its resulting nursery band is 3,783,262 bytes." +msgstr "" -#: src/internals/memory-model.md:317 -msgid "`crates/perry-runtime/src/gc/copying.rs`" -msgstr "`crates/perry-runtime/src/gc/copying.rs`" +#: src/internals/weakmap-owned-index-validation.md:133 +msgid "" +"The storage representation also moves the identity buckets into GC " +"ownership: large GC allocation accounting at the first full is 1,540,352 → " +"5,435,840 bytes. The old external index bytes were outside that accounting. " +"This is a representation change, not an external cache or independently " +"retained key. No nursery sizing, tenuring, full-GC threshold, or reclaim " +"policy was changed. The whole-program instruction/cycle/RSS measurements " +"decide the net cost; collection count alone is not a performance regression." +msgstr "" -#: src/internals/memory-model.md:317 -msgid "`move_young`" -msgstr "`move_young`" +#: src/internals/weakmap-owned-index-validation.md:141 +msgid "Mechanisms and remaining acceptance issue" +msgstr "" -#: src/internals/memory-model.md:318 -msgid "Whole-block in-place promotion" -msgstr "Ganzer Block an Ort und Stelle Beförderung" +#: src/internals/weakmap-owned-index-validation.md:143 +msgid "" +"Effect and the WeakMap/WeakSet repros remove repeated generic entries-array " +"validation, the address-owner index, and entry extraction after lookup. The " +"instruction profiles identify `index::find`, `js_array_length`, and " +"`js_array_get_f64` below the old WeakMap hits; those descendants disappear " +"from the new hits. On sampled Effect instructions, weak-operation ancestry " +"falls from 4.31% to 0.87%. These are sampled ancestry shares, not additive " +"whole-program counter budgets: recording was throttled and does not cover " +"the whole executed instruction stream. Unprofiled perf-stat rows above are " +"the acceptance measurements." +msgstr "" -#: src/internals/memory-model.md:318 -msgid "`crates/perry-runtime/src/arena/promote.rs`" -msgstr "`crates/perry-runtime/src/arena/promote.rs`" +#: src/internals/weakmap-owned-index-validation.md:153 +msgid "" +"The qs drivers execute `side-channel-weakmap` through borrowed prototype " +"methods. Both time profiles show its calls below get/has/set; the old " +"`index::find`/free-slot index paths disappear in fix. Stringify also " +"allocates fewer GC entry objects: its minor count falls 439 to 408, with no " +"full collection in either arm. Parse has 129 to 130 minors, but its " +"instructions, cycles, and RSS all decrease. The extra minor is a collection-" +"boundary change, not a new pacing policy. The THP-disabled stringify check " +"is recorded below because its primary RSS delta is close to 2 MiB." +msgstr "" -#: src/internals/memory-model.md:318 -msgid "`finish_in_place_promotion`" -msgstr "`finish_in_place_promotion`" +#: src/internals/weakmap-owned-index-validation.md:162 +msgid "" +"Zod's +0.193% instructions and Commander's +0.064% are small architectural " +"costs in ordinary-object workloads: intrinsic weak-brand admission now reads " +"the Shape instead of accepting inherited class identity, and traced objects " +"encounter the additional owned-weak-storage type decision. Zod executes " +"96,351 `collection_brand` calls in a separate GDB count; main executes " +"228,608 parent-class queries across all callers. Its instruction profile " +"moves the parent-class-query self share from 1.13% to 0.57% and introduces " +"0.67% Shape-brand reads. Both arms have six minor collections. This " +"identifies the changed admission/trace work; it is not a claim that " +"profiling apportions every one of the 2.57M extra instructions exactly. " +"Commander likewise keeps 31 minor/0 full collections. Fix-forward: " +"coordinate with native-family to carry one admitted ObjectHeader/Shape proof " +"through weak-brand dispatch, and with the GC scan owner to carry the already-" +"read GC kind into conditional tracing. Keep all wrong-brand and exotic-" +"receiver checks; add no cache or name-based shortcut." +msgstr "" -#: src/internals/memory-model.md:319 -msgid "Promotion policy" -msgstr "Absatzförderungspolitik" +#: src/internals/weakmap-owned-index-validation.md:178 +msgid "" +"Fastify's instruction/cycle decreases are small, but exceed their recorded " +"floors. Its generic method dispatch now uses the Shape weak-brand negative " +"check; profiles show parent-class-query self share 0.51% to 0.34% and the " +"new Shape read at 0.19%. The full/minor regime remains 1/11. Its +324 KiB " +"peak RSS is accompanied by +336 KiB file-backed residency in the separate " +"exit snapshot, consistent with changed code residency. Zod (+24 KiB) and " +"Commander (+140 KiB) also have unchanged GC regimes and larger file-backed " +"residency; no ordinary-object or Shape header was enlarged." +msgstr "" -#: src/internals/memory-model.md:319 -msgid "`crates/perry-runtime/src/gc/promote_in_place.rs`" -msgstr "`crates/perry-runtime/src/gc/promote_in_place.rs`" +#: src/internals/weakmap-owned-index-validation.md:187 +msgid "" +"The short controls have file-backed residency changes, not a per-object " +"storage tax. For the closure control, the sampled RSS peak has 8784 to 8788 " +"KiB anonymous memory, while file residency changes by hundreds of KiB. " +"WeakSet-has has exactly 17004 KiB anonymous memory at both sampled peaks; " +"its file-backed peak varies with code-page residency. The linked text grows " +"by 15,184 bytes for WeakSet-has and 15,160 bytes for the closure control; " +"ordinary ObjectHeader and ShapeRecord remain 64 bytes. Primary micro RSS " +"increases are +452 KiB for both WeakSet rows and +136 KiB for closure. These " +"are logged under the replacement policy, not rejected using the old " +"percentage/256-KiB gate. Follow-up for the layout owner: measure transient " +"bootstrap image residency and placement on these tiny executables." +msgstr "" -#: src/internals/memory-model.md:319 -msgid "`PROMOTE_SURVIVAL_THRESHOLD_PERMILLE`" -msgstr "`PROMOTE_SURVIVAL_THRESHOLD_PERMILLE`" +#: src/internals/weakmap-owned-index-validation.md:199 +msgid "" +"TypeScript is the unresolved acceptance issue. Its ten-run primary row is " +"+0.195% instructions, +4.082% cycles, +360 KiB RSS; the identical-main " +"floors are +0.00204% instructions, -0.186% cycles, and +1738 KiB RSS. Both " +"arms have 26 minor and 14 full collections. All 31,025 generated TypeScript " +"functions have equal sizes; 30,782 change addresses by -1648 bytes when the " +"runtime is relinked. A separate three-round hardware-counter diagnostic " +"reproduces +4.46% cycles and shows cache misses 388.9M to 448.0M (+15.2%), " +"versus an identical-main floor of -5.0%; branch misses rise 107.7M to " +"119.1M. This points to changed code/data placement and cache locality, " +"rather than extra JS work or additional collections. It does not yet isolate " +"which placement change is responsible. The THP-disabled diagnostic below " +"tests the page-step alternative. A remaining multi-percent real-program CPU " +"regression requires owner review under policy section 4; it is not silently " +"accepted because instructions are primary or because the other workloads " +"improve." +msgstr "" -#: src/internals/memory-model.md:320 -msgid "Adaptive tenuring threshold" -msgstr "Anpassungsschwelle" +#: src/internals/weakmap-owned-index-validation.md:214 +msgid "THP-disabled diagnostics" +msgstr "" -#: src/internals/memory-model.md:320 -msgid "`crates/perry-runtime/src/gc/tenuring.rs`" -msgstr "`crates/perry-runtime/src/gc/tenuring.rs`" +#: src/internals/weakmap-owned-index-validation.md:216 +msgid "" +"The original TypeScript RSS floor is +1738 KiB and stringify's RSS delta is " +"\\-1804 KiB, so both were checked with per-process `PR_SET_THP_DISABLE`, " +"without changing the host's global THP policy. The child snapshots confirm " +"**AnonHugePages=0 KiB** in both arms. These are additional diagnostics, not " +"substitutes for the ten-run TypeScript primary row." +msgstr "" -#: src/internals/memory-model.md:320 -msgid "`tenuring_survivals`" -msgstr "`tenuring_survivals`" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "Program / runs per label" +msgstr "" -#: src/internals/memory-model.md:321 -msgid "Write barriers" -msgstr "Schreibbarrieren" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "Instructions M main → fix (Δ%; floor)" +msgstr "" -#: src/internals/memory-model.md:321 -msgid "`crates/perry-runtime/src/gc/barrier_store.rs`" -msgstr "`crates/perry-runtime/src/gc/barrier_store.rs`" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "Cycles M main → fix (Δ%; floor)" +msgstr "" -#: src/internals/memory-model.md:321 -msgid "`runtime_write_barrier_slot`" -msgstr "`runtime_write_barrier_slot`" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "RSS KiB main → fix (Δ KiB; floor)" +msgstr "" -#: src/internals/memory-model.md:322 -msgid "Explicit pinning" -msgstr "Explizites Anstecken" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "Minor/full main → fix" +msgstr "" -#: src/internals/memory-model.md:322 -msgid "`crates/perry-runtime/src/gc/pin.rs`" -msgstr "`crates/perry-runtime/src/gc/pin.rs`" +#: src/internals/weakmap-owned-index-validation.md:224 +#, fuzzy +msgid "TypeScript / 3" +msgstr "TypeScript" -#: src/internals/memory-model.md:322 -msgid "`pin_object`" -msgstr "`pin_object`" +#: src/internals/weakmap-owned-index-validation.md:224 +msgid "256204.837 → 256750.533 (+0.213%; +0.00233%)" +msgstr "" -#: src/internals/memory-model.md:323 -msgid "Conservative-pin predicate" -msgstr "Prädikat der Konservativen" +#: src/internals/weakmap-owned-index-validation.md:224 +msgid "96511.768 → 98725.429 (+2.294%; -1.021%)" +msgstr "" -#: src/internals/memory-model.md:323 -msgid "`crates/perry-runtime/src/gc/verify.rs`" -msgstr "`crates/perry-runtime/src/gc/verify.rs`" +#: src/internals/weakmap-owned-index-validation.md:224 +msgid "233788 → 234044 (+256; 0)" +msgstr "" -#: src/internals/memory-model.md:323 -msgid "`is_conservatively_pinned`" -msgstr "`is_conservatively_pinned`" +#: src/internals/weakmap-owned-index-validation.md:225 +#, fuzzy +msgid "qs stringify / 5" +msgstr "JSON-stringify" -#: src/internals/memory-model.md:324 -msgid "Collection triggers and pacing" -msgstr "Sammelauslöser und Tempos" +#: src/internals/weakmap-owned-index-validation.md:225 +msgid "57116.016 → 51191.512 (-10.373%; +0.01536%)" +msgstr "" -#: src/internals/memory-model.md:324 -msgid "`crates/perry-runtime/src/gc/policy.rs`" -msgstr "`crates/perry-runtime/src/gc/policy.rs`" +#: src/internals/weakmap-owned-index-validation.md:225 +msgid "17080.877 → 15294.530 (-10.458%; -0.124%)" +msgstr "" -#: src/internals/memory-model.md:324 -msgid "`gc_check_trigger`" -msgstr "`gc_check_trigger`" +#: src/internals/weakmap-owned-index-validation.md:225 +msgid "27872 → 27096 (-776; 0)" +msgstr "" -#: src/internals/memory-model.md:325 -msgid "Current operations page" -msgstr "Seite der laufenden Operationen" +#: src/internals/weakmap-owned-index-validation.md:227 +msgid "" +"Stringify still reduces RSS with THP disabled. The larger primary -1804 KiB " +"reduction is sensitive to huge-page residency; exit AnonHugePages is not a " +"measurement of residency at the RSS peak. TypeScript still has a multi-" +"percent cycle regression beyond its same-binary floor. Cache misses also " +"remain elevated with THP disabled (420.9M → 468.9M, +11.4%, versus a " +"\\-5.17% identical-main floor). The page-step hypothesis does not remove the " +"CPU blocker." +msgstr "" -#: src/internals/memory-model.md:325 -msgid "`docs/src/internals/garbage-collector.md`" -msgstr "`docs/src/internals/garbage-collector.md`" +#: src/internals/weakmap-owned-index-validation.md:235 +#, fuzzy +msgid "Node and Bun references" +msgstr "Barrieren und schwache Referenzen" -#: src/internals/memory-model.md:326 -msgid "Design plan (historical)" -msgstr "Entwurfsplan (historisch)" +#: src/internals/weakmap-owned-index-validation.md:237 +msgid "" +"Separate three-run exact-Effect references on the measurement core: Node " +"26.5.1: 3677.870M user instructions, 595.870 ms CPU, 211868 KiB RSS; Bun " +"1.3.14: 3303.585M user instructions, 516.430 ms CPU, 158780 KiB RSS. All " +"print `ok=20000`. Perry main/fix are 24436.351M / 22754.859M above." +msgstr "" -#: src/internals/memory-model.md:326 -msgid "`docs/generational-gc-plan.md`" -msgstr "`docs/generational-gc-plan.md`" +#: src/internals/weakmap-owned-index-validation.md:242 +msgid "" +"The same WeakMap-get source, with startup subtracted by instruction slopes, " +"costs **824.000 → 239.500 user instructions/iteration** on Perry (five runs " +"at 1M and 2M); current Node/Bun three-run slopes at 100M and 200M are " +"128.942 / 61.009. These are complete loop/selection/checksum pattern costs, " +"not naked runtime-helper counts, and Node's JIT tiers add variability. The " +"Perry/Node gap drops from 6.39x to 1.86x on this baseline. The historical " +"842/114 table remains historical rather than a fresh-baseline comparison." +msgstr "" -#: src/internals/memory-model.md:340 +#: src/internals/weakmap-owned-index-validation.md:250 +msgid "Acceptance and next work" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:252 msgid "" -"Those rows are not decorative: each is bound to a `gc-symbol` marker above " -"and re-derived by `scripts/check_gc_doc_claims.py`, so a rename that leaves " -"this table behind fails `lint` instead of quietly pointing readers at " -"nothing." +"This change removes the external owner-address WeakMap index and strong " +"value tracing, replacing them with collection-owned storage and conditional " +"ephemeron tracing." msgstr "" -"Diese Reihen sind nicht dekorativ: jede wird an einen `gc-symbol`-Marker " -"oben gebunden und von `scripts/check_gc_doc_claims.py` neu abgeleitet, so " -"dass eine Umbenennung, die diese Tabelle hinter sich lässt, `lint` " -"fehlschlägt, anstatt leise Leser auf nichts zu zeigen." -#: src/internals/regexp-program-cache.md:3 +#: src/internals/weakmap-owned-index-validation.md:256 msgid "" -"JavaScript RegExp construction uses Perex directly. There is one engine; " -"lookbehind, backreferences, and other accepted patterns share the same " -"construction path. `perex_construct.rs` retains eager syntax checking, so " -"invalid patterns still throw at construction and the first search does not " -"inherit deferred compilation work." +"The old control-RSS percentage gate no longer applies. All required programs " +"were built and measured, including the previously OOM-blocked actual " +"TypeScript package. The remaining blocker is its +4.082% primary cycles " +"(+2.294% with THP disabled), with instruction increases of +0.195% / " +"+0.213%. Section 4 of the replacement policy sends a larger real-program " +"regression to the owner; this result is neither an automatic pass nor the " +"old blanket +0.5%/256-KiB rejection. Increased cache misses are measured, " +"but the specific placement conflict is not isolated. Next work for the " +"layout/GC/native-family owners is to locate the added miss sites and " +"separate linking placement from necessary admission/trace work. Retain the " +"owned storage and conditional semantics; do not regain speed with an owner-" +"address registry, a last-key cache, a name-based shortcut, or unconditional " +"value tracing." msgstr "" -#: src/internals/regexp-program-cache.md:9 +#: src/internals/weakmap-owned-index-validation.md:269 msgid "" -"`regex/perex_cache.rs` retains immutable programs by source plus canonical " -"flags. The first lookup uses the source `StringHeader` identity and reads no " -"pattern bytes. An identity miss hashes the original bytes, then verifies " -"exact equality within the hash bucket. Independently allocated equal strings " -"share a program. Flags remain part of both keys; canonical ordering makes " -"`ig` and `gi` equivalent. Every new RegExp still owns its original source/" -"flags and independent `lastIndex`. Retained source strings are marked shared " -"to prevent unique-string append from modifying the cached pattern or " -"OriginalSource." +"The two-commit series and bundle preserve this complete implementation for " +"review. They are explicitly unaccepted until the CPU issue is resolved or " +"the owner decides the explained trade. Build targets are removed after all " +"evidence is copied. No push or PR is performed." msgstr "" -#: src/internals/regexp-program-cache.md:18 +#: src/internals/weakmap-owned-index-validation.md:274 +#, fuzzy +msgid "Correctness and repository checks" +msgstr "Korrektheits-Zahlen" + +#: src/internals/weakmap-owned-index-validation.md:276 msgid "" -"The cache holds at most 512 entries and 32 MiB of source/program payload. " -"Least-recently-used entries are evicted individually. Programs above the " -"byte limit remain usable through their RegExp owner without cache retention. " -"The cache registers its scanner before publishing its first root, so " -"programs that never construct a RegExp add no cache scanner work. Source and " -"program slots are mutable GC roots; evacuation rewrites them and rebuilds " -"the source-identity index. Content hashes are address independent." +"Fresh release runtime suite: fix **5208 passed, 0 failed, 5 ignored**; " +"integration test **1 passed**. Main: **5195 passed, 1 failed, 5 ignored**. " +"Main's pre-existing failure is `gc::tests::native_payload_streams::" +"z8_churn_releases_every_codec_at_completion_and_drops_every_payload`: all " +"4000 codecs/cells were released/finalized, but the anonymous-RSS warmup " +"threshold assertion saw 4,333,568 bytes growth. Fix's full suite passes; " +"there is no new runtime failure to excuse." msgstr "" -#: src/internals/regexp-program-cache.md:26 +#: src/internals/weakmap-owned-index-validation.md:284 msgid "" -"Perex's `ProgramWitness` lives beside the immutable words in each program GC " -"cell (upstream #10166/#10183). The first binding validates the words; " -"subsequent bindings use that witness in constant work, including bindings " -"from another RegExp sharing the cached program. Each operation still roots " -"its own program, so eviction, collection, and reentrant receiver " -"recompilation cannot invalidate an active search. No borrowed program slice " -"survives a safepoint. Scratch buffers remain operation-owned and charged to " -"the existing memory budget." +"Both #12087 witnesses compile on pristine main, pass their movement/control " +"preconditions, and fail at the intended assertions: the conditional value " +"keeps its own key alive (raw key remains non-undefined; the entry remains " +"live). Both pass with fix. The filtered fix run also passes indirect/cross-" +"map and Proxy-chain witnesses (four tests total). Main's source file is " +"restored by a trap after the failure proof." msgstr "" -#: src/internals/regexp-program-cache.md:34 +#: src/internals/weakmap-owned-index-validation.md:291 msgid "" -"Compound split/replace/match operations retain program and subject bindings " -"in `perex_api::Reuse`, checking the current receiver and program cell before " -"reuse. Within a compound operation, the previous position is reused only " -"with the same subject binding. Across JavaScript calls, upstream's four-" -"entry scalar position table can reuse a non-ASCII string's cursor when its " -"concealed address, lengths and heap generation still agree. Heap changes or " -"in-place length changes invalidate that identity. The table does not retain " -"a string or program. Validated heap strings use the existing counted-subject " -"path." +"All six previously Node-matching weak-area files still match. The new 72-" +"line behavior matrix matches Node on fix both normally and under " +"`PERRY_GC_STRESS_SEED=7 PERRY_GC_STRESS_RATE=1 PERRY_GC_TRACE=1`: 57 actual " +"copying minors move **38,421 objects**. The existing " +"`test_issue_2656_weakref_finalization_gc.ts` differs from Node on both arms; " +"it is not a newly matching file or a newly introduced mismatch." msgstr "" -#: src/internals/regexp-program-cache.md:43 +#: src/internals/weakmap-owned-index-validation.md:298 msgid "" -"The fast builtin dispatch guard contains only immutable ShapeIds, field " -"indices, and epochs, with no untraced GC address. It verifies the current " -"builtin `exec` value, the receiver's metadata, expando table, and prototype. " -"Empty-string replacement additionally verifies builtin flags getters and " -"`Symbol.replace`, and requires primitive strings and numeric `lastIndex`. " -"Observable overrides take the ordinary dispatch path. Admitted replacements " -"use full-subject UTF-16 spans and preserve global/sticky index updates and " -"Unicode empty-match advancement, without allocating exec result arrays." +"`cargo fmt --all -- --check` and Node-version consistency pass. The root-" +"holder inventory has the same four pre-existing unregistered thread-local " +"declarations on main/fix: IN_SAMPLER, BLOCK_PERSIST_FORCE_MARKS, " +"TAPE_REGISTRY, TAPE_REGISTRY_NONEMPTY. Address-class audit failures match " +"main apart from source line shifts; file-size audit has the same six " +"offending paths/line counts on both arms. Their raw main/fix logs and " +"comparison proofs are retained. Do not present those existing failures as " +"green checks. No codegen file or extern-C signature/effect changed, so the " +"conditional codegen-suite and gc_call_effects requirements do not apply." msgstr "" -#: src/internals/regexp-program-cache.md:52 +#: src/internals/weakmap-owned-index-validation.md:308 msgid "" -"`PERRY_REGEX_DIAG=1` reports compile and validation counts, identity/content " -"hits, bytes hashed, canonical dispatches, searches, and scratch allocation " -"and growth counts. Diagnostics deliberately inspect source bytes for " -"attribution; measure timings with diagnostics disabled. Cache payload lives " -"in traced GC cells; the census separately reports native cache metadata as " -"`regex.program_cache`." +"Build inputs, compiler/static-wrapper/binary hashes, raw perf/time runs, " +"three-run GC snapshots, Node output parity, witness failures, and tests are " +"retained under scratchpad `weakmap/evidence-oct7`. The main source archive " +"comes from 68e41faa; the two targets are separate. No push or PR was made." msgstr "" #: src/internals/garbage-collector.md:1 @@ -79206,14 +82124,17 @@ msgid "Collection paths" msgstr "Sammelpfade" #: src/internals/garbage-collector.md:27 -msgid "New GC-managed allocations normally enter 1 MiB nursery blocks" +#, fuzzy +msgid "" +"New GC-managed allocations normally enter nursery blocks of one aligned " +"region (2 MiB on Linux, 1 MiB elsewhere)" msgstr "Neue GC-managed-Zuweisungen geben normalerweise 1 MiB-Kindergärten ein" -#: src/internals/garbage-collector.md:29 +#: src/internals/garbage-collector.md:30 msgid "A collection can take one of three paths:" msgstr "Eine Sammlung kann einen von drei Wegen nehmen:" -#: src/internals/garbage-collector.md:31 +#: src/internals/garbage-collector.md:32 msgid "" "**Copying minor.** At a precise safepoint, live young objects are copied, " "roots and heap slots are rewritten, and whole from-space blocks are reset. " @@ -79226,7 +82147,7 @@ msgstr "" "sind, werden in `OLD_ARENA` befördert. Dies ist der schnelle " "Kindergartenpfad, und es hat eine ganze Block-Variante unten beschrieben." -#: src/internals/garbage-collector.md:35 +#: src/internals/garbage-collector.md:36 msgid "" "**Non-moving minor/fallback.** When collection begins somewhere that cannot " "safely relocate every live reference, the nursery is marked and swept in " @@ -79239,7 +82160,7 @@ msgstr "" "einen nicht-bewegten Pfad. Dies ist der Pfad der flachen `HAS_SURVIVED` → " "`TENURED` Flaggenpaar altert Objekte auf." -#: src/internals/garbage-collector.md:39 +#: src/internals/garbage-collector.md:40 msgid "" "**Full mark-sweep.** Major pacing, critical host pressure, explicit full " "work, or `PERRY_GEN_GC=0` trace both generations and reclaim dead old " @@ -79249,7 +82170,7 @@ msgstr "" "Vollarbeit, oder `PERRY_GEN_GC=0` verfolgen beide Generationen und fordern " "tote alte Objekte sowie Kindergartenmüll zurück." -#: src/internals/garbage-collector.md:43 +#: src/internals/garbage-collector.md:44 msgid "" "**Block-granular reclamation in the full sweep.** A synchronous full sweep " "reclaims an arena block without entering it when the cycle's exact pointer " @@ -79263,13 +82184,30 @@ msgid "" "and bytes on each sweep's `[gc] blocks:` line." msgstr "" -#: src/internals/garbage-collector.md:56 +#: src/internals/garbage-collector.md:57 +msgid "" +"**The allocation-point trigger check.** `gc_check_trigger` runs on every " +"`gc_malloc` and every arena block fill, and nearly always finds nothing due. " +"An evaluation of its ladder (old-gen reclaim, whole arena, young scavenge " +"cap, malloc count) that finds nothing due publishes a watermark: the malloc-" +"count threshold, and the young cap re-expressed as a bound on the inline " +"allocator's current-block offset — the only two ladder quantities that move " +"without a runtime write. Until one is crossed, the next check is two loads " +"and two compares instead of the ladder. Every other input is a " +"`TriggerInput` cell whose writes retire the watermark, and heap-generation " +"advances and Eden block switches retire it too, so a skipped check is one " +"that would have returned without acting. Unit-test builds re-derive every " +"fast-path answer with the full ladder and fail on a mismatch (`crates/perry-" +"runtime/src/gc/trigger_watermark.rs`)." +msgstr "" + +#: src/internals/garbage-collector.md:72 msgid "" "**Per-live-object cost of a synchronous full.** Three parts of a full scale " "with the live set, and each has a cheaper exact form:" msgstr "" -#: src/internals/garbage-collector.md:59 +#: src/internals/garbage-collector.md:75 msgid "" "_Membership._ The census answers \"is this address an arena object start?\" " "from one object-start bitmap per censused block (one bit per 8-byte " @@ -79278,23 +82216,24 @@ msgid "" "one bit test." msgstr "" -#: src/internals/garbage-collector.md:64 +#: src/internals/garbage-collector.md:80 msgid "" -"_Remembered-set rebuild._ When no young object is marked or pinned after the " -"mark and the malloc registry is empty, the old→young rebuild could only " -"produce an empty set, so the full installs an empty set without walking the " -"old generation. `PERRY_GC_DIAG=1` prints `[gc-remembered-rebuild] full " -"skipped=young_generation_unmarked`." +"_Remembered-set rebuild._ Full mark drains record live old parents' strong " +"old→young and old→malloc slots through the same descriptor visit that marks " +"their children. The cycle buffers these entries until the remembered-set " +"clear, including entries from final remark and the sweep-entry seed drain. " +"The pre-clear dirty snapshot repair still covers later stores into parents " +"already traced. No second old-generation walk is needed." msgstr "" -#: src/internals/garbage-collector.md:69 +#: src/internals/garbage-collector.md:89 msgid "" "_Sweep page accounting._ Consecutive single-page old objects are summed and " "applied to their page's metadata once, before any page-index flush that " "could zero it." msgstr "" -#: src/internals/garbage-collector.md:76 +#: src/internals/garbage-collector.md:95 msgid "" "**Promoted-cohort fulls.** Old-reclaim pacing credits every promotion to its " "growth baseline, so old-gen garbage that a minor promoted and that died " @@ -79317,7 +82256,7 @@ msgid "" "`[gc-trigger]` lines and a `[gc-promoted-cohort]` line per cohort full." msgstr "" -#: src/internals/garbage-collector.md:99 +#: src/internals/garbage-collector.md:118 msgid "" "**One pass per block in a synchronous full.** An unbudgeted census and an " "unbudgeted sweep parse each arena block themselves instead of calling the " @@ -79331,7 +82270,7 @@ msgid "" "that is not a forwarding stub without queueing it." msgstr "" -#: src/internals/garbage-collector.md:117 +#: src/internals/garbage-collector.md:136 msgid "" "`PERRY_GC_SCAVENGE` is on by default and lets nursery pressure route to the " "direct minor. `PERRY_GC_SCAVENGE_NURSERY_MB` tunes its base high-water cap, " @@ -79341,24 +82280,36 @@ msgstr "" "Kinderzimmers zum direkten Moll. `PERRY_GC_SCAVENGE_NURSERY_MB` stimmt seine " "Basis High-Wasser-Kappe, 16 MiB standardmäßig" -#: src/internals/garbage-collector.md:121 -msgid "tenuring feedback may grow the effective cap by up to 4×" -msgstr "Tenuring feedback kann die effektive Kappe um bis zu 4× wachsen" +#: src/internals/garbage-collector.md:140 +msgid "" +"The effective cap is a survival-driven ladder over that base, counted in " +"quarters of it" +msgstr "" + +#: src/internals/garbage-collector.md:143 +msgid "each thread starts at a quarter of the base" +msgstr "" + +#: src/internals/garbage-collector.md:145 +msgid "" +"(4 MiB) and stays there while its minors find little alive, which keeps the " +"young generation's footprint small. While survivor influx stays above 4% of " +"the cap the ladder grows in debounced ×2 steps, up to 4× the base" +msgstr "" -#: src/internals/garbage-collector.md:123 +#: src/internals/garbage-collector.md:149 msgid "" -"on live-set-bound workloads, where a fixed cap would multiply the per-" -"collection fixed cost by an enormous collection count. Generated write " -"barriers are also on by default. Turning them off makes generational minors " -"unsound, so the runtime deliberately falls back to full mark-sweep." +"(64 MiB), and it shrinks back while influx stays below 1%. On survivor-heavy " +"and live-set-bound workloads copying survivors, not a minor's fixed cost, " +"dominates, and a bigger Eden gives them time to die. The survivor target, " +"the promoted-cohort floor and the allocation-census seed point stay keyed on " +"the base: they measure lifetimes in bytes allocated, which a smaller Eden " +"must not shorten. Generated write barriers are also on by default. Turning " +"them off makes generational minors unsound, so the runtime deliberately " +"falls back to full mark-sweep." msgstr "" -"bei Workloads mit Live-Sets, bei denen eine fixe Obergrenze die Fixkosten je " -"Sammlung mit einer enormen Sammelzahl multipliziert. Erzeugte " -"Schreibbarrieren sind standardmäßig ebenfalls an. Wenn man sie ausschaltet, " -"macht es Generations-Molls unerhört, so fällt die Laufzeit bewusst auf " -"volles Mark-Sweep zurück." -#: src/internals/garbage-collector.md:128 +#: src/internals/garbage-collector.md:158 msgid "" "Old-generation page defragmentation is implemented, including the mutable-" "root rewrite contract that relocating an old page requires, but it is **opt-" @@ -79378,11 +82329,11 @@ msgstr "" "beschränkt. Die Evakuierung der Kindergärten und die normale alte Generation " "sind in jeder Hinsicht unbeeindruckt." -#: src/internals/garbage-collector.md:136 +#: src/internals/garbage-collector.md:166 msgid "Aging, promotion, and where an object is born" msgstr "Altern, Beförderung und wo ein Objekt geboren wird" -#: src/internals/garbage-collector.md:138 +#: src/internals/garbage-collector.md:168 msgid "" "The copying minor's tenuring threshold is **adaptive, not fixed**: it is the " "largest number of survivals `S` whose projected survivor occupancy still " @@ -79393,7 +82344,7 @@ msgstr "" "immer noch der gewünschten Überlebensgröße entspricht, an eine Decke von 4 " "geklemmt" -#: src/internals/garbage-collector.md:142 +#: src/internals/garbage-collector.md:172 msgid "" "and it drops to 1 (promote on first copy) when a measured survival-rate lock " "shows the aging round is filtering nothing. The loop is always on and has no " @@ -79405,7 +82356,25 @@ msgstr "" "immer an und hat keinen Env-Knopf; `crates/perry-runtime/src/gc/tenuring.rs` " "ist seine Definition und gibt das feedback-Signal an, das es verwendet." -#: src/internals/garbage-collector.md:147 +#: src/internals/garbage-collector.md:177 +msgid "" +"While the first nursery-growth sample is awaiting its first survivor round, " +"copying minors keep pointer-bearing parents young for one additional round. " +"Otherwise a parent can become old before its sample reaches the controller, " +"then keep fresh children alive through a remembered edge after the parent " +"dies. The collection snapshots this policy once and reads the GC type's " +"pointer-free fact; leaf objects retain the ordinary age. Explicit diagnostic " +"age pins also retain their exact age. The existing `PERRY_GC_DIAG` stream " +"reports `parent_probe=` on copying minors and `[gc-nursery-policy]` feedback " +"decisions. Quiet unlock hysteresis advances only after fresh allocation " +"covers the entry Eden budget: the nursery cap minus carried survivor " +"occupancy, credited only up to the existing survivor target (and at most " +"half the cap). Normal carried survivors do not stall the clock; excessive " +"carryover cannot make a retaining workload leave its measured promotion lock " +"early." +msgstr "" + +#: src/internals/garbage-collector.md:191 msgid "" "**Whole-block in-place promotion.** When the previous cycle measured a young-" "survival ratio at or above 95%" @@ -79413,7 +82382,7 @@ msgstr "" "**Ganzer Block an Ort und Stelle Beförderung.** Wenn der vorherige Zyklus " "ein Jugend-Überlebens-Verhältnis von oder über 95% gemessen hat" -#: src/internals/garbage-collector.md:150 +#: src/internals/garbage-collector.md:194 msgid "" "the next copying minor relabels the young blocks as old-gen instead of " "evacuating them object by object: nothing moves, so nothing in the heap or " @@ -79428,7 +82397,7 @@ msgstr "" "die Entscheidung des nächsten Zyklus misst und nicht angenommen wird —, mit " "Ausnahme der Volllebigkeit bei oder über 98 %" -#: src/internals/garbage-collector.md:156 +#: src/internals/garbage-collector.md:200 msgid "" "where the trace itself is skipped and every object on the block is " "registered as live. Two budgets bound the retained garbage that costs: a " @@ -79438,11 +82407,11 @@ msgstr "" "registriert ist. Zwei Budgets banden den Restmüll, der kostet: eine laufende " "Obergrenze auf beförderten toten Bytes" -#: src/internals/garbage-collector.md:160 +#: src/internals/garbage-collector.md:204 msgid "and an untraced-promotion floor" msgstr "und ein nicht verkehrender Boden" -#: src/internals/garbage-collector.md:162 +#: src/internals/garbage-collector.md:206 msgid "" "that forces a measuring cycle before the assumption can run away. A full " "collection resets both. `PERRY_GC_PROMOTE_IN_PLACE=0` reverts to object-by-" @@ -79457,7 +82426,7 @@ msgstr "" "`PERRY_GC_SCHEDULE_SEED`) zu machen, schalten den Pfad direkt ab, anstatt " "still zu stoppen, ihr eigenes Thema auszuüben." -#: src/internals/garbage-collector.md:170 +#: src/internals/garbage-collector.md:214 msgid "" "**Born-old thresholds are type-dependent.** A pointer-free allocation above " "16 KiB" @@ -79465,7 +82434,7 @@ msgstr "" "**Born-old Schwellen sind typabhängig.** Eine pointer-freie Zuweisung über " "16 KiB" -#: src/internals/garbage-collector.md:173 +#: src/internals/garbage-collector.md:217 msgid "" "is born in old-gen; a pointer-bearing one stays nursery-resident until 128 " "KiB" @@ -79473,7 +82442,7 @@ msgstr "" "wird im alten Gen geboren; ein Zeiger tragender bleibt kinderheimisch bis " "128 KiB" -#: src/internals/garbage-collector.md:175 +#: src/internals/garbage-collector.md:219 msgid "" "The split matters when reading a survival ratio: a flat threshold sends the " "intermediate backing stores of a growing array straight to old-gen, so the " @@ -79484,51 +82453,58 @@ msgstr "" "direkt zu alten Genen, so dass der Müll, den sie aufgeben, in der jungen " "Generation überhaupt nicht erscheint." -#: src/internals/garbage-collector.md:179 +#: src/internals/garbage-collector.md:223 msgid "Roots, by target" msgstr "Wurzeln, nach Ziel" -#: src/internals/garbage-collector.md:181 +#: src/internals/garbage-collector.md:225 msgid "One root-set analysis feeds two lowerings:" msgstr "Eine Wurzel-Set-Analyse füttert zwei Absenkungen:" -#: src/internals/garbage-collector.md:183 +#: src/internals/garbage-collector.md:227 msgid "target" msgstr "target" -#: src/internals/garbage-collector.md:183 +#: src/internals/garbage-collector.md:227 msgid "shipped precise-root lowering" msgstr "präzise-Root-Absenkung ausgeliefert" -#: src/internals/garbage-collector.md:185 +#: src/internals/garbage-collector.md:229 msgid "64-bit AArch64/arm64 and x86-64, including x86-64 Windows" msgstr "64-Bit AArch64/arm64 und x86-64, einschließlich x86-64 Windows" -#: src/internals/garbage-collector.md:185 +#: src/internals/garbage-collector.md:229 msgid "LLVM RS4GC statepoints plus Perry's compact native stack map" msgstr "LLVM RS4GC-Statuspunkte plus Perrys kompakte native Stapelkarte" -#: src/internals/garbage-collector.md:186 -msgid "`arm64_32` watchOS, ARM64 Windows, and unsupported architectures" -msgstr "`arm64_32` watchOS, ARM64 Windows und nicht unterstützte Architekturen" +#: src/internals/garbage-collector.md:230 +msgid "wasm32 WASI and ARM64 Windows" +msgstr "" -#: src/internals/garbage-collector.md:186 +#: src/internals/garbage-collector.md:230 msgid "Perry shadow frames" msgstr "Perry Schattenrahmen" -#: src/internals/garbage-collector.md:188 +#: src/internals/garbage-collector.md:232 msgid "" "Rooting is selected by the target. Native platforms always use LLVM " -"statepoints; environment controls and function-size estimates cannot " -"select shadow frames. Long-lived managed locals retain LLVM stack " -"storage and appear as direct frame locations in the statepoint stack " -"map. The compact map records contiguous native homes as a range, so " -"both machine code and metadata grow linearly with the locals and " -"safepoints. Moving collection rewrites those same locations before " -"generated code reloads them." +"statepoints; environment controls and function-size estimates cannot select " +"shadow frames. Long-lived managed locals retain LLVM stack storage and " +"appear as direct frame locations in the statepoint stack map. The compact " +"map records contiguous native homes as a range, so both machine code and " +"metadata grow linearly with the locals and safepoints. Moving collection " +"rewrites those same locations before generated code reloads them." msgstr "" -#: src/internals/garbage-collector.md:194 +#: src/internals/garbage-collector.md:240 +msgid "" +"WASI uses platform shadow frames because it has no native frame walker or " +"statepoint stack-map backend. ARM64 Windows lacks the required native " +"walker; watchOS ILP32 lacks a native map loader and currently refuses " +"compiler emission rather than pretending its LP64 offsets work." +msgstr "" + +#: src/internals/garbage-collector.md:245 msgid "" "Runtime-owned roots do not live in generated frames. Registered scanners " "visit module globals, pending async work, caches, registries, and other side " @@ -79543,7 +82519,46 @@ msgstr "" "`RuntimeHandleScope`/`RuntimeHandle` und müssen nach einem Aufruf, der " "sammeln kann, einen Handle erneut lesen." -#: src/internals/garbage-collector.md:200 +#: src/internals/garbage-collector.md:251 +msgid "" +"Root owners supply the representation. Generated globals and native " +"statepoint homes keep JSValue words at rest; raw managed locals are boxed " +"when stored and unboxed after a root reload. Runtime scanners and handles " +"distinguish JSValues from pointer fields whose owners guarantee a GC header. " +"Both feed one precise marker: decode the declared value representation, " +"admit the address, then read the header's color and enqueue an unmarked " +"object. Admission is O(1): the arena region descriptor says whether the " +"address is in this heap's region, in a live region of another thread's heap " +"(a Worker's, or a zero-copy transferred cell: the root is dropped without " +"reading its header), or outside every arena region, where the header " +"decides: an ARENA header there is a producer bug, any other header is a " +"malloc or process-lifetime cell of this heap. Admission reads no malloc " +"state and no collection census: local allocations born later and local old-" +"generation roots remain eligible. Root providers emit only their own agent's " +"roots (Worker records carry their creating agent). Under " +"`PERRY_GC_VERIFY_MARK` (and in unit tests) a root that is neither this " +"heap's object nor provably another heap's fails loudly: a malformed header, " +"an ARENA header outside this heap, or an unmarked header outside the arena " +"that is not one of this heap's malloc allocations. The same verification " +"rejects an untagged word naming one of this heap's objects in a JSValue " +"root, at global-root registration and at every scan. A numeric word that " +"resembles an address remains a number; native handle payloads are excluded " +"by their value-encoding band. Closure capture cells and temporary roots obey " +"the same producer contract." +msgstr "" + +#: src/internals/garbage-collector.md:274 +msgid "" +"Legacy shadow-frame homes on WASI and ARM64 Windows can still mix raw " +"pointers and JSValues. Their source kind retains the mixed decoder and " +"validity probe; these are the documented untyped platform fallback. " +"Structural header checks in verification builds and the existing evacuation " +"verifier check precise roots without changing their release marking " +"contract. Reached-block accounting belongs to tracing the admitted object, " +"rather than validating every root that aliases it." +msgstr "" + +#: src/internals/garbage-collector.md:282 msgid "" "The conservative native-stack scan is not part of the production default: " "`Auto` resolves to `SkipDisabled`. `PERRY_CONSERVATIVE_STACK_SCAN=full` is " @@ -79558,11 +82573,11 @@ msgstr "" "daher das Kopieren geringfügig nicht förderfähig; es ist nützlich Beweise, " "nicht ein zweites normales Rooting Backend." -#: src/internals/garbage-collector.md:206 +#: src/internals/garbage-collector.md:288 msgid "Barriers and weak references" msgstr "Barrieren und schwache Referenzen" -#: src/internals/garbage-collector.md:208 +#: src/internals/garbage-collector.md:290 msgid "" "Every old-to-young pointer publication must hit the remembered-set barrier. " "Codegen emits barriers for generated heap stores and runtime helpers perform " @@ -79575,7 +82590,7 @@ msgstr "" "Speicher. Eine kleine Spur erinnerte sich an alte Eltern, anstatt alle alten " "Gens zurückzuverfolgen." -#: src/internals/garbage-collector.md:213 +#: src/internals/garbage-collector.md:295 msgid "" "WeakRef, WeakMap, WeakSet, and FinalizationRegistry targets are excluded " "from the strong trace. Weak processing is **registry-scoped on every path**: " @@ -79596,11 +82611,11 @@ msgstr "" "anstatt O (arena) und ein budgetierter Zyklus kann zum Mutator zwischen " "Inhabern zurückkehren." -#: src/internals/garbage-collector.md:223 +#: src/internals/garbage-collector.md:305 msgid "Budgets, memory pressure, and released blocks" msgstr "Haushaltspläne, Gedächtnisdruck und freigegebene Blöcke" -#: src/internals/garbage-collector.md:225 +#: src/internals/garbage-collector.md:307 msgid "" "The collector derives a heap budget, in priority order, from " "`PERRY_GC_HEAP_LIMIT` (MiB), Apple embedded available-memory APIs, container " @@ -79614,15 +82629,15 @@ msgstr "" "Skala Trigger-Obergrenzen, Rückforderungsschwellen, Kinderruhe und RSS-" "Druckschwellen gesenkt; desktop/server-Defaults bleiben unverändert." -#: src/internals/garbage-collector.md:231 +#: src/internals/garbage-collector.md:313 msgid "Platform hosts call `js_gc_memory_pressure(level)`:" msgstr "Plattform-Hosts rufen `js_gc_memory_pressure(level)`:" -#: src/internals/garbage-collector.md:233 +#: src/internals/garbage-collector.md:315 msgid "warning (`1`) requests a prompt minor;" msgstr "warning (`1`) requests a prompt minor;" -#: src/internals/garbage-collector.md:234 +#: src/internals/garbage-collector.md:316 msgid "" "critical (`2+`) requests a full collection so old-gen garbage and idle arena " "blocks can be reclaimed;" @@ -79630,7 +82645,7 @@ msgstr "" "kritische (`2+`) verlangt eine vollständige Sammlung, so dass alte Müll-und " "Leerlauf-Arenenblöcke zurückgewonnen werden können;" -#: src/internals/garbage-collector.md:236 +#: src/internals/garbage-collector.md:318 msgid "" "if collection is unsafe, the request is made sticky and drains at the next " "precise safepoint/allocation check." @@ -79638,7 +82653,7 @@ msgstr "" "if collection is unsafe, the request is made sticky and drains at the next " "precise safepoint/allocation check." -#: src/internals/garbage-collector.md:239 +#: src/internals/garbage-collector.md:321 msgid "" "Released 1 MiB blocks first enter a **per-thread LIFO reuse pool under a " "process-wide byte cap**. The reuse order is thread-local; the budget is not " @@ -79654,7 +82669,7 @@ msgstr "" "`gc_block_pool_cap_with_budget` in `crates/perry-runtime/src/gc/heap_budget." "rs` abgeleitet: 64 MiB" -#: src/internals/garbage-collector.md:245 +#: src/internals/garbage-collector.md:327 #, fuzzy msgid "" "on an unconstrained desktop/server process, scaled to one eighth of a device/" @@ -79675,7 +82690,7 @@ msgstr "" "unsafe/deferred Perioden und entleert den Pool, wenn die geschuldete " "Vollsammlung seine Arena-Reklamation beendet." -#: src/internals/garbage-collector.md:257 +#: src/internals/garbage-collector.md:339 msgid "" "Reported heap usage (`js_arena_stats`, `process.memoryUsage().heapUsed`) is " "an exact post-collection **live census** plus incremental deltas, not a sum " @@ -79685,11 +82700,11 @@ msgstr "" "heapUsed`) ist eine exakte Post-Sammlung **Lebendzählung** plus " "inkrementelle Deltas, keine Summe von Blockhochwasser-Offsets." -#: src/internals/garbage-collector.md:261 +#: src/internals/garbage-collector.md:343 msgid "Idle-time reclaim" msgstr "" -#: src/internals/garbage-collector.md:263 +#: src/internals/garbage-collector.md:345 msgid "" "Every automatic collection above is scheduled by allocation, so a program " "that bursts and then goes quiet keeps whatever the last mid-burst cycle left " @@ -79700,40 +82715,40 @@ msgid "" "completed since its last full, and 3000 ms" msgstr "" -#: src/internals/garbage-collector.md:271 +#: src/internals/garbage-collector.md:353 msgid "" "have passed since that collection was observed, it opens a full budgeted " "cycle with the block-pool drain armed and steps it in 4000 µs" msgstr "" -#: src/internals/garbage-collector.md:274 +#: src/internals/garbage-collector.md:356 msgid "" "slices, returning to the loop the moment a wake is pending. Two reducer " "fulls are never closer than 10000 ms" msgstr "" -#: src/internals/garbage-collector.md:277 +#: src/internals/garbage-collector.md:359 msgid "apart. A full that lowers old-gen occupancy by less than 5 percent" msgstr "" -#: src/internals/garbage-collector.md:279 +#: src/internals/garbage-collector.md:361 msgid "of what it started with (or by less than 4 MiB" msgstr "" -#: src/internals/garbage-collector.md:281 +#: src/internals/garbage-collector.md:363 msgid "" ") doubles the number of collections required before the next attempt, up to " "32" msgstr "" -#: src/internals/garbage-collector.md:283 +#: src/internals/garbage-collector.md:365 msgid "" "(two to that power); a productive full resets the requirement to one. The " "same slicing finishes a budgeted cycle the pacer left open when the mutator " "went quiet." msgstr "" -#: src/internals/garbage-collector.md:287 +#: src/internals/garbage-collector.md:369 msgid "" "Arena capacity has a second re-arm signal because returning a proven-empty " "block deliberately takes two full collection observations, while the " @@ -79741,157 +82756,158 @@ msgid "" "capacity floor," msgstr "" -#: src/internals/garbage-collector.md:291 +#: src/internals/garbage-collector.md:373 msgid "two consecutive post-collection live/capacity readings" msgstr "" -#: src/internals/garbage-collector.md:293 +#: src/internals/garbage-collector.md:375 msgid "at or below 50 percent" msgstr "" -#: src/internals/garbage-collector.md:295 +#: src/internals/garbage-collector.md:377 msgid "" "open a bounded right-size episode. It grants only enough idle fulls to reach " "two full observations" msgstr "" -#: src/internals/garbage-collector.md:298 +#: src/internals/garbage-collector.md:380 msgid "" "(counting any full already in the low-utilization streak), and stops early " "once live data reaches 60 percent of capacity." msgstr "" -#: src/internals/garbage-collector.md:301 +#: src/internals/garbage-collector.md:383 msgid "" "After a bounded episode, stable low occupancy cannot immediately repeat it: " "a new episode re-arms only after utilization reaches 70 percent" msgstr "" -#: src/internals/garbage-collector.md:304 +#: src/internals/garbage-collector.md:386 msgid "or capacity grows by at least both 25 percent and 8 MiB." msgstr "" -#: src/internals/garbage-collector.md:307 +#: src/internals/garbage-collector.md:389 msgid "" "That hysteresis preserves burst headroom and prevents an unreleasably " "fragmented heap from buying a full every ten seconds. The right-size debt " "still passes through the reducer's quiet, rate, wake, and work-budget gates." msgstr "" -#: src/internals/garbage-collector.md:312 +#: src/internals/garbage-collector.md:394 msgid "" "`PERRY_GC_DIAG=1` reports the reducer's counters on the `[gc-idle-reclaim]` " "exit line, and `PERRY_GC_IDLE_RECLAIM=0` disables it." msgstr "" -#: src/internals/garbage-collector.md:317 +#: src/internals/garbage-collector.md:399 msgid "Supported controls" msgstr "Unterstützte Steuerungen" -#: src/internals/garbage-collector.md:319 +#: src/internals/garbage-collector.md:401 msgid "" "These are the operational controls most useful outside collector development:" msgstr "Dies sind die am nützlichsten außerhalb der Kollektor-Entwicklung:" -#: src/internals/garbage-collector.md:321 +#: src/internals/garbage-collector.md:403 msgid "knob" msgstr "knob" -#: src/internals/garbage-collector.md:321 +#: src/internals/garbage-collector.md:403 msgid "purpose" msgstr "purpose" -#: src/internals/garbage-collector.md:323 +#: src/internals/garbage-collector.md:405 msgid "`PERRY_GEN_GC=0`" msgstr "`PERRY_GEN_GC=0`" -#: src/internals/garbage-collector.md:323 +#: src/internals/garbage-collector.md:405 msgid "bisection fallback to full mark-sweep" msgstr "bis zum Ende des Mark-Sweep" -#: src/internals/garbage-collector.md:324 +#: src/internals/garbage-collector.md:406 msgid "`PERRY_WRITE_BARRIERS=0`" msgstr "`PERRY_WRITE_BARRIERS=0`" -#: src/internals/garbage-collector.md:324 +#: src/internals/garbage-collector.md:406 msgid "compile/runtime barrier bisection; also forces full mark-sweep" msgstr "compile/runtime Barriere Bisektion; auch Kräfte volle Markierung-Sweep" -#: src/internals/garbage-collector.md:325 +#: src/internals/garbage-collector.md:407 msgid "`PERRY_GC_SCAVENGE=0`" msgstr "`PERRY_GC_SCAVENGE=0`" -#: src/internals/garbage-collector.md:325 +#: src/internals/garbage-collector.md:407 msgid "disable direct nursery scavenging for pacing comparison" msgstr "" "Deaktivieren Sie das direkte Kinderzimmer-Scavenging für den Schrittvergleich" -#: src/internals/garbage-collector.md:326 +#: src/internals/garbage-collector.md:408 msgid "`PERRY_GC_PROMOTE_IN_PLACE=0`" msgstr "`PERRY_GC_PROMOTE_IN_PLACE=0`" -#: src/internals/garbage-collector.md:326 +#: src/internals/garbage-collector.md:408 msgid "revert whole-block promotion to object-by-object evacuation" msgstr "Ganzblockförderung auf Objekt-für-Objekt-Evakuierung umkehren" -#: src/internals/garbage-collector.md:327 +#: src/internals/garbage-collector.md:409 msgid "`PERRY_GC_SCAVENGE_NURSERY_MB=N`" msgstr "`PERRY_GC_SCAVENGE_NURSERY_MB=N`" -#: src/internals/garbage-collector.md:327 +#: src/internals/garbage-collector.md:409 msgid "set the base nursery cap" msgstr "Einstellung der Basis Kindermütze" -#: src/internals/garbage-collector.md:328 +#: src/internals/garbage-collector.md:410 msgid "`PERRY_GC_HEAP_LIMIT=N`" msgstr "`PERRY_GC_HEAP_LIMIT=N`" -#: src/internals/garbage-collector.md:328 +#: src/internals/garbage-collector.md:410 msgid "override the process heap budget in MiB" msgstr "überschreiben Sie das Prozesshaufenbudget in MiB" -#: src/internals/garbage-collector.md:330 +#: src/internals/garbage-collector.md:411 msgid "`PERRY_CONSERVATIVE_STACK_SCAN=full`" msgstr "`PERRY_CONSERVATIVE_STACK_SCAN=full`" -#: src/internals/garbage-collector.md:330 +#: src/internals/garbage-collector.md:411 msgid "diagnostic full native-stack scan; disables copying" msgstr "Diagnose-Voll-Native-Stacks-Scan; deaktiviert Kopieren" -#: src/internals/garbage-collector.md:331 +#: src/internals/garbage-collector.md:412 msgid "`PERRY_GC_TRACE=1`" msgstr "`PERRY_GC_TRACE=1`" -#: src/internals/garbage-collector.md:331 +#: src/internals/garbage-collector.md:412 msgid "emit structured per-cycle trace records" msgstr "emittieren strukturierte pro-Zyklus-Trace-Datensätze" -#: src/internals/garbage-collector.md:332 +#: src/internals/garbage-collector.md:413 msgid "" "emit human-readable collector diagnostics (per cycle, plus `[gc-trigger]`/" "`[gc-full]`/`[gc-budgeted]`/`[gc-charge]` decision and charge attribution " "and the per-minor `[gc-survival]` root attribution)" msgstr "" -#: src/internals/garbage-collector.md:333 +#: src/internals/garbage-collector.md:414 #, fuzzy msgid "`PERRY_ALLOC_SITE_SAMPLE=N`" msgstr "`PERRY_GC_HEAP_LIMIT=N`" -#: src/internals/garbage-collector.md:333 +#: src/internals/garbage-collector.md:414 msgid "" "sample the arena allocation-site histogram every N bytes (`[alloc-site]`); " "`1`/`on` selects the default interval" msgstr "" -#: src/internals/garbage-collector.md:335 +#: src/internals/garbage-collector.md:416 #, fuzzy msgid "" "Rooting stress uses `PERRY_GC_SCHEDULE_SEED`, `PERRY_GC_SCHEDULE_RATE`, " "`PERRY_GC_SCHEDULE_ALLOC_KB`, `PERRY_GC_FORCE_EVACUATE`, " "`PERRY_GC_VERIFY_EVACUATION`, `PERRY_GC_PROTECT_FROMSPACE`, " -"`PERRY_GC_PROTECT_FROMSPACE_DEPTH`, `PERRY_GC_FROMSPACE_SCAN`, and " -"`PERRY_GC_FROMSPACE_SCAN_ABORT`. Their exact contracts and non-vacuity " +"`PERRY_GC_PROTECT_FROMSPACE_DEPTH`, `PERRY_GC_FROMSPACE_SCAN`, " +"`PERRY_GC_FROMSPACE_SCAN_ABORT`, `PERRY_GC_PROTECT_OLD_SWEEP` and " +"`PERRY_GC_BUDGETED_OLD_RECLAIM`. Their exact contracts and non-vacuity " "requirements live in the [rooting invariant](gc-rooting-invariant.md). " "Research/bisection controls such as `PERRY_GC_INCREMENTAL`, " "`PERRY_GC_IDLE_RECLAIM`, `PERRY_GC_MAJOR_PACING_FLOOR_MB`, " @@ -79913,7 +82929,7 @@ msgstr "" "`PERRY_STACKMAP_WALKER` werden akzeptiert, sind aber keine zusätzlichen " "unterstützten Kollektormodi." -#: src/internals/garbage-collector.md:348 +#: src/internals/garbage-collector.md:430 msgid "" "`scripts/check_gc_env_knobs.py` derives the accepted names from live runtime/" "codegen/compiler parsers and rejects a current document, executable script, " @@ -79943,11 +82959,11 @@ msgstr "" "fehlschlägt `cargo-test`; auch kann nicht ruhig gehen, während diese Seite " "hält Anspruch auf die alte Sache." -#: src/internals/garbage-collector.md:360 +#: src/internals/garbage-collector.md:442 msgid "Validation and CI authority" msgstr "Validierung und CI-Behörde" -#: src/internals/garbage-collector.md:362 +#: src/internals/garbage-collector.md:444 msgid "" "As of 2026-08-16, branch protection requires exactly one status, `pr-gate` — " "the fan-in of `test.yml`'s PR tier (see `docs/src/testing/ci-tiers.md`; the " @@ -79959,37 +82975,37 @@ msgstr "" "md`; die Ebenenrichtlinie ist `scripts/ci_plan.py`). Die GC-spezifische " "Abdeckung wird bewusst aufgeteilt:" -#: src/internals/garbage-collector.md:366 +#: src/internals/garbage-collector.md:448 msgid "where it runs" msgstr "wo es läuft" -#: src/internals/garbage-collector.md:366 +#: src/internals/garbage-collector.md:448 msgid "required status" msgstr "erforderlicher Status" -#: src/internals/garbage-collector.md:368 +#: src/internals/garbage-collector.md:450 msgid "root-holder custody, GC-knob drift, and this page's path/number claims" msgstr "" "root-holder-Gewahrsam, GC-Knob Drift, und diese Seite path/number Ansprüche" -#: src/internals/garbage-collector.md:368 +#: src/internals/garbage-collector.md:450 msgid "`test.yml` → `lint`" msgstr "`test.yml` → `lint`" -#: src/internals/garbage-collector.md:368 +#: src/internals/garbage-collector.md:450 msgid "yes (via `pr-gate`)" msgstr "Ja (über `pr-gate`)" -#: src/internals/garbage-collector.md:369 +#: src/internals/garbage-collector.md:451 msgid "runtime unit suite and `run_memory_stability_tests.sh` four-mode matrix" msgstr "" "Laufzeiteinheit Suite und `run_memory_stability_tests.sh` Vier-Modus-Matrix" -#: src/internals/garbage-collector.md:369 +#: src/internals/garbage-collector.md:451 msgid "`test.yml` → `cargo-test`" msgstr "`test.yml` → `cargo-test`" -#: src/internals/garbage-collector.md:369 +#: src/internals/garbage-collector.md:451 msgid "" "yes (via `pr-gate`; the PR tier is diff-scoped, the sweep/full tiers run the " "workspace)" @@ -79997,7 +83013,7 @@ msgstr "" "ja (über `pr-gate`; die PR-Ebene ist diff-scoped, die sweep/full-Ebenen " "laufen den Arbeitsbereich)" -#: src/internals/garbage-collector.md:370 +#: src/internals/garbage-collector.md:452 msgid "" "GC × representation-selection matrix, rooting-bug instruments, write-barrier " "stress" @@ -80005,25 +83021,25 @@ msgstr "" "GC × Darstellungs-Auswahl-Matrix, Rooting-Bug-Instrumente, Schreib-Barriere-" "Stress" -#: src/internals/garbage-collector.md:370 +#: src/internals/garbage-collector.md:452 msgid "`test.yml` → `gc-stress`" msgstr "`test.yml` → `gc-stress`" -#: src/internals/garbage-collector.md:370 +#: src/internals/garbage-collector.md:452 msgid "yes (via `pr-gate`; PR subset on PRs, full matrix in the sweep)" msgstr "ja (über `pr-gate`; PR-Teilmenge auf PRs, volle Matrix im Sweep)" -#: src/internals/garbage-collector.md:371 +#: src/internals/garbage-collector.md:453 msgid "emitted root dominance, including native statepoint IR" msgstr "emittierte Root-Dominanz, einschließlich nativer Statepoint IR" -#: src/internals/garbage-collector.md:371 +#: src/internals/garbage-collector.md:453 msgid "`gc-root-dominance.yml`" msgstr "`gc-root-dominance.yml`" -#: src/internals/garbage-collector.md:371 -#: src/internals/garbage-collector.md:372 -#: src/internals/garbage-collector.md:373 +#: src/internals/garbage-collector.md:453 +#: src/internals/garbage-collector.md:454 +#: src/internals/garbage-collector.md:455 msgid "" "not branch-required; PR arm opt-in via `run-extended-tests`, six-hourly on " "`main`" @@ -80031,27 +83047,27 @@ msgstr "" "nicht verzweigt erforderlich; PR-Arm Opt-in über `run-extended-tests`, sechs " "Stunden lang auf `main`" -#: src/internals/garbage-collector.md:372 +#: src/internals/garbage-collector.md:454 msgid "pinned collector counters/RSS/wall matrix" msgstr "gepinnter Kollektor counters/RSS/wall Matrix" -#: src/internals/garbage-collector.md:372 +#: src/internals/garbage-collector.md:454 msgid "`gc-ratchet.yml`" msgstr "`gc-ratchet.yml`" -#: src/internals/garbage-collector.md:373 +#: src/internals/garbage-collector.md:455 msgid "thread-local mechanism/policy budget" msgstr "thread-local mechanism/policy Budget" -#: src/internals/garbage-collector.md:373 +#: src/internals/garbage-collector.md:455 msgid "`tls-budget.yml`" msgstr "`tls-budget.yml`" -#: src/internals/garbage-collector.md:375 +#: src/internals/garbage-collector.md:457 msgid "Useful local preflight commands:" msgstr "Nützliche lokale Vorflugbefehle:" -#: src/internals/garbage-collector.md:388 +#: src/internals/garbage-collector.md:470 msgid "" "The dedicated performance/rooting workflows have broader compiler and host " "requirements; their workflow files are the authority for exact commands and " @@ -80061,11 +83077,11 @@ msgstr "" "Compiler- und Host-Anforderungen; ihre Workflow-Dateien sind die Autorität " "für exakte Befehle und Relevanzfilter." -#: src/internals/garbage-collector.md:392 +#: src/internals/garbage-collector.md:474 msgid "Historical evidence" msgstr "Historische Beweise" -#: src/internals/garbage-collector.md:394 +#: src/internals/garbage-collector.md:476 msgid "" "[Generational GC plan](https://github.com/PerryTS/perry/blob/main/docs/" "generational-gc-plan.md): original design and phase-by-phase landing log." @@ -80073,7 +83089,7 @@ msgstr "" "[Generationenplan für GC](https://github.com/PerryTS/perry/blob/main/docs/" "generational-gc-plan.md): Originalentwurf und Phasen-für-Phasen-Landebuch." -#: src/internals/garbage-collector.md:396 +#: src/internals/garbage-collector.md:478 msgid "" "[Statepoint GC experiment](https://github.com/PerryTS/perry/blob/main/docs/" "statepoint-gc-experiment.md): chronological prototype measurements and " @@ -80083,7 +83099,7 @@ msgstr "" "statepoint-gc-experiment.md): chronologische Prototypenmessungen und " "Korrekturen, die zum nativen Standard führen." -#: src/internals/garbage-collector.md:398 +#: src/internals/garbage-collector.md:480 msgid "" "[GC rooting invariant](gc-rooting-invariant.md): current codegen soundness " "rule, checker modes, known blind spots, and debugging instruments." @@ -80092,7 +83108,7 @@ msgstr "" "Soundness-Regel, Checker-Modi, bekannte Blind-Spots und Debugging-" "Instrumente." -#: src/internals/garbage-collector.md:400 +#: src/internals/garbage-collector.md:482 msgid "" "[Memory Model](memory-model.md): NaN-boxing, allocation representation, and " "platform memory-tooling notes." @@ -80658,9 +83674,10 @@ msgstr "" "zuerst läuft." #: src/internals/gc-rooting-invariant.md:169 +#, fuzzy msgid "" -"**It is blind to three classes, all found the hard way. A clean report is " -"not evidence for any of them:**" +"**It is blind to four classes, all found the hard way. A clean report is not " +"evidence for any of them:**" msgstr "" "**Es ist blind für drei Klassen, alle fanden den harten Weg. Ein sauberer " "Bericht ist kein Beweis für einen von ihnen:**" @@ -80705,6 +83722,20 @@ msgstr "" #: src/internals/gc-rooting-invariant.md:184 msgid "" +"**A slot the collector was told not to visit** (#11550) — not a rooting bug " +"at all. The object spill store read a buffer's uninitialized tail as the " +"slot's old value; pointer-shaped leftovers turned the first store into a " +"\"pointer over pointer\" overwrite, which skips the GC slot-mask update, so " +"the slot was never marked or rewritten. Every root was correct, and the IR " +"has nothing to see. Tell: the holder of the stale value is a _live_ object " +"whose sibling slots were rewritten, and " +"`PERRY_GC_PROTECT_FROMSPACE_HOLDERS=1`'s report names nothing. When a " +"runtime store helper takes an `old_bits` shortcut, the old bits must come " +"from inside the element range the GC walks." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:194 +msgid "" "For the classes above, the instruments that catch them are the schedule/" "quarantine arms below and a _dependency-scale_ workload — #7280 records 25 " "curated corpus files passing while 20 lines of stock zod fail." @@ -80714,23 +83745,22 @@ msgstr "" "Arbeitsbelastung — #7280 zeichnet 25 kuratierte Corpus-Dateien auf, die " "passieren, während 20 Zeilen Stock zod fehlschlagen." -#: src/internals/gc-rooting-invariant.md:188 +#: src/internals/gc-rooting-invariant.md:198 msgid "" "**A fourth class was on this list until #7663 and is now covered: the " -"lowering that actually ships.** The corpus used to be compiled under a" -" forced shadow lowering — the shadow stack — because the checker " -"anchored on `@js_shadow_slot_bind` and the native lowering emits zero " -"of them. That made a green `gc-root-dominance` a statement about a " -"lowering that has not been the default on any walkable-frame target " -"since #7370. **Run both**, and know which one you ran:" +"lowering that actually ships.** The corpus used to be compiled under a " +"forced shadow lowering — the shadow stack — because the checker anchored on " +"`@js_shadow_slot_bind` and the native lowering emits zero of them. That made " +"a green `gc-root-dominance` a statement about a lowering that has not been " +"the default on any walkable-frame target since #7370. **Run both**, and know " +"which one you ran:" msgstr "" -#: src/internals/gc-rooting-invariant.md:197 -#, fuzzy +#: src/internals/gc-rooting-invariant.md:207 msgid "# SHADOW: the actual WASI platform lowering. Anchors on root stores.\n" msgstr "" -#: src/internals/gc-rooting-invariant.md:213 +#: src/internals/gc-rooting-invariant.md:223 msgid "" "Each mode **refuses the other's corpus** rather than reporting it clean: the " "native corpus has zero root stores, so `--min-binds` fails there, and the " @@ -80741,11 +83771,11 @@ msgstr "" "fehlschlägt, und der Schattenkorpus hat Null-Safepoints, so dass `--min-" "statepoints` dort fehlschlägt." -#: src/internals/gc-rooting-invariant.md:217 +#: src/internals/gc-rooting-invariant.md:227 msgid "What `--statepoints` checks, and how it differs" msgstr "Was `--statepoints` überprüft und wie es sich unterscheidet" -#: src/internals/gc-rooting-invariant.md:219 +#: src/internals/gc-rooting-invariant.md:229 msgid "" "Under native roots a value is a root at a safepoint iff it appears in that " "`gc.statepoint`'s `\"gc-live\"` bundle, and its identity below the safepoint " @@ -80757,7 +83787,7 @@ msgstr "" "Identität unterhalb des sicheren Punktes ist das `gc.relocate` Ergebnis. So " "\"muss der Wurzelspeicher jeden späteren Sammelpunkt beherrschen\" wird:" -#: src/internals/gc-rooting-invariant.md:224 +#: src/internals/gc-rooting-invariant.md:234 msgid "" "No register naming a GC object may be USED below a safepoint unless it is " "the relocated value." @@ -80765,7 +83795,7 @@ msgstr "" "Kein Register, das ein GC-Objekt benannt, darf unterhalb eines sicheren " "Punktes ANGEWENDET werden, es sei denn, es ist der verschobene Wert." -#: src/internals/gc-rooting-invariant.md:227 +#: src/internals/gc-rooting-invariant.md:237 msgid "" "The line that does the work is **tracked vs untracked**. LLVM relocates `ptr " "addrspace(1)` SSA values and rewrites their dominated uses, so those are " @@ -80779,23 +83809,23 @@ msgstr "" "NaN-Boxen, so dass ein JSValue den größten Teil seines Lebens als `double` " "verbringt. Zwei Urteilsklassen, weil sie zwei verschiedene Korrekturen haben:" -#: src/internals/gc-rooting-invariant.md:233 +#: src/internals/gc-rooting-invariant.md:243 msgid "class" msgstr "class" -#: src/internals/gc-rooting-invariant.md:233 +#: src/internals/gc-rooting-invariant.md:243 msgid "means" msgstr "means" -#: src/internals/gc-rooting-invariant.md:233 +#: src/internals/gc-rooting-invariant.md:243 msgid "fix" msgstr "fix" -#: src/internals/gc-rooting-invariant.md:235 +#: src/internals/gc-rooting-invariant.md:245 msgid "`unrooted`" msgstr "`unrooted`" -#: src/internals/gc-rooting-invariant.md:235 +#: src/internals/gc-rooting-invariant.md:245 msgid "" "no `ptr addrspace(1)` value in the register's cast chain is in the " "safepoint's live bundle. Nothing marks or rewrites the object." @@ -80803,15 +83833,15 @@ msgstr "" "kein `ptr addrspace(1)`-Wert in der Cast-Kette des Registers ist im Live-" "Bundle des Safepoints. Nichts markiert oder schreibt das Objekt um." -#: src/internals/gc-rooting-invariant.md:235 +#: src/internals/gc-rooting-invariant.md:245 msgid "root it" msgstr "Wurzel es" -#: src/internals/gc-rooting-invariant.md:236 +#: src/internals/gc-rooting-invariant.md:246 msgid "`stale`" msgstr "`stale`" -#: src/internals/gc-rooting-invariant.md:236 +#: src/internals/gc-rooting-invariant.md:246 msgid "" "the object IS in the bundle and is relocated, but a raw copy of its pre-move " "address is used below" @@ -80819,11 +83849,11 @@ msgstr "" "das Objekt IST im Bundle und wird verschoben, aber eine rohe Kopie seiner " "Pre-Move-Adresse wird unten verwendet" -#: src/internals/gc-rooting-invariant.md:236 +#: src/internals/gc-rooting-invariant.md:246 msgid "re-derive from the relocated value (`OperandProtection::Reload`)" msgstr "Re-Derivat aus dem verschobenen Wert (`OperandProtection::Reload`)" -#: src/internals/gc-rooting-invariant.md:238 +#: src/internals/gc-rooting-invariant.md:248 msgid "" "Two things this mode gets for free that the shadow modes cannot: " "**`NONCOLLECTING` is not consulted** — LLVM already decided which calls are " @@ -80840,7 +83870,7 @@ msgstr "" "Callee**`--moving-only` klassiert sich also eher gegen das reale Symbol als " "gegen `llvm.experimental.gc.statepoint.p0`." -#: src/internals/gc-rooting-invariant.md:245 +#: src/internals/gc-rooting-invariant.md:255 msgid "" "It parses the emitted LLVM IR, builds per-function CFGs, computes real " "Cooper/Harvey/Kennedy dominance, and reports every **collection point** that " @@ -80865,15 +83895,36 @@ msgstr "" "Sammeln, so dass eine Lücke in seinem Modell einen falsch positiven, nie " "verpassten Fehler kostet." -#: src/internals/gc-rooting-invariant.md:255 +#: src/internals/gc-rooting-invariant.md:265 +msgid "" +"**Phi edges that replace the value are not part of its window (#11604).** " +"When the bound register reaches the producing instruction through a `phi`, a " +"path that enters the join through an edge whose operand is something _else_ " +"(another register or a constant) delivers that other value to the slot, not " +"the one being checked. So the window walk does not take such an edge: a " +"collector reachable from the producer only through it is not reported. This " +"is the shadow-mode twin of #7664's `--statepoints` refinement. The shape " +"that needed it is S2's template coercion (#11554): `phi [ %v, %entry ], " +"[ %coerced, %tmpl_coerce.slow ]`, where the only collecting call is on the " +"arm that replaces `%v`. Before the refinement that one join read as 96 " +"violations. A collector on an edge that _carries_ the value, or between the " +"join and the bind, is still reported, and `--self-test` asserts both " +"(`_SELFTEST_PHI_SAFE_EDGE` / `_SELFTEST_PHI_HAZARD`). `--stale-registers` " +"applies the same rule when a use reaches its source only through such a phi " +"(`_stale_use_replacing_edges`). That took the stale budgets from 39 to 2 " +"(curated) and from 118 to 10 (dependency-scale). The dependency-scale corpus " +"had been at 457 on `main`, and no step reported it." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:282 msgid "For a single file you are iterating on:" msgstr "Für eine einzelne Datei iterieren Sie auf:" -#: src/internals/gc-rooting-invariant.md:263 +#: src/internals/gc-rooting-invariant.md:290 msgid "Both env knobs matter, for different reasons." msgstr "Beide Env-Knöpfe sind aus unterschiedlichen Gründen wichtig." -#: src/internals/gc-rooting-invariant.md:265 +#: src/internals/gc-rooting-invariant.md:292 msgid "" "`PERRY_GC_MOVING_LOOP_POLLS=1` is what puts `js_gc_loop_safepoint` in the " "IR. It is the only collection point a **back edge itself** introduces — a " @@ -80889,7 +83940,7 @@ msgstr "" "zwei Punkten eines sonst inerten Schleifenkörpers benötigt, kann also nicht " "ohne ihn im Korpus erscheinen." -#: src/internals/gc-rooting-invariant.md:271 +#: src/internals/gc-rooting-invariant.md:298 #, fuzzy msgid "" "It is **not** what makes the `MOVING` classification work, and it is not the " @@ -80914,7 +83965,7 @@ msgstr "" "wie `js_object_set_field_by_name`, `js_object_get_field_ic_miss` und " "`js_closure_call1`. Die bewegen sich ohne Umfragen in ihrer Nähe." -#: src/internals/gc-rooting-invariant.md:283 +#: src/internals/gc-rooting-invariant.md:310 msgid "" "So: turn the knob on, because it widens what the corpus can express, but do " "not read a poll-free function as safe." @@ -80922,14 +83973,14 @@ msgstr "" "Also: Schalten Sie den Knopf ein, denn er erweitert, was der Korpus " "ausdrücken kann, aber lesen Sie keine pollefreie Funktion als sicher." -#: src/internals/gc-rooting-invariant.md:286 +#: src/internals/gc-rooting-invariant.md:313 msgid "" "`POLL_CAPABLE_RUNTIME` is by EXACT emitted symbol, and that has bitten twice" msgstr "" "`POLL_CAPABLE_RUNTIME` ist durch EXACT emittiertes Symbol, und das hat " "zweimal gebissen" -#: src/internals/gc-rooting-invariant.md:288 +#: src/internals/gc-rooting-invariant.md:315 msgid "" "`movers` is a set-membership test on the callee name, so an entry that names " "a symbol codegen does not emit classifies nothing, forever, and looks " @@ -80941,7 +83992,7 @@ msgstr "" "sieht genau wie Abdeckung während es tut. Zwei Runden davon wurden nun " "gemessen:" -#: src/internals/gc-rooting-invariant.md:292 +#: src/internals/gc-rooting-invariant.md:319 #, fuzzy msgid "" "**A real symbol codegen never emits.** The set carried " @@ -80974,7 +84025,7 @@ msgstr "" "PERRY_GC_PROTECT_FROMSPACE_DEPTH=800` bei zod `clone` Fehler. Der Beschützer " "und der Checker waren anderer Meinung; der Checker war falsch." -#: src/internals/gc-rooting-invariant.md:308 +#: src/internals/gc-rooting-invariant.md:335 msgid "" "**Ten names that were not symbols at all.** `js_apply_function`, " "`js_array_for_each`, `js_array_sort`, `js_call_closure`, `js_call_value`, " @@ -80991,13 +84042,13 @@ msgstr "" "`js_function_call`, `js_invoke_closure`, `js_object_get_property`, " "`js_object_set_property`, `js_string_replace` — extrapolierte Schreibweisen, " "keiner von ihnen ein `extern \"C\" fn` irgendwo in der Laufzeit. Vier der " -"zehn waren vier verschiedene Arten zu sagen, \"rufen Sie einen JS-Abschluss" -"\", so dass die einzige offensichtlich polle-fähig Betrieb in der Sprache " -"wurde Null mal abgedeckt; die realen Einstiegspunkte sind " +"zehn waren vier verschiedene Arten zu sagen, \"rufen Sie einen JS-" +"Abschluss\", so dass die einzige offensichtlich polle-fähig Betrieb in der " +"Sprache wurde Null mal abgedeckt; die realen Einstiegspunkte sind " "`js_closure_callN`, die `RECEIVER_SINKS` in der gleichen Datei bereits " "richtig geschrieben." -#: src/internals/gc-rooting-invariant.md:318 +#: src/internals/gc-rooting-invariant.md:345 msgid "" "**A real symbol that was simply not in the set** (#7616 / #7453). The two " "rounds above are both a NAME WITH NO REFERENT, and both audits look only in " @@ -81018,60 +84069,60 @@ msgstr "" "Modus CI läuft. Umsetzen des genauen Codes und Ausführung jedes Modus " "(#7616):" -#: src/internals/gc-rooting-invariant.md:327 +#: src/internals/gc-rooting-invariant.md:354 msgid "clean" msgstr "clean" -#: src/internals/gc-rooting-invariant.md:327 +#: src/internals/gc-rooting-invariant.md:354 msgid "sabotaged" msgstr "sabotaged" -#: src/internals/gc-rooting-invariant.md:329 +#: src/internals/gc-rooting-invariant.md:356 msgid "`--moving-only` (dominance)" msgstr "`--moving-only` (Beherrschung)" -#: src/internals/gc-rooting-invariant.md:329 -#: src/internals/gc-rooting-invariant.md:330 +#: src/internals/gc-rooting-invariant.md:356 +#: src/internals/gc-rooting-invariant.md:357 msgid "**0**" msgstr "**0**" -#: src/internals/gc-rooting-invariant.md:330 +#: src/internals/gc-rooting-invariant.md:357 msgid "`--unrooted-allocas --moving-only`" msgstr "`--unrooted-allocas --moving-only`" -#: src/internals/gc-rooting-invariant.md:331 +#: src/internals/gc-rooting-invariant.md:358 msgid "`--stale-registers --moving-only`" msgstr "`--stale-registers --moving-only`" -#: src/internals/gc-rooting-invariant.md:332 +#: src/internals/gc-rooting-invariant.md:359 msgid "`--statepoints --moving-only` (the lowering that ships)" msgstr "`--statepoints --moving-only` (die Senkung, die Schiffe)" -#: src/internals/gc-rooting-invariant.md:333 +#: src/internals/gc-rooting-invariant.md:360 msgid "`--stale-registers` (unfiltered)" msgstr "`--stale-registers` (unfiltert)" -#: src/internals/gc-rooting-invariant.md:333 +#: src/internals/gc-rooting-invariant.md:360 msgid "24" msgstr "24" -#: src/internals/gc-rooting-invariant.md:333 +#: src/internals/gc-rooting-invariant.md:360 msgid "35" msgstr "35" -#: src/internals/gc-rooting-invariant.md:334 +#: src/internals/gc-rooting-invariant.md:361 msgid "`--statepoints` (unfiltered)" msgstr "`--statepoints` (unfiltert)" -#: src/internals/gc-rooting-invariant.md:334 +#: src/internals/gc-rooting-invariant.md:361 msgid "15" msgstr "15" -#: src/internals/gc-rooting-invariant.md:334 +#: src/internals/gc-rooting-invariant.md:361 msgid "21" msgstr "21" -#: src/internals/gc-rooting-invariant.md:336 +#: src/internals/gc-rooting-invariant.md:363 msgid "" "Every gated arm blind, both unfiltered arms not — _including_ `--" "statepoints`, added in #7663 precisely because the other three were blind to " @@ -81083,7 +84134,7 @@ msgstr "" "für die Verschiffung Senkung. Der eine Name nimmt die sabotierten Arme auf " "13 und 8 und hinterlässt die sauberen Arme auf 2 und 2." -#: src/internals/gc-rooting-invariant.md:341 +#: src/internals/gc-rooting-invariant.md:368 msgid "" "**A poll-capable symbol NO audit can ask for** (#8809). `--audit-poll-reach` " "walks only symbols `ALLOC_RE` matches, so a helper that allocates but spells " @@ -81113,17 +84164,18 @@ msgstr "" "kann, fügen Sie ihn in der gleichen Commit zu `POLL_CAPABLE_RUNTIME` hinzu." "** Nichts wird dich darum bitten." -#: src/internals/gc-rooting-invariant.md:354 +#: src/internals/gc-rooting-invariant.md:381 +#, fuzzy msgid "" "`--audit-poll-capable` is the gate for rounds 1–2 and `--audit-poll-reach` " -"is the gate for round 3; round 4 has no gate. `gc-root-dominance.yml` runs " -"both alongside `--audit-alloc-re` before the build." +"is the gate for round 3; round 4 has no gate. the `gc-root-dominance` job of " +"`gc.yml` runs both alongside `--audit-alloc-re` before the build." msgstr "" "`--audit-poll-capable` ist das Tor für Runden 1–2 und `--audit-poll-reach` " "ist das Tor für Runde 3; Runde 4 hat kein Tor. `gc-root-dominance.yml` läuft " "beides neben `--audit-alloc-re` vor dem Build." -#: src/internals/gc-rooting-invariant.md:358 +#: src/internals/gc-rooting-invariant.md:385 msgid "" "**Those pre-build audits are also the job's single point of failure, and it " "has already cost ten days.** `--audit-poll-reach` went red on `main` on " @@ -81150,7 +84202,7 @@ msgstr "" "Codegen emittiert tatsächlich anstatt es zu löschen — Löschen dreht das " "Audit grün und verlässt das Loch." -#: src/internals/gc-rooting-invariant.md:369 +#: src/internals/gc-rooting-invariant.md:396 msgid "" "`--audit-poll-reach` fails when a symbol `ALLOC_RE` matches reaches a " "`POLL_CAPABLE_RUNTIME` symbol through the runtime's own call graph without " @@ -81181,23 +84233,23 @@ msgstr "" "Kommentare und Zeichenketten wörtliche werden zuerst entfernt, so dass ein " "Name in Prosa erwähnt kann nicht eine Prämisse werden." -#: src/internals/gc-rooting-invariant.md:382 +#: src/internals/gc-rooting-invariant.md:409 msgid "Checking a _plausible_ name is not enough. Confirm against emitted IR:" msgstr "" "Einen _plausible_-Namen zu überprüfen, reicht nicht aus. Bestätigen Sie " "gegen emittierte IR:" -#: src/internals/gc-rooting-invariant.md:385 +#: src/internals/gc-rooting-invariant.md:412 msgid "'call [^@]*@js_[A-Za-z0-9_.$]*('" msgstr "'call [^@]*@js_[A-Za-z0-9_.$]*('" -#: src/internals/gc-rooting-invariant.md:389 +#: src/internals/gc-rooting-invariant.md:416 msgid "" -"The WASI platform uses the `js_shadow_slot_bind` call form the " -"shadow-root checker anchors on." +"The WASI platform uses the `js_shadow_slot_bind` call form the shadow-root " +"checker anchors on." msgstr "" -#: src/internals/gc-rooting-invariant.md:392 +#: src/internals/gc-rooting-invariant.md:419 msgid "" "`--stale-registers` (#7206) additionally catches values that are _never_ " "rooted — read out of a root and held in a register across a collection " @@ -81214,7 +84266,7 @@ msgstr "" "wird, so dass die Fälle 3 und 4 nur Oberfläche sind, wenn Sie diesen Modus " "von Hand ausführen." -#: src/internals/gc-rooting-invariant.md:398 +#: src/internals/gc-rooting-invariant.md:425 msgid "" "`--unrooted-allocas` (#7207) covers the remaining shape, and is the one the " "bind-anchored check is structurally blind to: the value lives in a plain " @@ -81230,7 +84282,7 @@ msgstr "" "von Binds startet, ruft die Funktion sauber. Er fand `lower_call/new.rs`s " "Inline-Ctor `this_slot` unabhängig von jeder Laufzeitsonde." -#: src/internals/gc-rooting-invariant.md:405 +#: src/internals/gc-rooting-invariant.md:432 msgid "" "**The gate runs this mode as of #7236, and the corpus reads 0.** It could " "not before: #7210 measured 66 hits and triaged every one as a false " @@ -81247,15 +84299,15 @@ msgstr "" "`Symbol` lokal keinen Schatten-Slot überhaupt bekam. Führen Sie es von Hand, " "wenn Sie eine `alloca_entry`-Website berühren:" -#: src/internals/gc-rooting-invariant.md:417 +#: src/internals/gc-rooting-invariant.md:444 msgid "2. The runtime instruments — second, and mind the depth" msgstr "2. Die Laufzeitinstrumente — zweitens, und bedenken Sie die Tiefe" -#: src/internals/gc-rooting-invariant.md:419 +#: src/internals/gc-rooting-invariant.md:446 msgid "From #7196:" msgstr "Von #7196:" -#: src/internals/gc-rooting-invariant.md:421 +#: src/internals/gc-rooting-invariant.md:448 msgid "" "`PERRY_GC_SCHEDULE_RATE=1` (with a seed) — collect at every candidate " "safepoint, allocation-paced (#7728): one candidate per " @@ -81270,7 +84322,7 @@ msgstr "" "buchstäblichen Every-Poll-Modus hinzu, wenn das Fenster, das Sie jagen, nur " "einmal ausgeführt wird – es ist viel langsamer." -#: src/internals/gc-rooting-invariant.md:426 +#: src/internals/gc-rooting-invariant.md:453 msgid "" "`PERRY_GC_PROTECT_FROMSPACE=1` — `mprotect` from-space after evacuation so a " "stale read faults immediately instead of reading plausible garbage." @@ -81278,11 +84330,32 @@ msgstr "" "`PERRY_GC_PROTECT_FROMSPACE=1` — `mprotect` aus dem Weltraum nach der " "Evakuierung so eine alte Lesefehler sofort statt des Lesens plausible Müll." -#: src/internals/gc-rooting-invariant.md:428 +#: src/internals/gc-rooting-invariant.md:455 msgid "`PERRY_GC_FROMSPACE_SCAN_ABORT` — now actually runs." msgstr "`PERRY_GC_FROMSPACE_SCAN_ABORT` — läuft jetzt tatsächlich." -#: src/internals/gc-rooting-invariant.md:429 +#: src/internals/gc-rooting-invariant.md:456 +msgid "" +"`PERRY_GC_PROTECT_OLD_SWEEP=1` (or `poison`) — the non-moving sweeps' " +"counterpart (#11842). What a sweep frees is recorded, poisoned with a NaN-" +"boxed pointer to unmapped memory and, for old and malloc objects at `=1`, " +"page-protected; nothing it frees is reused (no hole listed, no block reset " +"or released, no malloc `dealloc`). A fault report names the freed object the " +"fault address or a register points into and which sweep freed it. A run that " +"only passes with it on means some reuse of swept memory is the bug; blocking " +"one reuse path at a time narrows it." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:464 +msgid "" +"`PERRY_GC_BUDGETED_OLD_RECLAIM=1` — old-gen reclaim only ever runs as a " +"budgeted full started at a runtime safepoint (microtask pump, event loop), " +"never synchronously, so an async program's major collections all have " +"mutator windows inside their mark and sweep. The seeded schedule drives " +"minors only; this is the knob for the budgeted full." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:469 #, fuzzy msgid "" "`PERRY_GC_SCHEDULE_SEED=` (+ `PERRY_GC_SCHEDULE_RATE`, default `0.05`) " @@ -81308,7 +84381,7 @@ msgstr "" "sich aufrüsten kann. `scripts/gc_schedule_fuzz.sh [seed-count]` " "fegt Samen und druckt pro Fehler einen reproduzieren Befehl." -#: src/internals/gc-rooting-invariant.md:440 +#: src/internals/gc-rooting-invariant.md:480 msgid "" "**A rate is not a substitute for a schedule.** Re-running one binary 60 " "times re-runs one schedule 60 times; with zero failures in `N` runs the 95% " @@ -81323,7 +84396,7 @@ msgstr "" "Sammlungen Feuer ist der einzige billige Weg, um den Raum zu erkunden, in " "dem der Bug tatsächlich lebt." -#: src/internals/gc-rooting-invariant.md:446 +#: src/internals/gc-rooting-invariant.md:486 msgid "" "**`PERRY_GC_PROTECT_FROMSPACE_DEPTH` defaults to 4, and that default " "produces FALSE GREENS.** Four levels of retained from-space is not enough to " @@ -81336,7 +84409,7 @@ msgstr "" "Zeiger ist in der Zeit, es wird dereferenziert. **Benutze 800.** Ein " "sauberer Lauf in der Standardtiefe bedeutet nichts." -#: src/internals/gc-rooting-invariant.md:451 +#: src/internals/gc-rooting-invariant.md:491 msgid "" "Depth is a **detection-window** knob, not a sensitivity knob, and the " "difference matters when the two instruments disagree. A page-set enters the " @@ -81366,7 +84439,7 @@ msgstr "" "einverstanden ist, schauen Sie zuerst auf den Checker. So wurde die Zod " "`clone` Uneinigkeit beigelegt." -#: src/internals/gc-rooting-invariant.md:463 +#: src/internals/gc-rooting-invariant.md:503 msgid "" "And when a fault does fire, **walk UP the stack**. The reporter names the " "frame that DEREFERENCED the stale value, which is usually not the frame that " @@ -81378,7 +84451,7 @@ msgstr "" "normalerweise nicht der Rahmen ist, der das Register besitzt — der Wert " "kommt gewöhnlich als Argument von einem Anrufer, der ihn abstreift." -#: src/internals/gc-rooting-invariant.md:468 +#: src/internals/gc-rooting-invariant.md:508 msgid "" "And remember the ceiling on all of these: if the collection happens while " "the only copy is in a register, there is nothing at that moment for any " @@ -81390,11 +84463,11 @@ msgstr "" "Moment für jede Laufzeit Sonde zu bemerken. Diese Instrumente fangen die " "_consequence_, später. Der statische Checker fängt den _cause_, jetzt." -#: src/internals/gc-rooting-invariant.md:473 +#: src/internals/gc-rooting-invariant.md:513 msgid "The mirror image: a missing write barrier (#8185)" msgstr "Das Spiegelbild: eine fehlende Schreibbarriere (#8185)" -#: src/internals/gc-rooting-invariant.md:475 +#: src/internals/gc-rooting-invariant.md:515 msgid "" "Everything above is about a value the collector cannot **find**. The write " "barrier is about an edge the collector is never **told about**. The two are " @@ -81406,43 +84479,43 @@ msgstr "" "Die beiden sind Duale, und — das ist der Teil, der die Menschen immer wieder " "fängt — **ihre Detektoren werden ausgetauscht**." -#: src/internals/gc-rooting-invariant.md:480 +#: src/internals/gc-rooting-invariant.md:520 msgid "rooting bug" msgstr "Rooting Bug" -#: src/internals/gc-rooting-invariant.md:480 +#: src/internals/gc-rooting-invariant.md:520 msgid "missing/deleted write barrier" msgstr "missing/deleted Schreibschranke" -#: src/internals/gc-rooting-invariant.md:482 +#: src/internals/gc-rooting-invariant.md:522 msgid "what goes wrong" msgstr "was schief geht" -#: src/internals/gc-rooting-invariant.md:482 +#: src/internals/gc-rooting-invariant.md:522 msgid "a live value is invisible to the root scan" msgstr "ein Live-Wert ist für den Root-Scan unsichtbar" -#: src/internals/gc-rooting-invariant.md:482 +#: src/internals/gc-rooting-invariant.md:522 msgid "an old→young edge is absent from the remembered set" msgstr "ein alter→junger Rand fehlt aus dem erinnerten Set" -#: src/internals/gc-rooting-invariant.md:483 +#: src/internals/gc-rooting-invariant.md:523 msgid "when it goes wrong" msgstr "wenn es schief geht" -#: src/internals/gc-rooting-invariant.md:483 +#: src/internals/gc-rooting-invariant.md:523 msgid "at the collection, silently" msgstr "in der Sammlung, still" -#: src/internals/gc-rooting-invariant.md:483 +#: src/internals/gc-rooting-invariant.md:523 msgid "not at the store at all; at some _later_ minor" msgstr "gar nicht im Laden; bei einigen _später_-Moll" -#: src/internals/gc-rooting-invariant.md:484 +#: src/internals/gc-rooting-invariant.md:524 msgid "the detector" msgstr "der Detektor" -#: src/internals/gc-rooting-invariant.md:484 +#: src/internals/gc-rooting-invariant.md:524 msgid "" "the runtime instruments (`PERRY_GC_SCHEDULE_RATE`, " "`PERRY_GC_PROTECT_FROMSPACE`), plus the static checker for the IR-visible " @@ -81452,30 +84525,30 @@ msgstr "" "`PERRY_GC_PROTECT_FROMSPACE`) sowie die statische Kontrolle für die IR-" "sichtbare Hälfte" -#: src/internals/gc-rooting-invariant.md:484 +#: src/internals/gc-rooting-invariant.md:524 msgid "a **static IR assertion**, and nothing else" msgstr "a **statische IR-Anweisung**, und sonst nichts" -#: src/internals/gc-rooting-invariant.md:485 +#: src/internals/gc-rooting-invariant.md:525 msgid "the blind spot" msgstr "der blinde Fleck" -#: src/internals/gc-rooting-invariant.md:485 +#: src/internals/gc-rooting-invariant.md:525 msgid "" "the static checker cannot see a runtime-side cache of a heap pointer (see §5)" msgstr "" "der statische Prüfer kann keinen runtime-side-Cache eines Heap-Pointers " "sehen (siehe §5)" -#: src/internals/gc-rooting-invariant.md:485 +#: src/internals/gc-rooting-invariant.md:525 msgid "**every runtime probe we have**" msgstr "**jede Laufzeitsonde, die wir haben**" -#: src/internals/gc-rooting-invariant.md:487 +#: src/internals/gc-rooting-invariant.md:527 msgid "Why no runtime probe can see it" msgstr "Warum es keine Laufzeitsonde sehen kann" -#: src/internals/gc-rooting-invariant.md:489 +#: src/internals/gc-rooting-invariant.md:529 msgid "" "A dropped barrier corrupts nothing at the moment of the store. The store " "still writes the right bits into the right slot; the object graph is " @@ -81490,19 +84563,19 @@ msgstr "" "beobachtbaren Fehler zu verwandeln, braucht eine Konjunktion, die das " "Programm alleine liefern muss:" -#: src/internals/gc-rooting-invariant.md:495 +#: src/internals/gc-rooting-invariant.md:535 msgid "" "the parent has to survive into old-gen (or be tenured) **before** the store;" msgstr "" "der Elternteil muss in altes Gen überleben (oder gehalten werden) **Vorher** " "das Lager;" -#: src/internals/gc-rooting-invariant.md:496 +#: src/internals/gc-rooting-invariant.md:536 msgid "the child has to still be in the nursery **at the next minor**;" msgstr "" "das Kind muss noch im Kinderzimmer sein **bei der nächsten Minderjährigen**;" -#: src/internals/gc-rooting-invariant.md:497 +#: src/internals/gc-rooting-invariant.md:537 msgid "" "a **minor** collection — not a full mark-sweep, which retraces everything " "and papers over the whole class — has to land in that window; and" @@ -81510,7 +84583,7 @@ msgstr "" "a **Klein** die Sammlung — nicht ein voller Mark-Sweep, der alles und Papier " "über die ganze Klasse nachverfolgt — muss in diesem Fenster landen; und" -#: src/internals/gc-rooting-invariant.md:499 +#: src/internals/gc-rooting-invariant.md:539 msgid "" "that edge has to be the _only_ path to the child, or some other root finds " "it anyway and the collection is clean." @@ -81518,7 +84591,7 @@ msgstr "" "Diese Kante muss der _only_ Pfad zum Kind sein, oder eine andere Wurzel " "findet sie sowieso und die Sammlung ist sauber." -#: src/internals/gc-rooting-invariant.md:502 +#: src/internals/gc-rooting-invariant.md:542 msgid "" "Miss any one and the minor collects correctly, the program prints the right " "answer, and the probe reports success. Nothing was tried." @@ -81526,7 +84599,7 @@ msgstr "" "Vermissen Sie jede und die Minor sammelt korrekt, das Programm druckt die " "richtige Antwort, und die Sonde berichtet Erfolg. Es wurde nichts versucht." -#: src/internals/gc-rooting-invariant.md:505 +#: src/internals/gc-rooting-invariant.md:545 msgid "" "The individual knobs are worse than merely insensitive — three of them are " "aimed at a different property entirely, and it is easy to read their green " @@ -81536,7 +84609,7 @@ msgstr "" "auf eine andere Eigenschaft völlig gerichtet, und es ist leicht, ihr Grün " "als Beweis zu lesen:" -#: src/internals/gc-rooting-invariant.md:509 +#: src/internals/gc-rooting-invariant.md:549 msgid "" "`PERRY_GC_FORCE_EVACUATE` / `PERRY_GC_VERIFY_EVACUATION` verify " "**rewriting**: that every live slot pointing at a forwarded object was " @@ -81550,7 +84623,7 @@ msgstr "" "Slot, den es nicht neu zu schreiben vermochte. Erinnern und Neuschreiben " "sind verschiedene Eigenschaften, und der Prüfer fragt nur nach der zweiten." -#: src/internals/gc-rooting-invariant.md:514 +#: src/internals/gc-rooting-invariant.md:554 msgid "" "`PERRY_GEN_GC=0` reverts to full mark-sweep, which **does not consult the " "remembered set at all**. It does not make the bug visible; it makes the bug " @@ -81562,7 +84635,7 @@ msgstr "" "sichtbar; es macht den Fehler unerreichbar. Ein grüner Lauf hier ist der " "stärkste und leerste Beweis für die drei." -#: src/internals/gc-rooting-invariant.md:518 +#: src/internals/gc-rooting-invariant.md:558 msgid "" "`PERRY_GC_SCHEDULE_RATE=1` + `PERRY_GC_PROTECT_FROMSPACE` catch a _stale " "read of a moved object_ — condition (4)'s aftermath, on the rooting side of " @@ -81574,7 +84647,7 @@ msgstr "" "auf der Wurzelseite der Dualität. Sie sind schuld an einem baumelnden " "Raumzeiger, nicht an einem lebenden Objekt, das nie verfolgt wurde." -#: src/internals/gc-rooting-invariant.md:523 +#: src/internals/gc-rooting-invariant.md:563 msgid "" "And check the knob you are about to cite is a knob. `scripts/" "check_gc_env_knobs.py` is in `lint` precisely because this drifts: a matrix " @@ -81589,19 +84662,19 @@ msgstr "" "oben. Jeder Name in diesem Dokument ist einer, den das Tor einem Live-Parser-" "Eigenen bestätigt hat." -#: src/internals/gc-rooting-invariant.md:529 +#: src/internals/gc-rooting-invariant.md:569 msgid "" "This is CLAUDE.md's hazard 4 (\"the gate runs but its subject never did\") " "with the subject inverted: **the absence of a barrier cannot be observed by " "running the program.** There is no execution in which \"the barrier did not " "run\" is a distinguishable event." msgstr "" -"Dies ist CLAUDE.md's Hazard 4 (\"das Gate läuft, aber sein Subjekt hat nie" -"\") mit dem Subjekt invertiert: **Das Fehlen einer Barriere kann nicht durch " -"das Programm beobachtet werden.** Es gibt keine Ausführung, in der \"die " -"Barriere nicht lief\" ein unterscheidendes Ereignis ist." +"Dies ist CLAUDE.md's Hazard 4 (\"das Gate läuft, aber sein Subjekt hat " +"nie\") mit dem Subjekt invertiert: **Das Fehlen einer Barriere kann nicht " +"durch das Programm beobachtet werden.** Es gibt keine Ausführung, in der " +"\"die Barriere nicht lief\" ein unterscheidendes Ereignis ist." -#: src/internals/gc-rooting-invariant.md:534 +#: src/internals/gc-rooting-invariant.md:574 msgid "" "**Recorded, because it is the whole reason the IR assertions exist (#8183):" "** a **release** build with the write barrier deleted from the dynamic-key " @@ -81620,13 +84693,13 @@ msgstr "" "Ausgang, Ausgang 0**, sowohl auf eine Lücke und eine größere gegnerische " "ein. Der statische IR-Test war das Einzige, das nein gesagt hat." -#: src/internals/gc-rooting-invariant.md:542 +#: src/internals/gc-rooting-invariant.md:582 msgid "What a PR that adds or moves a store on a GC slot owes" msgstr "" "Was eine PR, die einen Speicher auf einem GC-Slot hinzufügt oder bewegt, " "schuldet" -#: src/internals/gc-rooting-invariant.md:544 +#: src/internals/gc-rooting-invariant.md:584 msgid "" "Its barrier evidence is a **static IR assertion**, not a behavioural test. " "Four things it has to pin, each because a sabotage that skipped it was _not_ " @@ -81636,7 +84709,7 @@ msgstr "" "Verhaltenstest. Vier Dinge, die sie anheften muss, weil eine Sabotage, die " "sie übersprungen hat, nicht erwischt wurde:" -#: src/internals/gc-rooting-invariant.md:547 +#: src/internals/gc-rooting-invariant.md:587 msgid "" "**The bookkeeping is present** in the pointer-capable arm — the write " "barrier, the layout note, and the string addref. Any one of the three going " @@ -81646,7 +84719,7 @@ msgstr "" "Schreibbarriere, die Layout-Note und die Zeichenfolge addref. Jede der drei " "vermissten Personen ist die Familie #5094 / #7511, die still strandet." -#: src/internals/gc-rooting-invariant.md:550 +#: src/internals/gc-rooting-invariant.md:590 msgid "" "**The arm is REACHED.** Assert a `br i1` _into_ the block, not merely that a " "block with that label exists. #8183's third sabotage — routing reference " @@ -81660,7 +84733,7 @@ msgstr "" "IR** dass jede inhaltliche Behauptung glücklich inspiziert, und zunächst " "bestanden. Die Anwesenheit von Code ist kein Beweis, dass es läuft." -#: src/internals/gc-rooting-invariant.md:555 +#: src/internals/gc-rooting-invariant.md:595 msgid "" "**The negative arm stays clean.** The pointer-free arm must _not_ contain " "the bookkeeping. A barrier leaking into it means the discriminator stopped " @@ -81671,7 +84744,7 @@ msgstr "" "Diskriminator aufgehört hat, zu unterscheiden, und die \"Optimierung\" misst " "nichts." -#: src/internals/gc-rooting-invariant.md:558 +#: src/internals/gc-rooting-invariant.md:598 msgid "" "**Sabotage runs, reported.** Delete each element in turn and record that the " "test goes red. A test that has never failed is a test whose failure mode is " @@ -81681,7 +84754,7 @@ msgstr "" "aufzeichnen, dass der Test rot wird. Ein Test, der nie fehlgeschlagen ist, " "ist ein Test, dessen Ausfallmodus unbekannt ist." -#: src/internals/gc-rooting-invariant.md:562 +#: src/internals/gc-rooting-invariant.md:602 #, fuzzy msgid "" "And put it where it runs. `test.yml`'s per-PR `cargo-test` arm is `--lib --" @@ -81701,25 +84774,25 @@ msgstr "" "class_field_barrier_tests.rs`, `index_set_barrier_tests.rs` und " "`write_pic_barrier_tests.rs` sind die Form." -#: src/internals/gc-rooting-invariant.md:570 +#: src/internals/gc-rooting-invariant.md:610 msgid "The `GC_STORE_AUDIT` marker, and what it does and does not prove" msgstr "Der `GC_STORE_AUDIT` Marker, und was er tut und nicht beweist" -#: src/internals/gc-rooting-invariant.md:572 +#: src/internals/gc-rooting-invariant.md:612 msgid "" "Every raw GC-relevant store site carries a nearby marker naming its verdict:" msgstr "" "Jeder rohe GC-relevante Laden ist mit einem nahegelegenen Marker versehen, " "der sein Urteil nennt:" -#: src/internals/gc-rooting-invariant.md:575 +#: src/internals/gc-rooting-invariant.md:615 msgid "" "// GC_STORE_AUDIT(BARRIERED): the slot write is unconditional; the barrier\n" "// below is guarded only by a live test that the stored bits carry no heap\n" "// pointer, which is the barrier's own first test.\n" msgstr "" -#: src/internals/gc-rooting-invariant.md:580 +#: src/internals/gc-rooting-invariant.md:620 msgid "" "The classes are `BARRIERED`, `EXTERNAL_BARRIERED`, `ROOT`, `INIT`, " "`POINTER_FREE`, `STACK`. `scripts/gc_store_site_inventory.py` (in `lint`) " @@ -81732,7 +84805,7 @@ msgstr "" "hat — so ein **neu** Lagerplatz kann nicht mit der Frage unbeantwortet " "landen." -#: src/internals/gc-rooting-invariant.md:585 +#: src/internals/gc-rooting-invariant.md:625 msgid "" "Since #8185 landed its second half, the script verifies the **claim**, not " "just the comment, for the two classes where a false claim strands objects:" @@ -81741,7 +84814,7 @@ msgstr "" "nicht nur der Kommentar, für die beiden Klassen, wo ein falscher Anspruch " "strandet:" -#: src/internals/gc-rooting-invariant.md:588 +#: src/internals/gc-rooting-invariant.md:628 msgid "" "**`BARRIERED` in `perry-codegen`** is bound to an IR witness. Every call to " "the stem-taking barrier emitters " @@ -81783,7 +84856,7 @@ msgstr "" "Sie den Anruf aus seinem Block, umgehen Sie das Tor) laufen in der Suite " "gegen jeden Stamm." -#: src/internals/gc-rooting-invariant.md:606 +#: src/internals/gc-rooting-invariant.md:646 msgid "" "**`BARRIERED` / `EXTERNAL_BARRIERED` in `perry-runtime` / `perry-stdlib`** " "are rustc-compiled, so there is no perry-emitted IR; the claim is verified " @@ -81810,7 +84883,7 @@ msgstr "" "Barrierespeicher und ein Barriereaufruf in derselben Funktion passieren " "immer noch), und das Skript druckt das Limit." -#: src/internals/gc-rooting-invariant.md:618 +#: src/internals/gc-rooting-invariant.md:658 msgid "" "What is still trusted: `ROOT`, `INIT`, `POINTER_FREE` and `STACK` verdicts " "are human-audited only, and the script says so in its summary on every run — " @@ -81834,11 +84907,11 @@ msgstr "" "und seine `--self-test`-Pflanzen fünfzehn Formen, von denen jede zu " "entscheiden ist." -#: src/internals/gc-rooting-invariant.md:628 +#: src/internals/gc-rooting-invariant.md:668 msgid "The corpus problem, and the two corpora (#7280)" msgstr "Das Korpusproblem und die beiden Korpora (#7280)" -#: src/internals/gc-rooting-invariant.md:630 +#: src/internals/gc-rooting-invariant.md:670 msgid "" "**A hand-written corpus cannot express this class of bug at dependency " "scale, and for a while nobody could tell, because it was green.**" @@ -81847,7 +84920,7 @@ msgstr "" "Abhängigkeitsskala nicht ausdrücken, und für eine Weile konnte niemand " "erkennen, weil es grün war.**" -#: src/internals/gc-rooting-invariant.md:633 +#: src/internals/gc-rooting-invariant.md:673 msgid "" "`scripts/gc_root_dominance_corpus.sh` compiles ~124 `test-files/` sources " "chosen for the lowerings they exercise. It reads **zero** in both modes the " @@ -81862,7 +84935,7 @@ msgstr "" "verschuldet wurden. #7280 setzt es in einen Satz: _25 kuratierte Dateien " "passieren, während 20 Zeilen des Vorrats zod fail._" -#: src/internals/gc-rooting-invariant.md:639 +#: src/internals/gc-rooting-invariant.md:679 msgid "" "That is not a size problem. Both corpora were measured on the same compiler " "with `--stale-registers --moving-only`:" @@ -81870,39 +84943,39 @@ msgstr "" "Das ist kein Größenproblem. Beide Corpora wurden auf demselben Compiler mit " "`--stale-registers --moving-only` gemessen:" -#: src/internals/gc-rooting-invariant.md:642 +#: src/internals/gc-rooting-invariant.md:682 msgid "corpus" msgstr "corpus" -#: src/internals/gc-rooting-invariant.md:642 +#: src/internals/gc-rooting-invariant.md:682 msgid "stale uses" msgstr "Verwendungen" -#: src/internals/gc-rooting-invariant.md:642 +#: src/internals/gc-rooting-invariant.md:682 msgid "what dominates" msgstr "was dominiert" -#: src/internals/gc-rooting-invariant.md:644 +#: src/internals/gc-rooting-invariant.md:684 msgid "curated, 124 sources / 144 modules" msgstr "kuratiert, 124 Quellen / 144 Module" -#: src/internals/gc-rooting-invariant.md:644 +#: src/internals/gc-rooting-invariant.md:684 msgid "116" msgstr "116" -#: src/internals/gc-rooting-invariant.md:644 +#: src/internals/gc-rooting-invariant.md:684 msgid "property-GET helper windows, `js_number_coerce`, `js_closure_callN`" msgstr "property-GET-Helferfenster, `js_number_coerce`, `js_closure_callN`" -#: src/internals/gc-rooting-invariant.md:645 +#: src/internals/gc-rooting-invariant.md:685 msgid "dependency-scale, 81 modules / 62 MB" msgstr "Abhängigkeitsskala, 81 Module / 62 MB" -#: src/internals/gc-rooting-invariant.md:645 +#: src/internals/gc-rooting-invariant.md:685 msgid "370" msgstr "370" -#: src/internals/gc-rooting-invariant.md:645 +#: src/internals/gc-rooting-invariant.md:685 msgid "" "`js_object_assign_one` (object spread) 137, `js_new_function_construct` 102, " "`js_closure_call*` 30" @@ -81910,7 +84983,7 @@ msgstr "" "`js_object_assign_one` (Objektausbreitung) 137, `js_new_function_construct` " "102, `js_closure_call*` 30" -#: src/internals/gc-rooting-invariant.md:647 +#: src/internals/gc-rooting-invariant.md:687 msgid "" "The curated corpus produces 12 of the first population and 1 of the second. " "A hand-written test allocates a couple of objects and calls a couple of " @@ -81927,7 +85000,7 @@ msgstr "" "so kann ein Korpus ohne die Formen sie nicht ausdrücken, wie viele Dateien " "es hat." -#: src/internals/gc-rooting-invariant.md:654 +#: src/internals/gc-rooting-invariant.md:694 msgid "" "So there is a second corpus, generated from a real npm dependency rather " "than from anything written for the occasion:" @@ -81935,12 +85008,12 @@ msgstr "" "Es gibt also einen zweiten Korpus, der aus einer echten npm-Abhängigkeit " "erzeugt wird, anstatt von etwas, das für den Anlass geschrieben wurde:" -#: src/internals/gc-rooting-invariant.md:658 +#: src/internals/gc-rooting-invariant.md:698 #, fuzzy msgid "# zod is a package.json devDependency\n" msgstr "# zod ist ein package.json devDependency" -#: src/internals/gc-rooting-invariant.md:663 +#: src/internals/gc-rooting-invariant.md:703 msgid "" "`test-files/gc-dep-corpus/main.ts` is the only entry point; the rest of that " "directory reaches the compiler by being imported from it, and the generator " @@ -81955,7 +85028,7 @@ msgstr "" "kann, da ~90 Module von `zod` Sumpf jeder Zählung eine fehlende 40-Linien-" "Quelle würde kreuzen." -#: src/internals/gc-rooting-invariant.md:669 +#: src/internals/gc-rooting-invariant.md:709 msgid "" "Nothing is sampled away: all 81 modules and all 62 MB are checked. Emitting " "costs ~8s and the two gated arms ~4s, because those are linear in " @@ -81967,35 +85040,36 @@ msgstr "" "linear in der Unterrichtszahl sind. Das `--stale-registers` Budget ist das " "teure (~5 min): sein Scan ist superlinear und 62 MB ist 62 MB." -#: src/internals/gc-rooting-invariant.md:674 +#: src/internals/gc-rooting-invariant.md:714 msgid "The CI gate" msgstr "Das CI-Tor" -#: src/internals/gc-rooting-invariant.md:676 +#: src/internals/gc-rooting-invariant.md:716 +#, fuzzy msgid "" -"`.github/workflows/gc-root-dominance.yml` runs the checker on every PR over " -"both corpora. The whole job is a few minutes plus the compiler build; the " -"two gated checks are about three seconds each over ~2000 and ~12900 " -"functions." +"The `gc-root-dominance` job of `.github/workflows/gc.yml` runs the checker " +"on every PR over both corpora. The whole job is a few minutes plus the " +"compiler build; the two gated checks are about three seconds each over ~2000 " +"and ~12900 functions." msgstr "" "`.github/workflows/gc-root-dominance.yml` läuft den Checker auf jeder PR " "über beide Corpora. Der gesamte Auftrag ist ein paar Minuten plus der " "Compiler Build; die beiden gated Checks sind etwa drei Sekunden pro über " "~2000 und ~12900 Funktionen." -#: src/internals/gc-rooting-invariant.md:680 +#: src/internals/gc-rooting-invariant.md:720 msgid "It is built to be able to fail, against all four hazards in CLAUDE.md:" msgstr "" "Es ist gebaut, um scheitern zu können, gegen alle vier Gefahren in CLAUDE.md:" -#: src/internals/gc-rooting-invariant.md:682 +#: src/internals/gc-rooting-invariant.md:722 msgid "" "the checker's exit status is the job's — no `continue-on-error`, no pipe;" msgstr "" "der Status des Checkers ist der des Jobs — kein `continue-on-error`, kein " "Rohr;" -#: src/internals/gc-rooting-invariant.md:683 +#: src/internals/gc-rooting-invariant.md:723 msgid "" "`concurrency` cancels pull-request runs only, so `main` runs are never " "starved;" @@ -82003,7 +85077,7 @@ msgstr "" "`concurrency` storniert Pull-Request läuft nur, so dass `main` läuft nie " "ausgehungert werden;" -#: src/internals/gc-rooting-invariant.md:684 +#: src/internals/gc-rooting-invariant.md:724 msgid "" "`--min-files` / `--min-binds` / `--min-funcs` refuse a clean verdict over a " "corpus too thin to have exercised anything, and the run prints `checked N " @@ -82014,7 +85088,7 @@ msgstr "" "druckt `checked N functions / M modules`, so dass ein still-leerer Lauf " "sichtbar ist;" -#: src/internals/gc-rooting-invariant.md:687 +#: src/internals/gc-rooting-invariant.md:727 msgid "" "`--self-test` proves it still fires on planted fixtures, and `--seeded-" "violations 40` splices collection points into the **real** corpus IR and " @@ -82027,7 +85101,7 @@ msgstr "" "Arm, der den Prüfer gefangen hat, ohne dabei die Fähigkeit zu verlieren, " "Perrys Ausgang zu lesen;" -#: src/internals/gc-rooting-invariant.md:691 +#: src/internals/gc-rooting-invariant.md:731 msgid "" "`--audit-alloc-re` and `--audit-poll-capable` refuse a name that matches no " "exported runtime symbol, in the two tables that decide _whether a register " @@ -82043,11 +85117,11 @@ msgstr "" "und sofortige sind und beide tote Einträge versendet haben: neun in " "`ALLOC_RE` über zwei Runden, zehn in `POLL_CAPABLE_RUNTIME`." -#: src/internals/gc-rooting-invariant.md:698 +#: src/internals/gc-rooting-invariant.md:738 msgid "The allowlist, and why it is not a number" msgstr "Die Erlaubensliste, und warum es keine Zahl ist" -#: src/internals/gc-rooting-invariant.md:700 +#: src/internals/gc-rooting-invariant.md:740 msgid "" "Known-remaining violations live in `scripts/gc_root_dominance_allowlist." "json`, one entry each with a fingerprint, an issue, and a written " @@ -82057,7 +85131,7 @@ msgstr "" "json`, einem Eintrag mit einem Fingerabdruck, einem Problem und einer " "schriftlichen Begründung." -#: src/internals/gc-rooting-invariant.md:703 +#: src/internals/gc-rooting-invariant.md:743 msgid "" "A numeric threshold cannot tell a new violation from an old one: fix one " "bug, introduce another, and the total is unchanged and the gate stays green. " @@ -82070,11 +85144,11 @@ msgstr "" "billigste Weg zu grün ein roter Bau ist, um die Zahl um einen zu erhöhen, " "und nichts in der Differenz sagt, was zugegeben wurde." -#: src/internals/gc-rooting-invariant.md:708 +#: src/internals/gc-rooting-invariant.md:748 msgid "So the checker enforces three properties:" msgstr "Der Checker erzwungen also drei Eigenschaften:" -#: src/internals/gc-rooting-invariant.md:710 +#: src/internals/gc-rooting-invariant.md:750 msgid "" "**an entry that matches nothing fails the build.** When you fix the bug, " "delete the entry in the same PR. That is the ratchet, and it is why a fixed " @@ -82085,7 +85159,7 @@ msgstr "" "Ratsche, und deshalb kann ein fester Käfer keinen Grabstein verlassen, der " "die Abdeckung später leise erweitert." -#: src/internals/gc-rooting-invariant.md:713 +#: src/internals/gc-rooting-invariant.md:753 msgid "" "**an entry suppresses at most its `count`.** A second violation of the same " "shape in the same function is new, and fails." @@ -82093,14 +85167,14 @@ msgstr "" "**ein Eintrag unterdrückt höchstens seine `count`.** Eine zweite Verletzung " "derselben Form in derselben Funktion ist neu und scheitert." -#: src/internals/gc-rooting-invariant.md:715 +#: src/internals/gc-rooting-invariant.md:755 msgid "" "**a violation with no entry fails**, regardless of how many entries exist." msgstr "" "**ein Verstoß ohne Eintrag fehlschlägt**, unabhängig davon, wie viele " "Einträge existieren." -#: src/internals/gc-rooting-invariant.md:717 +#: src/internals/gc-rooting-invariant.md:757 msgid "" "Adding an entry is a code-review event. Bumping a `count` to green a build " "is the exact thing this file exists to prevent." @@ -82108,11 +85182,11 @@ msgstr "" "Ein Eintrag hinzuzufügen ist ein Code-Review-Ereignis. Ein `count` zu grün " "zu blasen ist genau das, was diese Datei zu verhindern existiert." -#: src/internals/gc-rooting-invariant.md:720 +#: src/internals/gc-rooting-invariant.md:760 msgid "Promoting this gate" msgstr "Förderung dieses Tors" -#: src/internals/gc-rooting-invariant.md:722 +#: src/internals/gc-rooting-invariant.md:762 msgid "" "**As of this writing the job is NOT in branch protection's required " "contexts**, which means it cannot turn a merge red — hazard 2." @@ -82121,11 +85195,11 @@ msgstr "" "erforderlichen Statusprüfungen des Branch-Schutzes**, er kann einen Merge " "also nicht fehlschlagen lassen — Risiko 2." -#: src/internals/gc-rooting-invariant.md:725 +#: src/internals/gc-rooting-invariant.md:765 msgid "Both of the conditions #7198 named are now met:" msgstr "Beide Bedingungen #7198 sind nun erfüllt:" -#: src/internals/gc-rooting-invariant.md:727 +#: src/internals/gc-rooting-invariant.md:767 msgid "" "the bind-anchored dominance check is green on `main` with an **empty** " "allowlist (the #7211 entries were deleted when that predicate was fixed in " @@ -82135,7 +85209,7 @@ msgstr "" "Allowlist (die #7211-Einträge wurden gelöscht, wenn das Prädikat in \\#7226 " "festgelegt wurde);" -#: src/internals/gc-rooting-invariant.md:730 +#: src/internals/gc-rooting-invariant.md:770 msgid "" "`--unrooted-allocas --moving-only` reads **0** and is a step in the job " "(#7236). That was the outstanding one: it was 98 before #7235, 2 after, and " @@ -82145,7 +85219,7 @@ msgstr "" "Arbeit (#7236). Das war die herausragende: es war 98 vor #7235, 2 nach, und " "0 einmal `Type::Symbol` nicht mehr als sofortige eingestuft." -#: src/internals/gc-rooting-invariant.md:734 +#: src/internals/gc-rooting-invariant.md:774 msgid "" "So the remaining step is for a **repo admin** to add `gc-root-dominance` to " "branch protection's required contexts:" @@ -82153,7 +85227,7 @@ msgstr "" "Der verbleibende Schritt ist also für eine **Verwaltungsrätin** um `gc-root-" "dominance` zu den erforderlichen Kontexten des Zweigschutzes hinzuzufügen:" -#: src/internals/gc-rooting-invariant.md:742 +#: src/internals/gc-rooting-invariant.md:782 msgid "" "A workflow cannot do this to itself, and neither can a PR. Until it is done, " "this is documentation. Per CLAUDE.md's corollary, promote it **after** the " @@ -82167,7 +85241,7 @@ msgstr "" "Schritt enthalten - ein Tor, das noch nie grün in seiner aktuellen Form " "Blöcke jeder offenen PR am Tag, an dem es erforderlich ist." -#: src/internals/gc-rooting-invariant.md:748 +#: src/internals/gc-rooting-invariant.md:788 msgid "" "**`gc-root-dominance-statepoints` is a SEPARATE context and a separate " "decision.** It was added by #7663 as a second job for exactly that reason: " @@ -82190,11 +85264,39 @@ msgstr "" "Sie es, wie die Bevölkerung festgelegt ist; eine Förderung, die das Budget, " "wo es ist, einfriert hat eine Zahl gekauft, nicht eine invariant." -#: src/internals/gc-rooting-invariant.md:758 +#: src/internals/gc-rooting-invariant.md:798 +msgid "Rematerialized global-backed roots (native lowering)" +msgstr "" + +#: src/internals/gc-rooting-invariant.md:800 +msgid "" +"A root slot whose only heap value is a copy of an immutable, collector-" +"rewritten global is not relocated. It is re-read from that global at each " +"use (`crates/perry-codegen/src/function/precise_roots/remat.rs`). Two global " +"families qualify: string-literal handles (`_.str.N.handle`) and class-" +"keys arrays (`@perry_class_keys_*`). Both are registered with " +"`js_gc_register_global_root`, rewritten on evacuation, and written only by " +"their module's init. The pass checks the rest on the emitted IR. Every store " +"into the slot must be a load of that one global or a constant, the slot's " +"address must not escape, and the function must not store to the global. Any " +"slot that fails a check stays an ordinary `ptr addrspace(1)` root." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:811 +msgid "" +"The slot stays a plain alloca and records \"holds the global's value\" as a " +"non-heap marker in the `0x7FFC` band. Each read becomes `select(slot == " +"marker, load @G, slot)`, so the value a consumer sees is always loaded after " +"the last safepoint. Module `let`/`var` globals (`@perry_global_*`) and " +"static fields are registered roots too, but the program reassigns them, so " +"they are never rematerialized. A re-read could observe a later assignment." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:818 msgid "Rules of thumb" msgstr "Faustregeln" -#: src/internals/gc-rooting-invariant.md:760 +#: src/internals/gc-rooting-invariant.md:820 msgid "" "**Root before you call, not after.** If a value must survive a call, its " "root store belongs above the call, unconditionally. Do not predicate it on a " @@ -82209,7 +85311,7 @@ msgstr "" "Initialisierern, nie über die selbst emittierten " "`js_object_set_field_by_name`-Aufrufe der Absenkung." -#: src/internals/gc-rooting-invariant.md:765 +#: src/internals/gc-rooting-invariant.md:825 msgid "" "**Re-read the root after every collection point.** Never cache a load out of " "a root slot across a call. `rooted_handle_get` exists for this." @@ -82218,7 +85320,7 @@ msgstr "" "niemals eine Last aus einem Root-Slot über einen Anruf. `rooted_handle_get` " "existiert dafür." -#: src/internals/gc-rooting-invariant.md:767 +#: src/internals/gc-rooting-invariant.md:827 msgid "" "**Evaluate-then-allocate is the hazard.** Any lowering with two or more " "operands where one is materialized before another is lowered needs the first " @@ -82228,7 +85330,7 @@ msgstr "" "oder mehr Operanden, bei denen sich eine vor der anderen niederschlägt, " "benötigt die erste verwurzelt." -#: src/internals/gc-rooting-invariant.md:770 +#: src/internals/gc-rooting-invariant.md:830 msgid "" "**`--trace llvm` and read it.** Three seconds of the checker beats a day of " "bisecting a `not a function` five cycles downstream." @@ -82236,7 +85338,7 @@ msgstr "" "**`--trace llvm` und lesen Sie es.** Drei Sekunden des Checkers schlägt " "einen Tag, an dem ein `not a function` fünf Zyklen stromabwärts bisecting." -#: src/internals/gc-rooting-invariant.md:772 +#: src/internals/gc-rooting-invariant.md:832 msgid "" "**When in doubt, root it.** A redundant shadow slot costs a store. A missing " "one costs a day, and it costs it to whoever hits the crash, not to you." @@ -82768,8 +85870,8 @@ msgstr "" "schwache Verarbeitung, die verwendet wird, um eine Arbeitseinheit pro Halter " "aufzuladen, während `process_finreg_after_mark` das gesamte Datensatzfeld " "des Halters innerhalb der Einheit betrat. Eine Registrierung mit einer " -"Million Registrierungen war daher eine atomare, haufengroße \"Arbeitseinheit" -"\", die hinter einer zeitgeprüften API saß." +"Million Registrierungen war daher eine atomare, haufengroße " +"\"Arbeitseinheit\", die hinter einer zeitgeprüften API saß." #: src/internals/gc-step-bounds.md:35 msgid "" @@ -83671,9 +86773,9 @@ msgstr "" msgid "" "`#[deny]` the escape hatch per-module as each module finishes, so migrated " "code cannot regress. **Done, as a test rather than an attribute**: Rust has " -"no `#[deny]` for \"do not call this `pub(crate)` function from this module" -"\", so `rooting::migration_ledger` `include_str!`s each finished module and " -"fails the build if it names `expr::temp_root`." +"no `#[deny]` for \"do not call this `pub(crate)` function from this " +"module\", so `rooting::migration_ledger` `include_str!`s each finished " +"module and fails the build if it names `expr::temp_root`." msgstr "" "`#[deny]` die Fluchtluke pro Modul, wie jedes Modul beendet, so migrierte " "Code kann nicht zurücktreten. **Fertig, als Test und nicht als Attribut**: " @@ -84123,10 +87225,10 @@ msgstr "" "textuelle `.ll` und Shells heraus zu einem Benutzer-gelieferte `clang`, so " "dass es kontrolliert weder die Pass-Pipeline noch die Stackmap-Emission. " "\\#7241 Phase 0 entfernt genau diese Einschränkung — es baut die Pipeline " -"über die LLVM C API und unabhängig überprüft, dass **`gc \"statepoint-example" -"\"` konstruiert, überprüft und emittiert**. Es pinnt auch LLVM 22 (abtötet " -"den Apple-clang-21-vs-22 parse skew) und ist Opt-in hinter einer Fracht-" -"Funktion, so dass die Standard-Build ist Byte-for-Byte unverändert." +"über die LLVM C API und unabhängig überprüft, dass **`gc \"statepoint-" +"example\"` konstruiert, überprüft und emittiert**. Es pinnt auch LLVM 22 " +"(abtötet den Apple-clang-21-vs-22 parse skew) und ist Opt-in hinter einer " +"Fracht-Funktion, so dass die Standard-Build ist Byte-for-Byte unverändert." #: src/internals/rfc-rooting-by-construction.md:368 msgid "**⇒ The dependency order is 0 → 2, with 1 and 3 independent of both.**" @@ -84140,9 +87242,9 @@ msgstr "Was Statepoints mit diesem RFC machen" #: src/internals/rfc-rooting-by-construction.md:372 msgid "" -"Adopting layer 2 **deletes several of this document's \"what it cannot catch" -"\" entries rather than mitigating them**, because the shadow frame stops " -"existing:" +"Adopting layer 2 **deletes several of this document's \"what it cannot " +"catch\" entries rather than mitigating them**, because the shadow frame " +"stops existing:" msgstr "" "Annahme von Schicht 2 **löscht mehrere Einträge dieses Dokuments \"was es " "nicht fangen kann\" anstatt sie zu mildern**, weil der Schattenrahmen nicht " @@ -84323,8 +87425,8 @@ msgstr "" "Schritt 1 ist _not_ getan und sollte nicht angenommen werden: Die gruseligen " "Flucht-Hatch-Typen wurden nie benötigt, weil die Kombinator-Form eine " "Anrufstelle zu einer Zeit ohne sie migriert. Der `RefCell`'d Emitter, der " -"den Bestellfehler machen würde, bleibt ein Compilerfehler unerbaut. **" -"\\#7615 ist die Kampagnenkarte** — 88 Module, 694 Rohpointer, 262 " +"den Bestellfehler machen würde, bleibt ein Compilerfehler unerbaut. " +"**\\#7615 ist die Kampagnenkarte** — 88 Module, 694 Rohpointer, 262 " "Gefahrenstellen, zehn Scheiben." #: src/internals/node-api-host.md:3 @@ -84347,13 +87449,16 @@ msgstr "Durchführungsstatus" #: src/internals/node-api-host.md:10 #, fuzzy msgid "" -"The optional `perry-runtime/node-api-host` feature contains the version-10 " -"host: opaque handle scopes and references, GC root rewriting and weak " -"clearing, object metadata/finalization, values and descriptors, native " +"The runtime's Node-API host (`perry-runtime/src/node_api_host`) is the " +"version-10 host: opaque handle scopes and references, GC root rewriting and " +"weak clearing, object metadata/finalization, values and descriptors, native " "callbacks, buffers/views, promises, async work, threadsafe functions, " "cleanup hooks, and the authenticated module loader. The compiler enables it " -"only after the graph reaches a `.node` file owned by an exact host `perry." -"nativeAddons` entry." +"only after the graph reaches an approved `.node` input. Inputs include " +"literal edges, exact `perry.nativeAddonPaths` declarations, and target-" +"matching binaries discovered inside reached packages authorized by `perry." +"nativeAddons` (including their declared direct platform dependencies). An " +"unused package allowlist entry alone does not enable the host." msgstr "" "Die optionale `perry-runtime/node-api-host`-Funktion enthält den Host " "Version-8: opake Griff-Scopes und Referenzen, GC Root-Rewriting und " @@ -84364,7 +87469,7 @@ msgstr "" "Datei erreicht hat, die einem exakten Host-`perry.nativeAddons`-Eintrag " "gehört." -#: src/internals/node-api-host.md:17 +#: src/internals/node-api-host.md:21 #, fuzzy msgid "" "Approved addons are screened for direct libuv/V8/NAN/Node C++ imports, " @@ -84383,7 +87488,7 @@ msgstr "" "eingecheckten Symbolbestand der Version-8 und fehlen, wenn der Addon-Graph " "leer ist, wobei der Nullbyte-Standardpfad erhalten bleibt." -#: src/internals/node-api-host.md:24 +#: src/internals/node-api-host.md:28 msgid "" "The integration gate compiles and executes a direct C addon, verifies its " "imports resolve from the host executable, authenticates and then " @@ -84404,7 +87509,7 @@ msgstr "" "Offline-Russ erklären ihren Sprung, es sei denn, `PERRY_REQUIRE_NPM_E2E=1` " "ist gesetzt." -#: src/internals/node-api-host.md:33 +#: src/internals/node-api-host.md:37 msgid "" "The host lets a Perry executable load a prebuilt Node-API (`.node`) addon " "without embedding Node, V8, JavaScriptCore, or another JavaScript engine. It " @@ -84418,28 +87523,28 @@ msgstr "" "von Addons. Ein Paket mit einer Perry-Fassade bleibt an dieser Fassade: Der " "Host ersetzt niemals einen `well_known_bindings.toml`-Eintrag." -#: src/internals/node-api-host.md:39 +#: src/internals/node-api-host.md:43 msgid "Decisions at a glance" msgstr "Entscheidungen auf einen Blick" -#: src/internals/node-api-host.md:41 +#: src/internals/node-api-host.md:45 msgid "Decision" msgstr "Decision" -#: src/internals/node-api-host.md:43 +#: src/internals/node-api-host.md:47 msgid "Advertised API" msgstr "Angeworbene API" -#: src/internals/node-api-host.md:43 +#: src/internals/node-api-host.md:47 msgid "" "Node-API version 10 (`napi_get_version`); modules declaring 1 through 10 load" msgstr "" -#: src/internals/node-api-host.md:44 +#: src/internals/node-api-host.md:48 msgid "`napi_env`" msgstr "`napi_env`" -#: src/internals/node-api-host.md:44 +#: src/internals/node-api-host.md:48 #, fuzzy msgid "" "One environment per Perry agent/realm, owned by its JavaScript thread; per-" @@ -84447,11 +87552,11 @@ msgid "" msgstr "" "Eine Umgebung pro Perry agent/realm, im Besitz seines JavaScript-Gewindes" -#: src/internals/node-api-host.md:45 src/internals/node-api-host.md:113 +#: src/internals/node-api-host.md:49 src/internals/node-api-host.md:117 msgid "`napi_value`" msgstr "`napi_value`" -#: src/internals/node-api-host.md:45 +#: src/internals/node-api-host.md:49 msgid "" "Opaque host token containing an index and generation for an environment-" "local handle slot; never a Perry heap address" @@ -84459,22 +87564,22 @@ msgstr "" "Opaque Host-Token mit Index und Generierung für einen lokalen Handle-Slot; " "niemals eine Perry Heap-Adresse" -#: src/internals/node-api-host.md:46 +#: src/internals/node-api-host.md:50 msgid "Handle roots" msgstr "Wurzeln handhaben" -#: src/internals/node-api-host.md:46 +#: src/internals/node-api-host.md:50 msgid "" "Open handle scopes are mutable GC roots and are rewritten after evacuation" msgstr "" "Offene Handgriffe sind wandelbare GC-Wurzeln und werden nach Evakuierung " "umgeschrieben" -#: src/internals/node-api-host.md:47 +#: src/internals/node-api-host.md:51 msgid "`napi_ref`" msgstr "`napi_ref`" -#: src/internals/node-api-host.md:47 +#: src/internals/node-api-host.md:51 msgid "" "Strong references root their value; zero-count references use Perry's " "existing weak-target machinery" @@ -84482,11 +87587,11 @@ msgstr "" "Starke Referenzen wurzeln ihren Wert; Zero-Count-Referenzen verwenden Perrys " "vorhandene Schwachziel-Maschinen" -#: src/internals/node-api-host.md:48 +#: src/internals/node-api-host.md:52 msgid "Finalizers" msgstr "Finalizers" -#: src/internals/node-api-host.md:48 +#: src/internals/node-api-host.md:52 msgid "" "Address-keyed object metadata is rekeyed on moves and death-pruned after " "marking; callbacks are queued and run on the owning main thread outside GC" @@ -84495,11 +87600,11 @@ msgstr "" "und Death-gekürzt neu keyed; Callbacks werden angekreuzt und auf dem eigenen " "Hauptthread außerhalb von GC ausgeführt" -#: src/internals/node-api-host.md:49 +#: src/internals/node-api-host.md:53 msgid "Exceptions" msgstr "Exceptions" -#: src/internals/node-api-host.md:49 +#: src/internals/node-api-host.md:53 msgid "" "Perry throws are trapped inside the host, stored in the environment, and " "returned as `napi_pending_exception`; no unwind crosses addon code" @@ -84508,11 +87613,11 @@ msgstr "" "und als `napi_pending_exception` zurückgegeben; kein Abschalten Kreuze addon " "Code" -#: src/internals/node-api-host.md:50 +#: src/internals/node-api-host.md:54 msgid "Off-thread API" msgstr "Off-Thread API" -#: src/internals/node-api-host.md:50 +#: src/internals/node-api-host.md:54 msgid "" "Only TSFN call/acquire/release operations are legal; every other operation " "verifies the owning thread" @@ -84520,11 +87625,11 @@ msgstr "" "Nur TSFN call/acquire/release-Operationen sind legal; jede andere Operation " "überprüft den eigenen Thread" -#: src/internals/node-api-host.md:51 +#: src/internals/node-api-host.md:55 msgid "Module entry" msgstr "Moduleintrag" -#: src/internals/node-api-host.md:51 +#: src/internals/node-api-host.md:55 msgid "" "Prefer `napi_register_module_v1`; support constructor-time " "`napi_module_register` for legacy addons" @@ -84532,22 +87637,22 @@ msgstr "" "Bevorzugen Sie `napi_register_module_v1`; unterstützen Sie Konstruktor-Zeit " "`napi_module_register` für Legacy-Addons" -#: src/internals/node-api-host.md:52 +#: src/internals/node-api-host.md:56 msgid "Unsupported ABI" msgstr "Nicht unterstützte ABI" -#: src/internals/node-api-host.md:52 +#: src/internals/node-api-host.md:56 msgid "" "NAN, V8, direct `uv_*`, and mobile targets are rejected before initialization" msgstr "" "NAN, V8, direkte `uv_*` und mobile Ziele werden vor der Initialisierung " "abgelehnt" -#: src/internals/node-api-host.md:53 +#: src/internals/node-api-host.md:57 msgid "Shipping" msgstr "Shipping" -#: src/internals/node-api-host.md:53 +#: src/internals/node-api-host.md:57 msgid "" "Relocatable sidecar directory beside the executable; no extract-at-first-run " "path" @@ -84555,18 +87660,18 @@ msgstr "" "Auswechselbares Sidecar-Verzeichnis neben der ausführbaren Datei; kein " "extract-at-first-run Pfad" -#: src/internals/node-api-host.md:54 +#: src/internals/node-api-host.md:58 msgid "" "Exact package-name allowlist in `package.json` under `perry.nativeAddons`" msgstr "" "Exakte Paket-Namen-Erlaubnisliste in `package.json` unter `perry." "nativeAddons`" -#: src/internals/node-api-host.md:55 +#: src/internals/node-api-host.md:59 msgid "Size gate" msgstr "Größe Tor" -#: src/internals/node-api-host.md:55 +#: src/internals/node-api-host.md:59 msgid "" "No addon in the graph means no host archive references, no exported Node-API " "symbols, and a zero-byte executable delta" @@ -84574,7 +87679,7 @@ msgstr "" "Kein Addon im Graphen bedeutet keine Host-Archiv-Referenzen, keine " "exportierten Node-API-Symbole und ein Nullbyte ausführbares Delta" -#: src/internals/node-api-host.md:57 +#: src/internals/node-api-host.md:61 msgid "" "The host implements every stable entry point through Node-API version 10, " "the highest version Node 26 supports (#10456). Current releases of argon2, " @@ -84587,11 +87692,11 @@ msgid "" "requested and supported versions in the diagnostic." msgstr "" -#: src/internals/node-api-host.md:67 +#: src/internals/node-api-host.md:71 msgid "Module attribution and version-dependent behavior" msgstr "" -#: src/internals/node-api-host.md:69 +#: src/internals/node-api-host.md:73 msgid "" "Node creates one `napi_env` per module and stores that module's version and " "file URL on it. Perry keeps one environment per agent, so the two per-module " @@ -84603,14 +87708,14 @@ msgid "" "An environment cleanup hook receives no environment and is not attributed." msgstr "" -#: src/internals/node-api-host.md:78 +#: src/internals/node-api-host.md:82 msgid "" "`node_api_get_module_file_name` returns the active module's `file://` URL of " "the canonical sidecar path it was loaded from. Code outside every attributed " "entry point sees the most recently loaded module." msgstr "" -#: src/internals/node-api-host.md:81 +#: src/internals/node-api-host.md:85 msgid "" "An exception left pending by a callback with no JavaScript caller follows " "`node_napi_env__::CallbackIntoModule`: async-work completions and finalizers " @@ -84620,45 +87725,45 @@ msgid "" "the environment is shutting down, the exception is dropped." msgstr "" -#: src/internals/node-api-host.md:87 +#: src/internals/node-api-host.md:91 msgid "" "`napi_create_reference` accepts any value type, the version-10 rule, for " "every module." msgstr "" -#: src/internals/node-api-host.md:89 +#: src/internals/node-api-host.md:93 msgid "" "Node returns `napi_cannot_run_js` (version 10) or `napi_pending_exception` " "when an environment can no longer run JavaScript. Perry has no such state: " "JavaScript stays callable while the environment shuts down." msgstr "" -#: src/internals/node-api-host.md:92 +#: src/internals/node-api-host.md:96 msgid "" "Instance data (`napi_set_instance_data`) belongs to the shared environment, " "not to a module." msgstr "" -#: src/internals/node-api-host.md:95 +#: src/internals/node-api-host.md:99 msgid "Environment and handle representation" msgstr "Umwelt und Handle Darstellung" -#: src/internals/node-api-host.md:97 +#: src/internals/node-api-host.md:101 msgid "" "`napi_env` points to a host-owned `Env` that is not a GC object. It contains:" msgstr "" "`napi_env` zeigt auf ein Host-eigenes `Env`, das kein GC-Objekt ist. Es " "enthält:" -#: src/internals/node-api-host.md:99 +#: src/internals/node-api-host.md:103 msgid "a unique environment id and the owning `ThreadId`;" msgstr "eine einzigartige Umgebungs-ID und die besitzende `ThreadId`;" -#: src/internals/node-api-host.md:100 +#: src/internals/node-api-host.md:104 msgid "the open handle-scope stack and handle-slot slab;" msgstr "die offene Hand-Scope-Stapel- und Hand-Slot-Platte;" -#: src/internals/node-api-host.md:101 +#: src/internals/node-api-host.md:105 msgid "" "references, native callback records, deferred promises, async work, and " "threadsafe functions owned by the environment;" @@ -84666,7 +87771,7 @@ msgstr "" "Referenzen, native Callback-Datensätze, latente Versprechungen, async-Arbeit " "und Threadsafe-Funktionen im Besitz der Umwelt;" -#: src/internals/node-api-host.md:103 +#: src/internals/node-api-host.md:107 msgid "" "a rooted pending-exception slot and stable `napi_extended_error_info` " "storage;" @@ -84674,7 +87779,7 @@ msgstr "" "einem wurzelnden Ausnahme-Slot und stabilem `napi_extended_error_info`-" "Speicher;" -#: src/internals/node-api-host.md:105 +#: src/internals/node-api-host.md:109 msgid "" "instance data, environment cleanup hooks, the current module filename, and a " "`can_call_into_js` state;" @@ -84682,14 +87787,14 @@ msgstr "" "Instanzdaten, Umgebungsaufräumungs-Hooks, der aktuelle Modul-Dateiname und " "ein `can_call_into_js`-Status;" -#: src/internals/node-api-host.md:107 +#: src/internals/node-api-host.md:111 msgid "" "the environment lifecycle (`loading`, `running`, `closing`, or `closed`)." msgstr "" "den Lebenszyklus der Umgebung (`loading`, `running`, `closing` oder " "`closed`)." -#: src/internals/node-api-host.md:109 +#: src/internals/node-api-host.md:113 msgid "" "The environment is created for the Perry agent before the first addon loads " "and destroyed after the event pump has stopped accepting work. Different " @@ -84700,7 +87805,7 @@ msgstr "" "akzeptieren. Verschiedene Perry-Agenten teilen niemals eine Umgebung oder " "einen Heap-Wert." -#: src/internals/node-api-host.md:115 +#: src/internals/node-api-host.md:119 msgid "" "A `napi_value` is an opaque pointer to a non-moving host token. The token " "holds `(env_id, slot_index, generation)`. The indexed `HandleSlot` holds the " @@ -84714,7 +87819,7 @@ msgstr "" "Bereich, ihre Generation und ein Live-Bit. So beobachtet addon Code nie eine " "rohe `ObjectHeader`, `StringHeader` oder andere bewegliche Heap-Adresse." -#: src/internals/node-api-host.md:121 +#: src/internals/node-api-host.md:125 msgid "" "Tokens are stable for the lifetime of the environment and are not reused. " "Slots may be reused only after their generation advances. Every entry point " @@ -84729,7 +87834,7 @@ msgstr "" "Scope close return `napi_invalid_arg`, anstatt einen neuen Wert zu " "aliasieren oder zurückgewonnenen Speicher zu dereferenzieren." -#: src/internals/node-api-host.md:127 +#: src/internals/node-api-host.md:131 msgid "" "Each `ScopeFrame` records the slot indices created in that scope and whether " "an escapable scope has already escaped a value. Closing a scope invalidates " @@ -84747,7 +87852,7 @@ msgstr "" "Umfang, so dass ein Addon nicht benötigt wird, um einen Bereich zu öffnen, " "bevor normale Rückgabewerte erstellt werden." -#: src/internals/node-api-host.md:134 +#: src/internals/node-api-host.md:138 msgid "" "All live scope slots are visited by `scan_node_api_roots_mut`, registered in " "`gc_init()` with a descriptive name. The scanner uses mutable NaN-box " @@ -84766,11 +87871,11 @@ msgstr "" "besucht. Die neuen Tabellen müssen in `scripts/gc_runtime_root_holders.json` " "im Commit, das sie einführt, klassifiziert werden." -#: src/internals/node-api-host.md:142 +#: src/internals/node-api-host.md:146 msgid "The following invariant applies at every host call site:" msgstr "Folgende Invarianten gelten für jede Host-Anrufseite:" -#: src/internals/node-api-host.md:144 +#: src/internals/node-api-host.md:148 msgid "" "A Perry heap value is written into a live handle slot before any operation " "that can allocate or call JavaScript, and is reread from that slot after the " @@ -84780,7 +87885,7 @@ msgstr "" "aufrufen kann, in einen Live-Handle-Slot geschrieben und wird nach der " "Operation von diesem Slot erneut gelesen." -#: src/internals/node-api-host.md:148 +#: src/internals/node-api-host.md:152 msgid "" "In particular, the host never caches `HandleSlot.value_bits` in a Rust local " "across property access, conversion, callback invocation, or allocation." @@ -84789,11 +87894,11 @@ msgstr "" "lokalen Rust über den Zugriff auf Eigentum, die Konvertierung, die " "Rückrufaufrufe oder die Zuweisung." -#: src/internals/node-api-host.md:151 +#: src/internals/node-api-host.md:155 msgid "References, including weak references" msgstr "Referenzen, einschließlich schwacher Verweise" -#: src/internals/node-api-host.md:153 +#: src/internals/node-api-host.md:157 msgid "" "`napi_ref` is a stable host record, also tagged with its environment id and " "a generation. A positive reference count stores its value in a strong slot " @@ -84804,7 +87909,7 @@ msgstr "" "speichert seinen Wert in einem starken Slot, der von " "`scan_node_api_roots_mut` besucht wird." -#: src/internals/node-api-host.md:157 +#: src/internals/node-api-host.md:161 msgid "" "Weak references are in version 1; deferring them would exclude common node-" "addon-api and napi-rs patterns. A zero-count reference roots a hidden Perry " @@ -84818,7 +87923,7 @@ msgstr "" "überspringt und schreibt bereits den schwachen Zielschlitz des Halters und " "löscht ihn während jeder Sammlung. Consequently:" -#: src/internals/node-api-host.md:162 +#: src/internals/node-api-host.md:166 msgid "" "`napi_create_reference(..., 0, ...)` creates the hidden weak holder while " "the input handle is still rooted." @@ -84826,7 +87931,7 @@ msgstr "" "`napi_create_reference(..., 0, ...)` erzeugt den versteckten schwachen " "Halter, während der Eingabegriff noch verwurzelt ist." -#: src/internals/node-api-host.md:164 +#: src/internals/node-api-host.md:168 msgid "" "`napi_reference_ref` reads the weak target. If it has been collected it " "returns `napi_ok` with count zero without resurrecting it; otherwise the " @@ -84837,7 +87942,7 @@ msgstr "" "bewegt sich das Ziel in den starken Schlitz, bevor der schwache Halter " "freigegeben wird." -#: src/internals/node-api-host.md:167 +#: src/internals/node-api-host.md:171 msgid "" "`napi_reference_unref` changing `1 -> 0` creates a weak holder before " "clearing the strong slot." @@ -84845,7 +87950,7 @@ msgstr "" "`napi_reference_unref` `1 -> 0` ändert einen schwachen Halter, bevor der " "starke Steckplatz geleert wird." -#: src/internals/node-api-host.md:169 +#: src/internals/node-api-host.md:173 msgid "" "`napi_get_reference_value` returns a null C pointer when a weak target has " "been collected, matching Node-API; that is distinct from a handle for the " @@ -84855,7 +87960,7 @@ msgstr "" "schwaches Ziel gesammelt wurde, passend zu Node-API; das unterscheidet sich " "von einem Handle für den JavaScript-Wert `null`." -#: src/internals/node-api-host.md:173 +#: src/internals/node-api-host.md:177 msgid "" "Values that cannot be held weakly (for example, number primitives) remain " "strongly retained even at refcount zero, matching Node's reference behavior. " @@ -84870,11 +87975,11 @@ msgstr "" "und geben `napi_generic_failure` bei Überlauf, Unterlauf oder einem bereits " "gelöschten Datensatz zurück." -#: src/internals/node-api-host.md:179 +#: src/internals/node-api-host.md:183 msgid "Native-owned data and finalization" msgstr "Native-Eigene Daten und Fertigstellung" -#: src/internals/node-api-host.md:181 +#: src/internals/node-api-host.md:185 msgid "" "Wrap data, externals, type tags, and finalizer records live in a per-agent " "`NODE_API_OBJECT_META` table keyed by the owning Perry user address. A table " @@ -84886,13 +87991,13 @@ msgstr "" "keyed. Ein Tabelleneintrag enthält nur native Zeiger und Identifikatoren; er " "hält seinen Besitzer nie am Leben." -#: src/internals/node-api-host.md:186 +#: src/internals/node-api-host.md:190 msgid "The table has both halves required by a moving collector:" msgstr "" "Der Tisch hat beide Hälften, die von einem beweglichen Kollektor benötigt " "werden:" -#: src/internals/node-api-host.md:188 +#: src/internals/node-api-host.md:192 msgid "" "`scan_node_api_object_meta_keys_mut` visits keys as metadata. It follows " "forwarding records and rekeys entries without marking the owner." @@ -84901,7 +88006,7 @@ msgstr "" "folgt Weiterleitung Datensätze und rekeys Einträge ohne Markierung des " "Besitzers." -#: src/internals/node-api-host.md:190 +#: src/internals/node-api-host.md:194 msgid "" "`prune_dead_node_api_object_meta_owners` is registered in `gc::dead_owner::" "DEAD_KEY_PRUNES`. Both post-trace and copied-minor fan-out remove entries " @@ -84911,7 +88016,7 @@ msgstr "" "DEAD_KEY_PRUNES` registriert. Sowohl Post-Trace als auch kopiert-kleiner Fan-" "Out entfernen Einträge, deren Besitzer nachweislich tot sind." -#: src/internals/node-api-host.md:194 +#: src/internals/node-api-host.md:198 msgid "" "The rekey site and death prune receive matching entries in `scripts/" "gc_rekeyed_key_tables.json`. Merely registering a strong root scanner would " @@ -84922,7 +88027,7 @@ msgstr "" "Wurzelscanners wäre hier falsch, weil es jedes gewickelte Objekt unsterblich " "machen würde." -#: src/internals/node-api-host.md:198 +#: src/internals/node-api-host.md:202 msgid "" "Death pruning moves finalizer records into a native pending queue. It does " "not call addon code while the collector is marking, rewriting, sweeping, or " @@ -84943,7 +88048,7 @@ msgstr "" "`node_api_basic_env`-Restriktionen und `node_api_post_finalizer`-Paaring " "werden mit dem Rest dieser experimentellen Oberfläche verschoben." -#: src/internals/node-api-host.md:207 +#: src/internals/node-api-host.md:211 msgid "" "`napi_wrap` installs at most one wrap record per object. `napi_unwrap` reads " "it. `napi_remove_wrap` atomically removes it, returns the native pointer, " @@ -84963,7 +88068,7 @@ msgstr "" "kann; das Löschen dieser Referenz aus dem Inneren des bereits gespeicherten " "Callbacks gibt nur die Referenz frei." -#: src/internals/node-api-host.md:215 +#: src/internals/node-api-host.md:219 msgid "" "External buffers and array buffers use the same finalizer queue. Environment " "shutdown first prevents new work, drains TSFNs and async completions, runs " @@ -84980,7 +88085,7 @@ msgstr "" "running -> complete`, so dass explizite Entfernung, Sammlung und " "Herunterfahren nicht doppelt anrufen kann." -#: src/internals/node-api-host.md:222 +#: src/internals/node-api-host.md:226 msgid "" "No finalizer ordering is promised between different objects. Records " "attached to one object are queued in registration order. Environment cleanup " @@ -84994,11 +88099,11 @@ msgstr "" "Herunterfahren offen, bis ihr Entfernungs-Reinigungs-Callback aufgerufen " "wird." -#: src/internals/node-api-host.md:227 +#: src/internals/node-api-host.md:231 msgid "Status codes and pending exceptions" msgstr "Statuscodes und noch ausstehende Ausnahmen" -#: src/internals/node-api-host.md:229 +#: src/internals/node-api-host.md:233 msgid "" "Every exported entry point is a plain `extern \"C\"` boundary and uses one " "common prologue/epilogue:" @@ -85006,7 +88111,7 @@ msgstr "" "Jeder exportierte Eintrag ist eine einfache `extern \"C\"` Grenze und " "verwendet eine gemeinsame prologue/epilogue:" -#: src/internals/node-api-host.md:232 +#: src/internals/node-api-host.md:236 msgid "" "validate the environment, lifecycle, owner thread, input pointers, and " "handle generations without panicking;" @@ -85014,18 +88119,18 @@ msgstr "" "die Umgebung, den Lebenszyklus, den Eigentümerthread, die Eingabezeiger und " "die Generationen ohne Panik zu validieren;" -#: src/internals/node-api-host.md:234 +#: src/internals/node-api-host.md:238 msgid "reject JavaScript-capable work when `can_call_into_js` is false;" msgstr "JavaScript-fähige Arbeit ablehnen, wenn `can_call_into_js` falsch ist;" -#: src/internals/node-api-host.md:235 +#: src/internals/node-api-host.md:239 msgid "" "run every operation that may throw through `exception::js_call_catching`;" msgstr "" "jede Operation ausführen, die durch `exception::js_call_catching` werfen " "kann;" -#: src/internals/node-api-host.md:236 +#: src/internals/node-api-host.md:240 msgid "" "on a Perry throw, root the thrown value in `Env.pending_exception` and " "return `napi_pending_exception`;" @@ -85033,7 +88138,7 @@ msgstr "" "bei einem Perry-Wurf den geworfenen Wert in `Env.pending_exception` wurzeln " "und `napi_pending_exception` zurückgeben;" -#: src/internals/node-api-host.md:238 +#: src/internals/node-api-host.md:242 msgid "" "write output parameters only on the statuses for which Node-API defines an " "output;" @@ -85041,13 +88146,13 @@ msgstr "" "Schreibausgabeparameter nur auf den Status, für den Node-API eine Ausgabe " "definiert;" -#: src/internals/node-api-host.md:240 +#: src/internals/node-api-host.md:244 msgid "update stable per-environment extended-error storage before returning." msgstr "" "Aktualisierung stabiler pro-Umgebung erweiterter Terror-Speicherung vor der " "Rückkehr." -#: src/internals/node-api-host.md:242 +#: src/internals/node-api-host.md:246 msgid "" "`napi_throw` and its error helpers only set the pending slot. They do not " "call `js_throw` while the addon is on the stack. When a native callback " @@ -85065,7 +88170,7 @@ msgstr "" "Grenze auf. Dies garantiert, dass weder der Perry-Systemabwickler noch sein " "`setjmp`-Transport durch Fremdrahmen kreuzt." -#: src/internals/node-api-host.md:249 +#: src/internals/node-api-host.md:253 msgid "" "`napi_is_exception_pending` is a pure query. " "`napi_get_and_clear_last_exception` creates a handle for the rooted " @@ -85081,7 +88186,7 @@ msgstr "" "gewöhnliche APIs `napi_pending_exception` zurück; die Ausnahme query/clear " "und Fehlerinformationsoperationen bleiben verfügbar." -#: src/internals/node-api-host.md:256 +#: src/internals/node-api-host.md:260 msgid "" "The error-info message is owned by the environment and remains valid until " "the next Node-API call on that environment. `engine_error_code` is zero and " @@ -85096,11 +88201,11 @@ msgstr "" "`napi_fatal_exception` überträgt den Fehler auf Perry's uncaught-Exception-" "Pfad auf dem Hauptgewinde." -#: src/internals/node-api-host.md:262 +#: src/internals/node-api-host.md:266 msgid "Functions and native classes" msgstr "Funktionen und native Klassen" -#: src/internals/node-api-host.md:264 +#: src/internals/node-api-host.md:268 msgid "" "`napi_create_function` allocates a Perry closure whose captured host record " "contains the native callback pointer, addon data pointer, name, and " @@ -85118,7 +88223,7 @@ msgstr "" "eines impliziten Handle Scope auf und konvertiert den zurückgegebenen Token " "zurück in einen Perry Wert, bevor er diesen Scope schließt." -#: src/internals/node-api-host.md:272 +#: src/internals/node-api-host.md:276 msgid "" "`napi_call_function` uses Perry's general callable dispatch, not a closure-" "only shortcut, so proxies, bound functions, and compiled JavaScript " @@ -85132,7 +88237,7 @@ msgstr "" "`napi_new_instance` verwendet für die Dauer des Aufrufs den allgemeinen " "Baupfad und die Arme den neuen Zielzustand von Perry." -#: src/internals/node-api-host.md:277 +#: src/internals/node-api-host.md:281 msgid "" "`napi_define_class` allocates a synthetic class id and registers its " "constructor and prototype in the existing class-id chain. Instance methods/" @@ -85151,7 +88256,7 @@ msgstr "" "Konstruktor ein Objekt zurückgibt, gelten die normalen JavaScript " "Konstruktor-Ersatzregeln." -#: src/internals/node-api-host.md:284 +#: src/internals/node-api-host.md:288 msgid "" "The registration also populates the runtime's dynamic-parent/prototype " "tables, so a compiled class may extend a native-defined constructor and a " @@ -85170,7 +88275,7 @@ msgstr "" "Klasse-Subklassierung enthalten, weil dies den historisch schwachen " "dynamischen Pfad der Laufzeit durchquert." -#: src/internals/node-api-host.md:292 +#: src/internals/node-api-host.md:296 msgid "" "Property descriptors preserve `napi_writable`, `napi_enumerable`, and " "`napi_configurable`. Getter and setter records use the same native callback " @@ -85182,11 +88287,11 @@ msgstr "" "native Callback-Trampolin. Ein Deskriptor mit inkompatiblen `value`/`method`/" "accessor-Feldern wird abgelehnt, bevor eine Eigenschaft geändert wird." -#: src/internals/node-api-host.md:297 +#: src/internals/node-api-host.md:301 msgid "Buffers, views, and external memory" msgstr "Puffer, Ansichten und externer Speicher" -#: src/internals/node-api-host.md:299 +#: src/internals/node-api-host.md:303 msgid "" "Perry `Buffer`, typed-array, array-buffer, and data-view byte storage is " "born tenured and does not move. A returned native data pointer therefore " @@ -85198,7 +88303,7 @@ msgstr "" "Datenzeiger bleibt somit für die von Node-API benötigte Lebensdauer stabil, " "während der Wrapper selbst ein gewöhnlicher Wurzelgriff bleibt." -#: src/internals/node-api-host.md:304 +#: src/internals/node-api-host.md:308 msgid "" "The host reuses the existing buffer/view registries for type identity, " "backing array-buffer identity, offsets, and detach propagation. Creating an " @@ -85216,7 +88321,7 @@ msgstr "" "und Nulldaten, und alle vorhandenen Ansichten beobachten die Ablösung. " "Puffer-APIs ablehnen den losgelösten Speicher, wo Knoten tut." -#: src/internals/node-api-host.md:311 +#: src/internals/node-api-host.md:315 msgid "" "`napi_adjust_external_memory` updates a signed per-environment counter and " "the collector's external-memory pressure accounting. It neither allocates an " @@ -85231,15 +88336,15 @@ msgstr "" "Druckrechnung, während der zurückgegebene kumulative Wert der API bleibt die " "geprüfte signierte Summe." -#: src/internals/node-api-host.md:317 +#: src/internals/node-api-host.md:321 msgid "Async work and threadsafe functions" msgstr "Async Arbeits- und Threadsafe-Funktionen" -#: src/internals/node-api-host.md:319 +#: src/internals/node-api-host.md:323 msgid "`napi_create_async_work` creates an explicit state machine:" msgstr "`napi_create_async_work` erstellt eine explizite Zustandsmaschine:" -#: src/internals/node-api-host.md:326 +#: src/internals/node-api-host.md:330 msgid "" "Queueing uses `perry_ffi::spawn_blocking`. The execute callback runs on a " "worker without access to Perry heap state. Completion is posted through the " @@ -85257,7 +88362,7 @@ msgstr "" "Fertigstellung markiert den öffentlichen Griff gelöscht, behält aber den " "internen Rekord, bis weder Arbeiter noch Fertigstellung besitzt es." -#: src/internals/node-api-host.md:333 +#: src/internals/node-api-host.md:337 msgid "" "A TSFN owns a strong function reference (when a function is supplied), its " "context, bounded or unbounded queue, thread count, ref/unref state, and " @@ -85277,7 +88382,7 @@ msgstr "" "Kapazität; ein Sperrruf vom Eigentümer-Thread mit einer vollumfänglichen " "Warteschlange gibt `napi_would_deadlock` zurück." -#: src/internals/node-api-host.md:341 +#: src/internals/node-api-host.md:345 msgid "" "The main-thread drain invokes `call_js_cb`, which may then use the " "environment and supplied JavaScript callback. Abort release drains remaining " @@ -85294,7 +88399,7 @@ msgstr "" "ref'd TSFN trägt zur Ereignis-Schleife-Behaltzahl von Perry bei; unref " "entfernt diesen Beitrag, ohne die Funktion zu zerstören." -#: src/internals/node-api-host.md:348 +#: src/internals/node-api-host.md:352 msgid "" "`napi_async_init`, `napi_make_callback`, and `napi_async_destroy` bridge to " "the existing `async_hooks` resource/context machinery. Callback scopes are a " @@ -85306,31 +88411,31 @@ msgstr "" "sind ein validierter Nesting-Zähler um diesen Kontext; Missanpassung gibt " "`napi_callback_scope_mismatch` zurück." -#: src/internals/node-api-host.md:353 +#: src/internals/node-api-host.md:357 msgid "Threading rules" msgstr "Regeln für das Einfädeln" -#: src/internals/node-api-host.md:355 +#: src/internals/node-api-host.md:359 msgid "The following calls are legal from a foreign thread:" msgstr "Die folgenden Anrufe sind von einem ausländischen Thread aus zulässig:" -#: src/internals/node-api-host.md:357 +#: src/internals/node-api-host.md:361 msgid "`napi_call_threadsafe_function`" msgstr "`napi_call_threadsafe_function`" -#: src/internals/node-api-host.md:358 +#: src/internals/node-api-host.md:362 msgid "`napi_acquire_threadsafe_function`" msgstr "`napi_acquire_threadsafe_function`" -#: src/internals/node-api-host.md:359 +#: src/internals/node-api-host.md:363 msgid "`napi_release_threadsafe_function`" msgstr "`napi_release_threadsafe_function`" -#: src/internals/node-api-host.md:360 +#: src/internals/node-api-host.md:364 msgid "`napi_fatal_error` (it does not return)" msgstr "`napi_fatal_error` (wird nicht zurückgegeben)" -#: src/internals/node-api-host.md:362 +#: src/internals/node-api-host.md:366 msgid "" "All other entry points require the environment's owner thread, including " "`napi_get_threadsafe_function_context`, TSFN ref/unref, reference " @@ -85347,7 +88452,7 @@ msgstr "" "zeichnet eine Diagnose auf, wenn eine Umgebung verfügbar ist, und liest oder " "schreibt niemals den Perry-Hollow-Status." -#: src/internals/node-api-host.md:369 +#: src/internals/node-api-host.md:373 msgid "" "The execute half of async work is a foreign thread under this rule. The " "complete half, module initialization, cleanup hooks, finalizers, native " @@ -85358,21 +88463,28 @@ msgstr "" "Finalizer, native Callbacks und TSFN `call_js_cb` laufen alle auf dem " "Eigentümergewinde." -#: src/internals/node-api-host.md:373 +#: src/internals/node-api-host.md:377 msgid "Module loading" msgstr "Modulbeladung" -#: src/internals/node-api-host.md:375 +#: src/internals/node-api-host.md:379 msgid "" "The compile graph records every approved `.node` file as a native-addon " -"module instead of trying to read it as UTF-8. At runtime, one loader " -"operation does the following:" +"module instead of trying to read it as UTF-8. Computed CommonJS `require()` " +"and `createRequire()` requests use the same loader as `process.dlopen()`. " +"The manifest maps logical IDs, original package paths, and unambiguous " +"declared project paths to sidecar payloads, so the original source tree may " +"be removed. Runtime-computed `require.resolve()` requests return the " +"deployed payload path, which also keys `require.cache`. Only manifest " +"entries can load; merely finding a `.node` file on the host filesystem does " +"not authorize it." msgstr "" -"Der Compil-Graph zeichnet jede genehmigte `.node`-Datei als natives Addon-" -"Modul auf, anstatt sie als UTF-8 zu lesen. Zur Laufzeit führt ein Loader-" -"Betrieb Folgendes aus:" -#: src/internals/node-api-host.md:379 +#: src/internals/node-api-host.md:388 +msgid "At runtime, one loader operation does the following:" +msgstr "" + +#: src/internals/node-api-host.md:390 msgid "" "canonicalize the manifest-selected sidecar path beneath the executable's " "sidecar root;" @@ -85380,13 +88492,13 @@ msgstr "" "den manifestierten Seitenwagenpfad unterhalb der Seitenwagenwurzel des " "Ausführbaren kanonischisieren;" -#: src/internals/node-api-host.md:381 +#: src/internals/node-api-host.md:392 msgid "" "return the cached exports object if that canonical file is already loaded;" msgstr "" "return the cached exports object if that canonical file is already loaded;" -#: src/internals/node-api-host.md:382 +#: src/internals/node-api-host.md:393 msgid "" "set an environment-local `currently_loading` guard and load with `RTLD_NOW | " "RTLD_LOCAL` on Unix or safe `LoadLibraryExW` search flags on Windows;" @@ -85395,7 +88507,7 @@ msgstr "" "RTLD_LOCAL` auf Unix oder sicheren `LoadLibraryExW`-Suchflaggen auf Windows " "setzen;" -#: src/internals/node-api-host.md:385 +#: src/internals/node-api-host.md:396 msgid "" "reject an unresolved `uv_*`, V8, NAN, or non-Node-API Node symbol with the " "exact symbol and addon path in the error;" @@ -85403,7 +88515,7 @@ msgstr "" "ein nicht aufgelöstes `uv_*`, V8, NAN oder Nicht-Node-API-Node-Symbol mit " "dem genauen Symbol und dem zusätzlichen Pfad im Fehler zurückweisen;" -#: src/internals/node-api-host.md:387 +#: src/internals/node-api-host.md:398 #, fuzzy msgid "" "if present, call `node_api_module_get_api_version_v1` and reject versions " @@ -85413,7 +88525,7 @@ msgstr "" "if present, call `node_api_module_get_api_version_v1` and reject versions " "above 8;" -#: src/internals/node-api-host.md:390 +#: src/internals/node-api-host.md:401 msgid "" "prefer `napi_register_module_v1(env, exports)`; otherwise use the descriptor " "captured by `napi_module_register` while the library constructor ran;" @@ -85422,7 +88534,7 @@ msgstr "" "Deskriptor, der von `napi_module_register` erfasst wurde, während der " "Bibliothekskonstruktor lief;" -#: src/internals/node-api-host.md:392 +#: src/internals/node-api-host.md:403 msgid "" "use the initializer's returned object, or the supplied exports object when " "the initializer returns null without an exception;" @@ -85430,11 +88542,11 @@ msgstr "" "use the initializer's returned object, or the supplied exports object when " "the initializer returns null without an exception;" -#: src/internals/node-api-host.md:394 +#: src/internals/node-api-host.md:405 msgid "cache the rooted exports and library handle together." msgstr "Cache die verwurzelten Exporte und Bibliothek gemeinsam handhaben." -#: src/internals/node-api-host.md:396 +#: src/internals/node-api-host.md:407 msgid "" "`napi_module_register` outside an active load is an error. Multiple " "descriptors from one library are rejected. An initializer exception closes " @@ -85447,7 +88559,7 @@ msgstr "" "propagiert die rooted Ausnahme erst, nachdem die Kontrolle vom Addoncode " "zurückgegeben wurde." -#: src/internals/node-api-host.md:401 +#: src/internals/node-api-host.md:412 msgid "" "Static `require()` of an approved addon lowers directly to this loader. " "`process.dlopen(module, filename[, flags])` calls the same operation and " @@ -85464,24 +88576,26 @@ msgstr "" "Time-Addon-Manifest enthalten ist; die Allowlist ist keine allgemeine " "`dlopen`-Fähigkeit." -#: src/internals/node-api-host.md:408 +#: src/internals/node-api-host.md:419 msgid "" "The initializer runs attributed to its module, which is how " "`node_api_get_module_file_name` answers during initialization; see [Module " "attribution](#module-attribution-and-version-dependent-behavior)." msgstr "" -#: src/internals/node-api-host.md:412 +#: src/internals/node-api-host.md:423 msgid "Linking and exported symbols" msgstr "Verknüpfung und Export von Symbolen" -#: src/internals/node-api-host.md:414 +#: src/internals/node-api-host.md:425 +#, fuzzy msgid "" -"The Node-API implementation lives behind a `node-api-host` runtime feature. " -"The compiler enables it only when the collected graph contains an approved " -"addon. A checked-in symbol inventory is the single source for Rust export " -"retention, platform linker flags, unresolved-symbol validation, and the CI " -"assertion." +"The Node-API implementation is compiled into every runtime archive and is " +"reached only through its install, `js_runtime_install_node_api_host`, which " +"the compiler's generated installer calls only when the collected graph " +"contains an approved addon; without it the linker drops the host. A checked-" +"in symbol inventory is the single source for Rust export retention, platform " +"linker flags, unresolved-symbol validation, and the CI assertion." msgstr "" "Die Node-API-Implementierung lebt hinter einer `node-api-host`-" "Laufzeitfunktion. Der Compiler ermöglicht es nur, wenn der gesammelte Graph " @@ -85489,7 +88603,7 @@ msgstr "" "Quelle für Rust-Export-Retention, Plattformlinker-Flags, ungelöste Symbol-" "Validierung und die CI-Anerkennung." -#: src/internals/node-api-host.md:420 +#: src/internals/node-api-host.md:432 msgid "" "macOS removes `-Wl,-no_exported_symbols` only for an addon build and " "supplies an exported-symbols list containing the approved `_napi_*` names." @@ -85497,7 +88611,7 @@ msgstr "" "macOS entfernt `-Wl,-no_exported_symbols` nur für einen Addon-Build und " "liefert eine exportierte Symbolliste mit den genehmigten `_napi_*`-Namen." -#: src/internals/node-api-host.md:422 +#: src/internals/node-api-host.md:434 msgid "" "Linux uses one `--export-dynamic-symbol=` entry per approved symbol, " "not broad `--export-dynamic`." @@ -85505,7 +88619,7 @@ msgstr "" "Linux verwendet einen `--export-dynamic-symbol=`-Eintrag pro " "genehmigtes Symbol, nicht weit `--export-dynamic`." -#: src/internals/node-api-host.md:424 +#: src/internals/node-api-host.md:436 msgid "" "Windows supplies `/EXPORT:` entries. The addon's standard delay-load " "hook resolves its `node.exe` imports against the current executable." @@ -85513,7 +88627,7 @@ msgstr "" "Windows liefert `/EXPORT:`-Einträge. Der Standard-Delay-load-Hook des " "Addons löst seine `node.exe`-Importe gegen die aktuelle ausführbare Datei." -#: src/internals/node-api-host.md:427 +#: src/internals/node-api-host.md:439 msgid "" "The loader itself uses the existing `bun_ffi` platform abstraction, extended " "to report unresolved imports. Host symbols are retained and exported only " @@ -85526,27 +88640,27 @@ msgstr "" "hallo-world build hat daher genau den vorherigen Link-Befehl und Runtime-" "Feature-Set." -#: src/internals/node-api-host.md:432 +#: src/internals/node-api-host.md:444 msgid "Opt-in and route precedence" msgstr "Opt-in und Routenvorrang" -#: src/internals/node-api-host.md:434 +#: src/internals/node-api-host.md:446 msgid "The only opt-in is an exact package-name list in the project manifest:" msgstr "Das einzige Opt-In ist eine genaue Paketnamesliste im Projektmanifest:" -#: src/internals/node-api-host.md:439 +#: src/internals/node-api-host.md:451 src/internals/node-api-host.md:507 msgid "\"nativeAddons\"" msgstr "\"nativeAddons\"" -#: src/internals/node-api-host.md:439 +#: src/internals/node-api-host.md:451 msgid "\"@swc/core\"" msgstr "\"@swc/core\"" -#: src/internals/node-api-host.md:439 +#: src/internals/node-api-host.md:451 msgid "\"oxc-parser\"" msgstr "\"Oxc-parser\"" -#: src/internals/node-api-host.md:444 +#: src/internals/node-api-host.md:456 msgid "" "Transitive packages cannot opt themselves in. The nearest project manifest " "is authoritative, duplicate names are normalized, and subpaths inherit their " @@ -85556,37 +88670,41 @@ msgstr "" "ist maßgeblich, duplikate Namen werden normalisiert und Subpathen erben die " "Entscheidung ihres eigenen Pakets. Wildcards werden nicht akzeptiert." -#: src/internals/node-api-host.md:448 +#: src/internals/node-api-host.md:460 msgid "Resolution order is:" msgstr "Die Auflösungsanordnung lautet:" -#: src/internals/node-api-host.md:450 +#: src/internals/node-api-host.md:462 msgid "a `well_known_bindings.toml` facade;" msgstr "eine `well_known_bindings.toml`-Fassade;" -#: src/internals/node-api-host.md:451 +#: src/internals/node-api-host.md:463 msgid "a package's explicit `perry.nativeLibrary`;" msgstr "die ausdrückliche `perry.nativeLibrary`-Version eines Pakets;" -#: src/internals/node-api-host.md:452 +#: src/internals/node-api-host.md:464 msgid "a project `perry.nativeAddons` entry;" msgstr "einen Eintrag für das Projekt `perry.nativeAddons`;" -#: src/internals/node-api-host.md:453 +#: src/internals/node-api-host.md:465 msgid "ordinary JS/TS compilation;" msgstr "normale JS/TS-Zusammenstellung;" -#: src/internals/node-api-host.md:454 +#: src/internals/node-api-host.md:466 msgid "the existing actionable unsupported-addon error." msgstr "der vorhandene, nicht unterstützte Fehler." -#: src/internals/node-api-host.md:456 +#: src/internals/node-api-host.md:468 +#, fuzzy msgid "" "Thus listing `better-sqlite3`, `sharp`, or `@parcel/watcher` does not bypass " "its Perry facade. Node-API is faithful native execution, so an approved " "addon is compatible with `PERRY_REQUIRE_FAITHFUL_BINDINGS=1`; partial hand-" -"written facade policy remains unchanged. NAN/V8 or direct-libuv imports " -"remain hard errors even when the package name is allowlisted." +"written facade policy remains unchanged. When the actual JavaScript package " +"or a `.node` subpath is selected, explicit addon approval does authorize " +"Parcel watcher platform payloads; these files are no longer silently " +"discarded by the addon collector. NAN/V8 or direct-libuv imports remain hard " +"errors even when the package name is allowlisted." msgstr "" "Damit die Auflistung `better-sqlite3`, `sharp` oder `@parcel/watcher` nicht " "seine Perry Fassade umgehen. Node-API is faithful native execution, so an " @@ -85594,7 +88712,7 @@ msgstr "" "partial hand-written facade policy remains unchanged. NAN/V8 oder Direct-" "Libuv Importe bleiben auch dann harte Fehler, wenn der Paketname erlaubt ist." -#: src/internals/node-api-host.md:462 +#: src/internals/node-api-host.md:477 msgid "" "Desktop/server targets are macOS, Windows, Linux, and the BSDs supported by " "Perry's dynamic loader. iOS, tvOS, watchOS, visionOS, Android, HarmonyOS, " @@ -85605,23 +88723,76 @@ msgstr "" "HarmonyOS und WebAssembly weisen `perry.nativeAddons` während der " "Zielvalidierung zurück." -#: src/internals/node-api-host.md:466 +#: src/internals/node-api-host.md:481 msgid "Sidecar distribution" msgstr "Seitenwagen-Verteilung" -#: src/internals/node-api-host.md:468 +#: src/internals/node-api-host.md:483 msgid "Addon builds emit a relocatable directory beside the executable:" msgstr "" "Addon Builds emittieren ein relocatables Verzeichnis neben der ausführbaren " "Datei:" -#: src/internals/node-api-host.md:479 +#: src/internals/node-api-host.md:494 msgid "" "The compiler copies the selected platform package payload, preserving its " -"relative layout so `$ORIGIN`/`@loader_path` dependencies keep working. The " -"manifest records package name and version, target tuple, relative entry " -"path, SHA-256 for every copied file, and the Node-API policy version. " -"Runtime loading never consults the build machine's `node_modules` tree." +"relative layout so `$ORIGIN`/`@loader_path` dependencies keep working. " +"Runtime data (including unknown extensions and JSON), shared libraries with " +"versioned names, package metadata, and redistribution licenses remain " +"included. Recognized source files, compiled JS/TS wrappers, documentation, " +"build scripts and workflows are omitted. For `prebuilds//...` " +"entries only the selected platform subtree is copied; a flat `prebuilds/" +".node` entry omits other `.node` prebuilds. This reduces shipped " +"bytes and build-cache inputs together." +msgstr "" + +#: src/internals/node-api-host.md:503 +msgid "" +"Unusual runtime inputs with development-like names can be retained by the " +"project manifest, using exact package-relative files or directories (no " +"globs):" +msgstr "" + +#: src/internals/node-api-host.md:507 src/internals/node-api-host.md:508 +#, fuzzy +msgid "\"demo\"" +msgstr "\"Demometall\"" + +#: src/internals/node-api-host.md:508 +#, fuzzy +msgid "\"nativeAddonFiles\"" +msgstr "\"nativeAddons\"" + +#: src/internals/node-api-host.md:508 +#, fuzzy +msgid "\"data/table.js\"" +msgstr "Datentabelle" + +#: src/internals/node-api-host.md:508 +#, fuzzy +msgid "\"scripts/runtime\"" +msgstr "`runtime`" + +#: src/internals/node-api-host.md:511 +msgid "" +"Paths must exist, stay inside the owning package, and exclude `.git` and " +"nested `node_modules`. This changes payload selection only, without " +"authorizing addon loading. Unknown data is retained by default; library " +"dependency discovery across packages remains separate work." +msgstr "" + +#: src/internals/node-api-host.md:516 +#, fuzzy +msgid "" +"Copying preserves the platform file-copy behavior, including permissions and " +"macOS extended attributes. SHA-256 authentication streams with a 256 KiB " +"buffer. Runtime verification also streams with bounded memory and still " +"checks every shipped file before the first `dlopen` in each process. " +"Repeated loads in the same Node-API environment return its existing exports " +"without rehashing. The manifest records package name and version, target " +"tuple, relative entry path, SHA-256 for every copied file, and the Node-API " +"policy version. Runtime loading never consults the build machine's " +"`node_modules` tree." msgstr "" "Der Compiler kopiert das ausgewählte Plattformpaket payload und behält sein " "relatives Layout, so dass `$ORIGIN`/`@loader_path` Abhängigkeiten weiter " @@ -85630,7 +88801,7 @@ msgstr "" "Policy-Version auf. Die Laufzeitbeladung konsultiert niemals den " "`node_modules`-Baum der Baumaschine." -#: src/internals/node-api-host.md:485 +#: src/internals/node-api-host.md:525 #, fuzzy msgid "" "This sidecar model has no first-run write, so read-only install directories " @@ -85647,7 +88818,7 @@ msgstr "" "Schwinglings. Fehlende oder hash-mismatched Dateien scheitern vor `dlopen` " "mit einem Verpackungsfehler." -#: src/internals/node-api-host.md:493 +#: src/internals/node-api-host.md:533 msgid "" "The platform dynamic-loader APIs reopen that canonical pathname; they do not " "provide one portable way to load from the file handle used for verification. " @@ -85661,7 +88832,7 @@ msgid "" "writer." msgstr "" -#: src/internals/node-api-host.md:503 +#: src/internals/node-api-host.md:543 msgid "" "For a macOS app bundle the directory is placed under `Contents/Frameworks`. " "Every Mach-O sidecar and nested dylib is signed before the outer executable " @@ -85678,7 +88849,7 @@ msgstr "" "einem Archiv. Perry entfernt Quarantäne-Attribute nicht von nicht " "vertrauenswürdigen heruntergeladenen Binärdateien zur Laufzeit." -#: src/internals/node-api-host.md:510 +#: src/internals/node-api-host.md:550 msgid "" "Cross-compilation selects the target's platform package, never the host's. " "Perry does not perform an unpinned registry download during compilation. The " @@ -85697,11 +88868,11 @@ msgstr "" "verhindert gleichzeitig, dass eine Host-`.node`-Datei ein Zielartefakt " "eingibt." -#: src/internals/node-api-host.md:518 +#: src/internals/node-api-host.md:558 msgid "Cache identity" msgstr "Identität des Caches" -#: src/internals/node-api-host.md:520 +#: src/internals/node-api-host.md:560 msgid "" "The compile-time addon manifest is sorted deterministically and contributes " "the following to the build and link cache identities:" @@ -85709,31 +88880,31 @@ msgstr "" "Das Compil-Time-Addon-Manifest ist deterministisch sortiert und trägt zum " "Aufbau und zur Verknüpfung von Cache-Identitäten bei:" -#: src/internals/node-api-host.md:523 +#: src/internals/node-api-host.md:563 msgid "policy schema version and advertised Node-API version;" msgstr "Richtlinienschema-Version und Node-API-Version;" -#: src/internals/node-api-host.md:524 +#: src/internals/node-api-host.md:564 msgid "target tuple and normalized allowlist;" msgstr "Zieltupel und normalisierte Allowlist;" -#: src/internals/node-api-host.md:525 +#: src/internals/node-api-host.md:565 msgid "selected package name/version and relative entry path;" msgstr "ausgewähltes Paket name/version und relativer Eintragspfad;" -#: src/internals/node-api-host.md:526 +#: src/internals/node-api-host.md:566 msgid "SHA-256 and size of every sidecar payload file;" msgstr "SHA-256 und Größe jeder Seitenwagen Nutzlastdatei;" -#: src/internals/node-api-host.md:527 +#: src/internals/node-api-host.md:567 msgid "ordered exported-symbol inventory;" msgstr "bestelltes Ausfuhr-Symbol-Inventar;" -#: src/internals/node-api-host.md:528 +#: src/internals/node-api-host.md:568 msgid "shipping model (`sidecar-v1`)." msgstr "Versandmodell (`sidecar-v1`)." -#: src/internals/node-api-host.md:530 +#: src/internals/node-api-host.md:570 msgid "" "The entry module's object-cache key also includes the canonical logical " "addon ids it can load, because those ids appear in generated loader calls. " @@ -85748,11 +88919,11 @@ msgstr "" "build cache vermissen, auch wenn alle TypeScript- und Objektdateien " "unverändert sind." -#: src/internals/node-api-host.md:536 +#: src/internals/node-api-host.md:576 msgid "Node-API surface inventory" msgstr "Node-API surface inventory" -#: src/internals/node-api-host.md:538 +#: src/internals/node-api-host.md:578 #, fuzzy msgid "" "The inventory is pinned to Node v26.5.1's [`js_native_api.h`](https://github." @@ -85772,74 +88943,74 @@ msgstr "" "binäre Auflösung erforderlich, aber es deterministisch berichtet die " "angegebene nicht unterstützte Einrichtung." -#: src/internals/node-api-host.md:546 +#: src/internals/node-api-host.md:586 msgid "`js_native_api.h`: core through version 4" msgstr "`js_native_api.h`: Kern durch Version 4" -#: src/internals/node-api-host.md:548 src/internals/node-api-host.md:584 -#: src/internals/node-api-host.md:598 src/internals/node-api-host.md:609 +#: src/internals/node-api-host.md:588 src/internals/node-api-host.md:624 +#: src/internals/node-api-host.md:638 src/internals/node-api-host.md:649 msgid "Entry points" msgstr "Eingangspunkte" -#: src/internals/node-api-host.md:550 src/internals/node-api-host.md:551 -#: src/internals/node-api-host.md:552 src/internals/node-api-host.md:553 -#: src/internals/node-api-host.md:554 src/internals/node-api-host.md:555 -#: src/internals/node-api-host.md:556 src/internals/node-api-host.md:557 -#: src/internals/node-api-host.md:558 src/internals/node-api-host.md:559 -#: src/internals/node-api-host.md:560 src/internals/node-api-host.md:561 -#: src/internals/node-api-host.md:562 src/internals/node-api-host.md:563 -#: src/internals/node-api-host.md:564 src/internals/node-api-host.md:565 -#: src/internals/node-api-host.md:566 src/internals/node-api-host.md:567 -#: src/internals/node-api-host.md:568 src/internals/node-api-host.md:569 -#: src/internals/node-api-host.md:570 src/internals/node-api-host.md:571 -#: src/internals/node-api-host.md:572 src/internals/node-api-host.md:573 -#: src/internals/node-api-host.md:574 src/internals/node-api-host.md:575 -#: src/internals/node-api-host.md:576 src/internals/node-api-host.md:577 -#: src/internals/node-api-host.md:578 src/internals/node-api-host.md:580 -#: src/internals/node-api-host.md:586 src/internals/node-api-host.md:587 -#: src/internals/node-api-host.md:588 src/internals/node-api-host.md:589 #: src/internals/node-api-host.md:590 src/internals/node-api-host.md:591 #: src/internals/node-api-host.md:592 src/internals/node-api-host.md:593 -#: src/internals/node-api-host.md:594 src/internals/node-api-host.md:600 -#: src/internals/node-api-host.md:601 src/internals/node-api-host.md:602 -#: src/internals/node-api-host.md:611 src/internals/node-api-host.md:612 -#: src/internals/node-api-host.md:613 src/internals/node-api-host.md:614 -#: src/internals/node-api-host.md:615 src/internals/node-api-host.md:617 -#: src/internals/node-api-host.md:618 src/internals/node-api-host.md:619 -#: src/internals/node-api-host.md:620 src/internals/node-api-host.md:621 -#: src/internals/node-api-host.md:622 src/internals/node-api-host.md:623 +#: src/internals/node-api-host.md:594 src/internals/node-api-host.md:595 +#: src/internals/node-api-host.md:596 src/internals/node-api-host.md:597 +#: src/internals/node-api-host.md:598 src/internals/node-api-host.md:599 +#: src/internals/node-api-host.md:600 src/internals/node-api-host.md:601 +#: src/internals/node-api-host.md:602 src/internals/node-api-host.md:603 +#: src/internals/node-api-host.md:604 src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:606 src/internals/node-api-host.md:607 +#: src/internals/node-api-host.md:608 src/internals/node-api-host.md:609 +#: src/internals/node-api-host.md:610 src/internals/node-api-host.md:611 +#: src/internals/node-api-host.md:612 src/internals/node-api-host.md:613 +#: src/internals/node-api-host.md:614 src/internals/node-api-host.md:615 +#: src/internals/node-api-host.md:616 src/internals/node-api-host.md:617 +#: src/internals/node-api-host.md:618 src/internals/node-api-host.md:620 +#: src/internals/node-api-host.md:626 src/internals/node-api-host.md:627 +#: src/internals/node-api-host.md:628 src/internals/node-api-host.md:629 +#: src/internals/node-api-host.md:630 src/internals/node-api-host.md:631 +#: src/internals/node-api-host.md:632 src/internals/node-api-host.md:633 +#: src/internals/node-api-host.md:634 src/internals/node-api-host.md:640 +#: src/internals/node-api-host.md:641 src/internals/node-api-host.md:642 +#: src/internals/node-api-host.md:651 src/internals/node-api-host.md:652 +#: src/internals/node-api-host.md:653 src/internals/node-api-host.md:654 +#: src/internals/node-api-host.md:655 src/internals/node-api-host.md:657 +#: src/internals/node-api-host.md:658 src/internals/node-api-host.md:659 +#: src/internals/node-api-host.md:660 src/internals/node-api-host.md:661 +#: src/internals/node-api-host.md:662 src/internals/node-api-host.md:663 msgid "v1" msgstr "v1" -#: src/internals/node-api-host.md:550 +#: src/internals/node-api-host.md:590 msgid "`napi_get_last_error_info`" msgstr "`napi_get_last_error_info`" -#: src/internals/node-api-host.md:550 +#: src/internals/node-api-host.md:590 msgid "Stable per-environment storage" msgstr "Stabile Lagerung pro Umwelt" -#: src/internals/node-api-host.md:551 +#: src/internals/node-api-host.md:591 msgid "" "`napi_get_undefined`, `napi_get_null`, `napi_get_global`, `napi_get_boolean`" msgstr "" "`napi_get_undefined`, `napi_get_null`, `napi_get_global`, `napi_get_boolean`" -#: src/internals/node-api-host.md:551 +#: src/internals/node-api-host.md:591 msgid "Singleton values receive ordinary scoped handles" msgstr "Singleton-Werte erhalten gewöhnliche Scope-Handles" -#: src/internals/node-api-host.md:552 +#: src/internals/node-api-host.md:592 msgid "" "`napi_create_object`, `napi_create_array`, `napi_create_array_with_length`" msgstr "" "`napi_create_object`, `napi_create_array`, `napi_create_array_with_length`" -#: src/internals/node-api-host.md:552 +#: src/internals/node-api-host.md:592 msgid "Perry object/array allocators" msgstr "Perry object/array Allokatoren" -#: src/internals/node-api-host.md:553 +#: src/internals/node-api-host.md:593 msgid "" "`napi_create_double`, `napi_create_int32`, `napi_create_uint32`, " "`napi_create_int64`" @@ -85847,11 +89018,11 @@ msgstr "" "`napi_create_double`, `napi_create_int32`, `napi_create_uint32`, " "`napi_create_int64`" -#: src/internals/node-api-host.md:553 +#: src/internals/node-api-host.md:593 msgid "Plain doubles, never the INT32 encoding that class refs share" msgstr "" -#: src/internals/node-api-host.md:554 +#: src/internals/node-api-host.md:594 msgid "" "`napi_create_string_latin1`, `napi_create_string_utf8`, " "`napi_create_string_utf16`" @@ -85859,39 +89030,39 @@ msgstr "" "`napi_create_string_latin1`, `napi_create_string_utf8`, " "`napi_create_string_utf16`" -#: src/internals/node-api-host.md:554 +#: src/internals/node-api-host.md:594 msgid "Length-bounded; `NAPI_AUTO_LENGTH` supported" msgstr "Längengebunden; `NAPI_AUTO_LENGTH` unterstützt" -#: src/internals/node-api-host.md:555 +#: src/internals/node-api-host.md:595 msgid "`napi_create_symbol`, `napi_create_function`" msgstr "`napi_create_symbol`, `napi_create_function`" -#: src/internals/node-api-host.md:555 +#: src/internals/node-api-host.md:595 msgid "Native callbacks use host records" msgstr "Native Callbacks verwenden Host-Datensätze" -#: src/internals/node-api-host.md:556 +#: src/internals/node-api-host.md:596 msgid "" "`napi_create_error`, `napi_create_type_error`, `napi_create_range_error`" msgstr "" "`napi_create_error`, `napi_create_type_error`, `napi_create_range_error`" -#: src/internals/node-api-host.md:556 +#: src/internals/node-api-host.md:596 msgid "`code` is installed when supplied" msgstr "`code` wird bei Lieferung installiert" -#: src/internals/node-api-host.md:557 +#: src/internals/node-api-host.md:597 msgid "`napi_typeof`" msgstr "`napi_typeof`" -#: src/internals/node-api-host.md:557 +#: src/internals/node-api-host.md:597 msgid "" "Classifies exactly like the `typeof` operator (class refs, class objects and " "callable proxies are functions), plus `null` and `external`" msgstr "" -#: src/internals/node-api-host.md:558 +#: src/internals/node-api-host.md:598 msgid "" "`napi_get_value_double`, `napi_get_value_int32`, `napi_get_value_uint32`, " "`napi_get_value_int64`, `napi_get_value_bool`" @@ -85899,11 +89070,11 @@ msgstr "" "`napi_get_value_double`, `napi_get_value_int32`, `napi_get_value_uint32`, " "`napi_get_value_int64`, `napi_get_value_bool`" -#: src/internals/node-api-host.md:558 +#: src/internals/node-api-host.md:598 msgid "Checked type/status behavior" msgstr "Kontrolliertes type/status-Verhalten" -#: src/internals/node-api-host.md:559 +#: src/internals/node-api-host.md:599 msgid "" "`napi_get_value_string_latin1`, `napi_get_value_string_utf8`, " "`napi_get_value_string_utf16`" @@ -85911,11 +89082,11 @@ msgstr "" "`napi_get_value_string_latin1`, `napi_get_value_string_utf8`, " "`napi_get_value_string_utf16`" -#: src/internals/node-api-host.md:559 +#: src/internals/node-api-host.md:599 msgid "Query-length and NUL-termination semantics included" msgstr "Abfrage-Länge und NUL-Terminationssemantik enthalten" -#: src/internals/node-api-host.md:560 +#: src/internals/node-api-host.md:600 msgid "" "`napi_coerce_to_bool`, `napi_coerce_to_number`, `napi_coerce_to_object`, " "`napi_coerce_to_string`" @@ -85923,19 +89094,19 @@ msgstr "" "`napi_coerce_to_bool`, `napi_coerce_to_number`, `napi_coerce_to_object`, " "`napi_coerce_to_string`" -#: src/internals/node-api-host.md:560 +#: src/internals/node-api-host.md:600 msgid "User code is exception-trapped" msgstr "Benutzercode ist ausnahmslos" -#: src/internals/node-api-host.md:561 +#: src/internals/node-api-host.md:601 msgid "`napi_get_prototype`, `napi_get_property_names`" msgstr "`napi_get_prototype`, `napi_get_property_names`" -#: src/internals/node-api-host.md:561 +#: src/internals/node-api-host.md:601 msgid "General object semantics" msgstr "Allgemeine Objektsemantik" -#: src/internals/node-api-host.md:562 +#: src/internals/node-api-host.md:602 msgid "" "`napi_set_property`, `napi_has_property`, `napi_get_property`, " "`napi_delete_property`, `napi_has_own_property`" @@ -85943,11 +89114,11 @@ msgstr "" "`napi_set_property`, `napi_has_property`, `napi_get_property`, " "`napi_delete_property`, `napi_has_own_property`" -#: src/internals/node-api-host.md:562 +#: src/internals/node-api-host.md:602 msgid "String, symbol, and numeric keys" msgstr "Zeichenkette, Symbol und numerische Tasten" -#: src/internals/node-api-host.md:563 +#: src/internals/node-api-host.md:603 msgid "" "`napi_set_named_property`, `napi_has_named_property`, " "`napi_get_named_property`" @@ -85955,11 +89126,11 @@ msgstr "" "`napi_set_named_property`, `napi_has_named_property`, " "`napi_get_named_property`" -#: src/internals/node-api-host.md:563 +#: src/internals/node-api-host.md:603 msgid "UTF-8 names" msgstr "UTF-8-Bezeichnungen" -#: src/internals/node-api-host.md:564 +#: src/internals/node-api-host.md:604 msgid "" "`napi_set_element`, `napi_has_element`, `napi_get_element`, " "`napi_delete_element`" @@ -85967,43 +89138,43 @@ msgstr "" "`napi_set_element`, `napi_has_element`, `napi_get_element`, " "`napi_delete_element`" -#: src/internals/node-api-host.md:564 +#: src/internals/node-api-host.md:604 msgid "Arrays and exotic indexed objects" msgstr "Arrays und exotische indexierte Objekte" -#: src/internals/node-api-host.md:565 +#: src/internals/node-api-host.md:605 msgid "`napi_define_properties`" msgstr "`napi_define_properties`" -#: src/internals/node-api-host.md:565 +#: src/internals/node-api-host.md:605 msgid "Data, method, and accessor descriptors" msgstr "Daten, Methode und Accessor Deskriptoren" -#: src/internals/node-api-host.md:566 +#: src/internals/node-api-host.md:606 msgid "`napi_is_array`, `napi_get_array_length`, `napi_strict_equals`" msgstr "`napi_is_array`, `napi_get_array_length`, `napi_strict_equals`" -#: src/internals/node-api-host.md:566 +#: src/internals/node-api-host.md:606 msgid "No pointer-identity shortcut" msgstr "Keine Verknüpfung von Zeiger-Identität" -#: src/internals/node-api-host.md:567 +#: src/internals/node-api-host.md:607 msgid "`napi_call_function`, `napi_new_instance`, `napi_instanceof`" msgstr "`napi_call_function`, `napi_new_instance`, `napi_instanceof`" -#: src/internals/node-api-host.md:567 +#: src/internals/node-api-host.md:607 msgid "General Perry dispatch/construction" msgstr "Allgemeines Perry dispatch/construction" -#: src/internals/node-api-host.md:568 +#: src/internals/node-api-host.md:608 msgid "`napi_get_cb_info`, `napi_get_new_target`, `napi_define_class`" msgstr "`napi_get_cb_info`, `napi_get_new_target`, `napi_define_class`" -#: src/internals/node-api-host.md:568 +#: src/internals/node-api-host.md:608 msgid "Callback-info lifetime is the native call" msgstr "Callback-info-Lebensdauer ist der native Anruf" -#: src/internals/node-api-host.md:569 +#: src/internals/node-api-host.md:609 msgid "" "`napi_wrap`, `napi_unwrap`, `napi_remove_wrap`, `napi_create_external`, " "`napi_get_value_external`" @@ -86011,11 +89182,11 @@ msgstr "" "`napi_wrap`, `napi_unwrap`, `napi_remove_wrap`, `napi_create_external`, " "`napi_get_value_external`" -#: src/internals/node-api-host.md:569 +#: src/internals/node-api-host.md:609 msgid "Native object metadata table" msgstr "Native Objekt Metadaten Tabelle" -#: src/internals/node-api-host.md:570 +#: src/internals/node-api-host.md:610 msgid "" "`napi_create_reference`, `napi_delete_reference`, `napi_reference_ref`, " "`napi_reference_unref`, `napi_get_reference_value`" @@ -86023,11 +89194,11 @@ msgstr "" "`napi_create_reference`, `napi_delete_reference`, `napi_reference_ref`, " "`napi_reference_unref`, `napi_get_reference_value`" -#: src/internals/node-api-host.md:570 +#: src/internals/node-api-host.md:610 msgid "Strong and weak reference design above" msgstr "Starkes und schwaches Referenzdesign oben" -#: src/internals/node-api-host.md:571 +#: src/internals/node-api-host.md:611 msgid "" "`napi_open_handle_scope`, `napi_close_handle_scope`, " "`napi_open_escapable_handle_scope`, `napi_close_escapable_handle_scope`, " @@ -86037,11 +89208,11 @@ msgstr "" "`napi_open_escapable_handle_scope`, `napi_close_escapable_handle_scope`, " "`napi_escape_handle`" -#: src/internals/node-api-host.md:571 +#: src/internals/node-api-host.md:611 msgid "Strict nesting and generation validation" msgstr "Strenge Nist- und Erzeugungsvalidierung" -#: src/internals/node-api-host.md:572 +#: src/internals/node-api-host.md:612 msgid "" "`napi_throw`, `napi_throw_error`, `napi_throw_type_error`, " "`napi_throw_range_error`, `napi_is_error`" @@ -86049,19 +89220,19 @@ msgstr "" "`napi_throw`, `napi_throw_error`, `napi_throw_type_error`, " "`napi_throw_range_error`, `napi_is_error`" -#: src/internals/node-api-host.md:572 +#: src/internals/node-api-host.md:612 msgid "Pending-slot model" msgstr "Ausstehendes Losmodell" -#: src/internals/node-api-host.md:573 +#: src/internals/node-api-host.md:613 msgid "`napi_is_exception_pending`, `napi_get_and_clear_last_exception`" msgstr "`napi_is_exception_pending`, `napi_get_and_clear_last_exception`" -#: src/internals/node-api-host.md:573 +#: src/internals/node-api-host.md:613 msgid "Available while pending" msgstr "Noch nicht verfügbar" -#: src/internals/node-api-host.md:574 +#: src/internals/node-api-host.md:614 msgid "" "`napi_is_arraybuffer`, `napi_create_arraybuffer`, " "`napi_create_external_arraybuffer`, `napi_get_arraybuffer_info`" @@ -86069,38 +89240,38 @@ msgstr "" "`napi_is_arraybuffer`, `napi_create_arraybuffer`, " "`napi_create_external_arraybuffer`, `napi_get_arraybuffer_info`" -#: src/internals/node-api-host.md:574 +#: src/internals/node-api-host.md:614 msgid "Stable backing pointers" msgstr "Stabile Rückwärtszeiger" -#: src/internals/node-api-host.md:575 +#: src/internals/node-api-host.md:615 msgid "" "`napi_is_typedarray`, `napi_create_typedarray`, `napi_get_typedarray_info`" msgstr "" "`napi_is_typedarray`, `napi_create_typedarray`, `napi_get_typedarray_info`" -#: src/internals/node-api-host.md:575 +#: src/internals/node-api-host.md:615 msgid "All eleven declared typed-array kinds" msgstr "Alle elf deklarierten Typen von Mustern" -#: src/internals/node-api-host.md:576 +#: src/internals/node-api-host.md:616 msgid "`napi_create_dataview`, `napi_is_dataview`, `napi_get_dataview_info`" msgstr "`napi_create_dataview`, `napi_is_dataview`, `napi_get_dataview_info`" -#: src/internals/node-api-host.md:576 +#: src/internals/node-api-host.md:616 msgid "Backing identity and offsets preserved" msgstr "Backing Identität und Offsets erhalten" -#: src/internals/node-api-host.md:577 +#: src/internals/node-api-host.md:617 msgid "`napi_get_version`" msgstr "`napi_get_version`" -#: src/internals/node-api-host.md:577 +#: src/internals/node-api-host.md:617 #, fuzzy msgid "Returns 10" msgstr "Gibt 8 zurück" -#: src/internals/node-api-host.md:578 +#: src/internals/node-api-host.md:618 msgid "" "`napi_create_promise`, `napi_resolve_deferred`, `napi_reject_deferred`, " "`napi_is_promise`" @@ -86108,19 +89279,19 @@ msgstr "" "`napi_create_promise`, `napi_resolve_deferred`, `napi_reject_deferred`, " "`napi_is_promise`" -#: src/internals/node-api-host.md:578 +#: src/internals/node-api-host.md:618 msgid "Deferred records are environment-owned roots" msgstr "Deferred Records sind umwelteigene Wurzeln" -#: src/internals/node-api-host.md:579 src/internals/node-api-host.md:616 +#: src/internals/node-api-host.md:619 src/internals/node-api-host.md:656 msgid "never" msgstr "never" -#: src/internals/node-api-host.md:579 +#: src/internals/node-api-host.md:619 msgid "`napi_run_script`" msgstr "`napi_run_script`" -#: src/internals/node-api-host.md:579 +#: src/internals/node-api-host.md:619 msgid "" "Returns `napi_generic_failure`; arbitrary runtime source execution would " "violate the no-runtime-engine model" @@ -86128,40 +89299,40 @@ msgstr "" "Gibt `napi_generic_failure` zurück; willkürliche Ausführung der " "Laufzeitquelle würde das Modell der No-Runtime-Engine verletzen" -#: src/internals/node-api-host.md:580 +#: src/internals/node-api-host.md:620 msgid "`napi_adjust_external_memory`" msgstr "`napi_adjust_external_memory`" -#: src/internals/node-api-host.md:580 +#: src/internals/node-api-host.md:620 msgid "Collector pressure accounting" msgstr "Berechnung des Drucks des Kollektors" -#: src/internals/node-api-host.md:582 +#: src/internals/node-api-host.md:622 msgid "`js_native_api.h`: versions 5 through 8" msgstr "`js_native_api.h`: Versionen 5 bis 8" -#: src/internals/node-api-host.md:584 src/internals/node-api-host.md:598 -#: src/internals/node-api-host.md:609 +#: src/internals/node-api-host.md:624 src/internals/node-api-host.md:638 +#: src/internals/node-api-host.md:649 msgid "Version" msgstr "Version" -#: src/internals/node-api-host.md:586 +#: src/internals/node-api-host.md:626 msgid "`napi_create_date`, `napi_is_date`, `napi_get_date_value`" msgstr "`napi_create_date`, `napi_is_date`, `napi_get_date_value`" -#: src/internals/node-api-host.md:586 +#: src/internals/node-api-host.md:626 msgid "Perry `Date` identity/value" msgstr "Perry `Date` identity/value" -#: src/internals/node-api-host.md:587 +#: src/internals/node-api-host.md:627 msgid "`napi_add_finalizer`" msgstr "`napi_add_finalizer`" -#: src/internals/node-api-host.md:587 +#: src/internals/node-api-host.md:627 msgid "Queued post-GC finalization" msgstr "Nach der GC-Abschlussprüfung angelaufen" -#: src/internals/node-api-host.md:588 +#: src/internals/node-api-host.md:628 msgid "" "`napi_create_bigint_int64`, `napi_create_bigint_uint64`, " "`napi_create_bigint_words`" @@ -86169,11 +89340,11 @@ msgstr "" "`napi_create_bigint_int64`, `napi_create_bigint_uint64`, " "`napi_create_bigint_words`" -#: src/internals/node-api-host.md:588 +#: src/internals/node-api-host.md:628 msgid "Arbitrary precision" msgstr "Willkürliche Präzision" -#: src/internals/node-api-host.md:589 +#: src/internals/node-api-host.md:629 msgid "" "`napi_get_value_bigint_int64`, `napi_get_value_bigint_uint64`, " "`napi_get_value_bigint_words`" @@ -86181,23 +89352,23 @@ msgstr "" "`napi_get_value_bigint_int64`, `napi_get_value_bigint_uint64`, " "`napi_get_value_bigint_words`" -#: src/internals/node-api-host.md:589 +#: src/internals/node-api-host.md:629 msgid "Exact `lossless` and word-count behavior" msgstr "Exaktes `lossless`- und Wortzählverhalten" -#: src/internals/node-api-host.md:590 +#: src/internals/node-api-host.md:630 msgid "`napi_get_all_property_names`" msgstr "`napi_get_all_property_names`" -#: src/internals/node-api-host.md:590 +#: src/internals/node-api-host.md:630 msgid "Collection mode, filter, and key conversion honored" msgstr "Sammlungsmodus, Filter und Schlüsselkonvertierung ausgezeichnet" -#: src/internals/node-api-host.md:591 +#: src/internals/node-api-host.md:631 msgid "`napi_set_instance_data`, `napi_get_instance_data`" msgstr "`napi_set_instance_data`, `napi_get_instance_data`" -#: src/internals/node-api-host.md:591 +#: src/internals/node-api-host.md:631 msgid "" "One record per environment; replacement overwrites without calling the " "previous finalizer" @@ -86205,35 +89376,35 @@ msgstr "" "Ein Datensatz pro Umgebung; Ersatz überschreibt, ohne den vorherigen " "Finalizer zu rufen" -#: src/internals/node-api-host.md:592 +#: src/internals/node-api-host.md:632 msgid "`napi_detach_arraybuffer`, `napi_is_detached_arraybuffer`" msgstr "`napi_detach_arraybuffer`, `napi_is_detached_arraybuffer`" -#: src/internals/node-api-host.md:592 +#: src/internals/node-api-host.md:632 msgid "Existing detach propagation" msgstr "Bestehende Ablösungspropaganda" -#: src/internals/node-api-host.md:593 +#: src/internals/node-api-host.md:633 msgid "`napi_type_tag_object`, `napi_check_object_type_tag`" msgstr "`napi_type_tag_object`, `napi_check_object_type_tag`" -#: src/internals/node-api-host.md:593 +#: src/internals/node-api-host.md:633 msgid "128-bit tag in object metadata" msgstr "128-Bit-Tag in Objekt-Metadaten" -#: src/internals/node-api-host.md:594 +#: src/internals/node-api-host.md:634 msgid "`napi_object_freeze`, `napi_object_seal`" msgstr "`napi_object_freeze`, `napi_object_seal`" -#: src/internals/node-api-host.md:594 +#: src/internals/node-api-host.md:634 msgid "Perry descriptor machinery" msgstr "Maschinen und Apparate zum Beschreiben von Perry" -#: src/internals/node-api-host.md:596 +#: src/internals/node-api-host.md:636 msgid "`js_native_api.h`: version 9, version 10, and experimental" msgstr "`js_native_api.h`: Version 9, Version 10 und experimentelle" -#: src/internals/node-api-host.md:600 +#: src/internals/node-api-host.md:640 msgid "" "`node_api_symbol_for`, `node_api_create_syntax_error`, " "`node_api_throw_syntax_error`" @@ -86241,17 +89412,17 @@ msgstr "" "`node_api_symbol_for`, `node_api_create_syntax_error`, " "`node_api_throw_syntax_error`" -#: src/internals/node-api-host.md:600 +#: src/internals/node-api-host.md:640 #, fuzzy msgid "Global `Symbol.for` registry; `code` is installed when supplied" msgstr "`code` wird bei Lieferung installiert" -#: src/internals/node-api-host.md:601 src/internals/node-api-host.md:602 -#: src/internals/node-api-host.md:623 +#: src/internals/node-api-host.md:641 src/internals/node-api-host.md:642 +#: src/internals/node-api-host.md:663 msgid "10" msgstr "10" -#: src/internals/node-api-host.md:601 +#: src/internals/node-api-host.md:641 msgid "" "`node_api_create_external_string_latin1`, " "`node_api_create_external_string_utf16`" @@ -86259,13 +89430,13 @@ msgstr "" "`node_api_create_external_string_latin1`, " "`node_api_create_external_string_utf16`" -#: src/internals/node-api-host.md:601 +#: src/internals/node-api-host.md:641 msgid "" "Copied into a Perry string: `copied` is `true` and the finalizer runs before " "the call returns, the same path Node takes when V8 cannot adopt the storage" msgstr "" -#: src/internals/node-api-host.md:602 +#: src/internals/node-api-host.md:642 msgid "" "`node_api_create_property_key_latin1`, `node_api_create_property_key_utf8`, " "`node_api_create_property_key_utf16`" @@ -86273,34 +89444,34 @@ msgstr "" "`node_api_create_property_key_latin1`, `node_api_create_property_key_utf8`, " "`node_api_create_property_key_utf16`" -#: src/internals/node-api-host.md:602 +#: src/internals/node-api-host.md:642 msgid "Ordinary strings; Perry has no separate internalized form" msgstr "" -#: src/internals/node-api-host.md:603 src/internals/node-api-host.md:604 -#: src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:643 src/internals/node-api-host.md:644 +#: src/internals/node-api-host.md:645 msgid "later" msgstr "later" -#: src/internals/node-api-host.md:603 src/internals/node-api-host.md:604 -#: src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:643 src/internals/node-api-host.md:644 +#: src/internals/node-api-host.md:645 msgid "experimental" msgstr "experimental" -#: src/internals/node-api-host.md:603 +#: src/internals/node-api-host.md:643 msgid "`node_api_post_finalizer`" msgstr "`node_api_post_finalizer`" -#: src/internals/node-api-host.md:603 src/internals/node-api-host.md:604 -#: src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:643 src/internals/node-api-host.md:644 +#: src/internals/node-api-host.md:645 msgid "Not part of the advertised stable ABI" msgstr "Nicht Teil der ausgeschriebenen stabilen ABI" -#: src/internals/node-api-host.md:604 +#: src/internals/node-api-host.md:644 msgid "`node_api_create_object_with_properties`, `node_api_set_prototype`" msgstr "`node_api_create_object_with_properties`, `node_api_set_prototype`" -#: src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:645 msgid "" "`node_api_create_sharedarraybuffer`, " "`node_api_create_external_sharedarraybuffer`, `node_api_is_sharedarraybuffer`" @@ -86308,33 +89479,33 @@ msgstr "" "`node_api_create_sharedarraybuffer`, " "`node_api_create_external_sharedarraybuffer`, `node_api_is_sharedarraybuffer`" -#: src/internals/node-api-host.md:607 +#: src/internals/node-api-host.md:647 msgid "`node_api.h`" msgstr "`node_api.h`" -#: src/internals/node-api-host.md:611 src/internals/node-api-host.md:612 -#: src/internals/node-api-host.md:613 src/internals/node-api-host.md:614 -#: src/internals/node-api-host.md:615 +#: src/internals/node-api-host.md:651 src/internals/node-api-host.md:652 +#: src/internals/node-api-host.md:653 src/internals/node-api-host.md:654 +#: src/internals/node-api-host.md:655 msgid "base" msgstr "base" -#: src/internals/node-api-host.md:611 +#: src/internals/node-api-host.md:651 msgid "`napi_module_register`, `napi_fatal_error`" msgstr "`napi_module_register`, `napi_fatal_error`" -#: src/internals/node-api-host.md:611 +#: src/internals/node-api-host.md:651 msgid "Legacy registration and abort path" msgstr "Vermächtnis-Registrierung und Weg abbrechen" -#: src/internals/node-api-host.md:612 +#: src/internals/node-api-host.md:652 msgid "`napi_async_init`, `napi_async_destroy`, `napi_make_callback`" msgstr "`napi_async_init`, `napi_async_destroy`, `napi_make_callback`" -#: src/internals/node-api-host.md:612 +#: src/internals/node-api-host.md:652 msgid "Existing async-hooks integration" msgstr "Bestehende Integration von async-hooks" -#: src/internals/node-api-host.md:613 +#: src/internals/node-api-host.md:653 msgid "" "`napi_create_buffer`, `napi_create_external_buffer`, " "`napi_create_buffer_copy`, `napi_is_buffer`, `napi_get_buffer_info`" @@ -86342,11 +89513,11 @@ msgstr "" "`napi_create_buffer`, `napi_create_external_buffer`, " "`napi_create_buffer_copy`, `napi_is_buffer`, `napi_get_buffer_info`" -#: src/internals/node-api-host.md:613 +#: src/internals/node-api-host.md:653 msgid "Perry `Buffer` identity and stable bytes" msgstr "Perry `Buffer` Identität und stabile Bytes" -#: src/internals/node-api-host.md:614 +#: src/internals/node-api-host.md:654 msgid "" "`napi_create_async_work`, `napi_delete_async_work`, `napi_queue_async_work`, " "`napi_cancel_async_work`" @@ -86354,15 +89525,15 @@ msgstr "" "`napi_create_async_work`, `napi_delete_async_work`, `napi_queue_async_work`, " "`napi_cancel_async_work`" -#: src/internals/node-api-host.md:614 +#: src/internals/node-api-host.md:654 msgid "Explicit state machine above" msgstr "Explizite Zustandsmaschine oben" -#: src/internals/node-api-host.md:615 +#: src/internals/node-api-host.md:655 msgid "`napi_get_node_version`" msgstr "`napi_get_node_version`" -#: src/internals/node-api-host.md:615 +#: src/internals/node-api-host.md:655 msgid "" "Returns Perry's semver components with release string `perry`; it does not " "claim a Node release" @@ -86370,17 +89541,17 @@ msgstr "" "Gibt die Semver-Komponenten von Perry mit dem Release-String `perry` zurück; " "es beansprucht keine Node-Version" -#: src/internals/node-api-host.md:616 +#: src/internals/node-api-host.md:656 msgid "`napi_get_uv_event_loop`" msgstr "`napi_get_uv_event_loop`" -#: src/internals/node-api-host.md:616 +#: src/internals/node-api-host.md:656 msgid "Returns `napi_generic_failure` and a null loop; Perry has no libuv" msgstr "" "Gibt `napi_generic_failure` und eine Nullschleife zurück; Perry hat keine " "Libuv" -#: src/internals/node-api-host.md:617 +#: src/internals/node-api-host.md:657 msgid "" "`napi_fatal_exception`, `napi_add_env_cleanup_hook`, " "`napi_remove_env_cleanup_hook`" @@ -86388,19 +89559,19 @@ msgstr "" "`napi_fatal_exception`, `napi_add_env_cleanup_hook`, " "`napi_remove_env_cleanup_hook`" -#: src/internals/node-api-host.md:617 +#: src/internals/node-api-host.md:657 msgid "Main-thread lifecycle" msgstr "Lebenszyklus mit Hauptthread" -#: src/internals/node-api-host.md:618 +#: src/internals/node-api-host.md:658 msgid "`napi_open_callback_scope`, `napi_close_callback_scope`" msgstr "`napi_open_callback_scope`, `napi_close_callback_scope`" -#: src/internals/node-api-host.md:618 +#: src/internals/node-api-host.md:658 msgid "Async context and strict nesting" msgstr "Async-Kontext und strenges Nesten" -#: src/internals/node-api-host.md:619 +#: src/internals/node-api-host.md:659 msgid "" "`napi_create_threadsafe_function`, `napi_get_threadsafe_function_context`, " "`napi_call_threadsafe_function`" @@ -86408,11 +89579,11 @@ msgstr "" "`napi_create_threadsafe_function`, `napi_get_threadsafe_function_context`, " "`napi_call_threadsafe_function`" -#: src/internals/node-api-host.md:619 +#: src/internals/node-api-host.md:659 msgid "Event-pump-backed TSFN" msgstr "Event-Pumpen-gestütztes TSFN" -#: src/internals/node-api-host.md:620 +#: src/internals/node-api-host.md:660 msgid "" "`napi_acquire_threadsafe_function`, `napi_release_threadsafe_function`, " "`napi_unref_threadsafe_function`, `napi_ref_threadsafe_function`" @@ -86420,37 +89591,37 @@ msgstr "" "`napi_acquire_threadsafe_function`, `napi_release_threadsafe_function`, " "`napi_unref_threadsafe_function`, `napi_ref_threadsafe_function`" -#: src/internals/node-api-host.md:620 +#: src/internals/node-api-host.md:660 msgid "Thread count and event-loop keepalive" msgstr "Thread Count und Event-Loop keepalive" -#: src/internals/node-api-host.md:621 +#: src/internals/node-api-host.md:661 msgid "`napi_add_async_cleanup_hook`, `napi_remove_async_cleanup_hook`" msgstr "`napi_add_async_cleanup_hook`, `napi_remove_async_cleanup_hook`" -#: src/internals/node-api-host.md:621 +#: src/internals/node-api-host.md:661 msgid "Shutdown waits for completion" msgstr "Shutdown wartet auf Fertigstellung" -#: src/internals/node-api-host.md:622 +#: src/internals/node-api-host.md:662 msgid "`node_api_get_module_file_name`" msgstr "`node_api_get_module_file_name`" -#: src/internals/node-api-host.md:622 +#: src/internals/node-api-host.md:662 msgid "`file://` URL of the attributed module's sidecar path" msgstr "" -#: src/internals/node-api-host.md:623 +#: src/internals/node-api-host.md:663 msgid "`node_api_create_buffer_from_arraybuffer`" msgstr "`node_api_create_buffer_from_arraybuffer`" -#: src/internals/node-api-host.md:623 +#: src/internals/node-api-host.md:663 msgid "" "Buffer view sharing the ArrayBuffer's storage; out-of-range windows throw " "`ERR_OUT_OF_RANGE`" msgstr "" -#: src/internals/node-api-host.md:625 +#: src/internals/node-api-host.md:665 msgid "" "The addon-side initializer exports `node_api_module_get_api_version_v1` and " "`napi_register_module_v1`; these are looked up in the addon and are not host " @@ -86460,18 +89631,18 @@ msgstr "" "und `napi_register_module_v1`; diese werden im Addon nachgeschaut und sind " "keine Host-Exporte." -#: src/internals/node-api-host.md:629 +#: src/internals/node-api-host.md:669 msgid "Required gates" msgstr "Erforderliche Tore" -#: src/internals/node-api-host.md:631 +#: src/internals/node-api-host.md:671 msgid "" "Implementation is not complete until the gates below can independently fail:" msgstr "" "Die Implementierung ist erst abgeschlossen, wenn die folgenden Tore " "selbstständig ausfallen können:" -#: src/internals/node-api-host.md:633 +#: src/internals/node-api-host.md:673 msgid "" "**Handle/GC gate:** scopes, strong and weak refs, wrap metadata, callbacks, " "and pending exceptions survive forced copied minors and full collections; " @@ -86484,7 +89655,7 @@ msgstr "" "Validierung der Ausfallgeneration; die Root-Inhaber und Rekey-Table-Audit-" "Skripte sind sauber." -#: src/internals/node-api-host.md:637 +#: src/internals/node-api-host.md:677 msgid "" "**Exception gate:** a throwing getter, native callback, finalizer misuse, " "and TSFN callback all return through C before Perry raises; an instrumented " @@ -86495,7 +89666,7 @@ msgstr "" "ein Instrumentiertes Addon behauptet, dass kein Abschalten in seine Frames " "eintritt." -#: src/internals/node-api-host.md:640 +#: src/internals/node-api-host.md:680 msgid "" "**Loader/export gate:** a real addon records the address of a called " "`napi_*` function and the test proves that address belongs to the Perry " @@ -86505,7 +89676,7 @@ msgstr "" "Funktion auf und der Test beweist, dass die Adresse zum ausführbaren Perry " "gehört. Die Rauchrufzahl muss größer als Null sein." -#: src/internals/node-api-host.md:643 +#: src/internals/node-api-host.md:683 msgid "" "**Real-addon gate:** one node-addon-api addon and one napi-rs addon cover " "properties, classes, async work, TSFN, instance data, wrap/finalizers, and " @@ -86517,7 +89688,7 @@ msgstr "" "und Puffer ab. Nicht unterstützte NAPI-Versionen, NAN/V8 und `uv_*`-Fesseln " "behaupten ihre exakte Diagnose." -#: src/internals/node-api-host.md:647 +#: src/internals/node-api-host.md:687 msgid "" "**Watcher differential gate:** the real `@parcel/watcher` binary and Perry's " "facade observe the same fixture tree and emit identical coalesced streams; " @@ -86528,7 +89699,7 @@ msgstr "" "zusammengeschmolzene Ströme; beide Seiten behaupten, dass ihre native " "Umsetzung tatsächlich lief." -#: src/internals/node-api-host.md:650 +#: src/internals/node-api-host.md:690 msgid "" "**Distribution gate:** move the executable plus sidecar directory to a read-" "only location and load successfully; deletion or mutation of a sidecar fails " @@ -86539,7 +89710,7 @@ msgstr "" "oder die Mutation eines Sidecars schlägt die manifestierte Hash-Kontrolle " "fehl." -#: src/internals/node-api-host.md:653 +#: src/internals/node-api-host.md:693 msgid "" "**Cache gate:** changing only addon bytes or policy misses the build cache; " "rebuilding unchanged inputs hits it." @@ -86547,7 +89718,7 @@ msgstr "" "**Cache-Tor:** Nur Addon Bytes oder Police zu ändern verpasst den Build-" "Cache; der Wiederaufbau unveränderter Eingaben trifft ihn." -#: src/internals/node-api-host.md:655 +#: src/internals/node-api-host.md:695 msgid "" "**Size gate:** byte-identical hello-world outputs with an empty addon graph; " "report the host-only delta for an addon build and enforce the 0.6 MB budget." @@ -86556,7 +89727,7 @@ msgstr "" "Graph; melden Sie das Host-Only-Delta für einen Addon-Build und erzwingen " "Sie das 0.6 MB Budget." -#: src/internals/node-api-host.md:658 +#: src/internals/node-api-host.md:698 msgid "" "The host is not enabled merely because its unit tests pass. The real-addon " "and symbol-provenance gates are the acceptance boundary: a green run in " @@ -86567,6 +89738,87 @@ msgstr "" "Akzeptanzgrenze: ein grüner Lauf, bei dem kein Addon-Initiator oder `napi_*`-" "Körper ausgeführt wird, ist ein Ausfall." +#: src/internals/fallback-diagnostics.md:3 +msgid "" +"`PERRY_FALLBACK_DIAG=1 perry compile app.ts -o app` writes `app.fallback." +"json` beside the executable. The opt-in compiler report names emitted " +"generic property reads, stores, computed accesses, presence checks, method/" +"call dispatch and birth/transition helpers. It records the helper's compiler " +"decision location, receiver facts and TOP origin, refused field-proof " +"predicates, selected guard, property key, generated function and block. An " +"aborted analysis is explicit, with its published work/pop counts; a missing " +"binding proof records that cause when the proof consumer actually rejects it." +msgstr "" + +#: src/internals/fallback-diagnostics.md:12 +msgid "" +"Source byte offsets already retained by HIR resolve to source lines and " +"UTF-8 byte columns. Nodes without their own offsets use the nearest " +"enclosing spanned expression when available, with `approximate: true`; " +"otherwise the function symbol is the location. An approximate location is " +"never an exact assignment or computed-access source span." +msgstr "" + +#: src/internals/fallback-diagnostics.md:18 +msgid "" +"LLVM 22 call-site pseudo-probes provide the native labels. Diagnostic calls " +"carry `nomerge`, and backend tail merging is disabled in diagnostic images " +"because LLVM 22 statepoint lowering does not retain that machine-call flag. " +"These choices preserve distinct decision labels. A late operand fixup may " +"follow the label; the ledger follows only the same straight-line sequence to " +"its first call and verifies the helper. The sidecar contains their encoded " +"sections and the linked symbol addresses, so tools can join call-site labels " +"to the measured executable's PCs, including duplicated/inlined sites. " +"`text_sha256` binds the evidence to the executable's `.text` section. Probe " +"sections, descriptors and synthetic DWARF are removed from the executable " +"before its normal strip step. The generated program contains no diagnostic " +"state, counters, validity bits, probe instructions or lookup table." +msgstr "" + +#: src/internals/fallback-diagnostics.md:30 +msgid "" +"Object, completed-build and link caches are bypassed while diagnostics are " +"on: a warm cache must not omit records or preserve an already-removed probe " +"table. The unset and explicit `PERRY_FALLBACK_DIAG=0` paths produce the " +"ordinary IR and retain their existing cache identity. Runtime archives are " +"unchanged." +msgstr "" + +#: src/internals/fallback-diagnostics.md:35 +msgid "" +"The extraction currently requires `llvm-objcopy` or `objcopy`; the PC " +"decoder is validated on little-endian Linux ELF64 with LLVM 22. If the " +"target cannot emit probe labels or the labels cannot be extracted, the opt-" +"in compile fails instead of publishing an incomplete mapping as successful." +msgstr "" + +#: src/internals/fallback-diagnostics.md:40 +msgid "" +"The diagnostic image must pass the instruction-count perturbation gate " +"before its profile is used. The off image carries none of these attributes." +msgstr "" + +#: src/internals/fallback-diagnostics.md:43 +msgid "" +"Run the targeted acceptance check after a normal `cargo build-perry` build:" +msgstr "" + +#: src/internals/fallback-diagnostics.md:46 +#, fuzzy +msgid "target/release" +msgstr "Ein Release taggen" + +#: src/internals/fallback-diagnostics.md:49 +msgid "" +"It checks Node parity, sidecar generation, warm-cache regeneration, removal " +"of probe tables, source-location accuracy labels, and whole-binary identity " +"with diagnostics off. Before using a diagnostic binary for profiling, " +"compare its retired user instructions against the default binary; pseudo-" +"probes must not materially perturb the measured lowering. The scoreboard " +"ledger decodes labels and keeps missing/ambiguous PC joins explicitly as `no " +"record`." +msgstr "" + #: src/contributing/architecture.md:3 msgid "" "This is a brief overview for contributors. The rules for creating, " @@ -86812,13 +90064,45 @@ msgstr "Die Codegen-Crate ist in fokussierte Module organisiert:" msgid "The HIR lowering was split into 8 modules:" msgstr "Das HIR-Lowering wurde in 8 Module aufgeteilt:" +#: src/contributing/architecture.md:100 +#, fuzzy +msgid "Adding a native UI widget" +msgstr "Eine native Bindung erstellen" + #: src/contributing/architecture.md:102 +msgid "A new widget touches four places:" +msgstr "" + +#: src/contributing/architecture.md:104 +msgid "" +"Runtime: create the widget in `crates/perry-ui-macos/src/widgets/` and call " +"`register_widget(view)`." +msgstr "" + +#: src/contributing/architecture.md:105 +msgid "" +"FFI: export `perry_ui__create` from `crates/perry-ui-macos/src/lib." +"rs`." +msgstr "" + +#: src/contributing/architecture.md:106 +msgid "" +"Codegen: declare the extern and add the `NativeMethodCall` dispatch in " +"`crates/perry-codegen/src/lower_call/native/native_ui_widgets_branch.rs`." +msgstr "" + +#: src/contributing/architecture.md:107 +msgid "" +"HIR: `crates/perry-hir/src/lower/`, only if the widget has instance methods." +msgstr "" + +#: src/contributing/architecture.md:111 msgid "[Building from Source](building.md)" msgstr "[Aus dem Quellcode bauen](building.md)" -#: src/contributing/architecture.md:103 -msgid "" -"See `CLAUDE.md` in the repository root for detailed implementation notes" +#: src/contributing/architecture.md:112 +#, fuzzy +msgid "See `AGENTS.md` in the repository root for implementation traps" msgstr "" "Siehe `CLAUDE.md` im Repository-Root für detaillierte Implementierungs-" "Hinweise" @@ -87169,53 +90453,54 @@ msgstr "" #: src/contributing/crate-policy.md:116 msgid "" -"The committed baseline records only structural signals: the 76 reviewed " -"member decisions, the default dependency closure, the `perry` CLI closure, " -"and decision counts. Any structural change must update the policy " -"intentionally; ordinary Rust source edits do not churn the baseline." +"`workspace-architecture.json` schema 2 records the exact default dependency " +"closure and the `perry` CLI closure. Migrating schema 1 means deleting its " +"`baseline.workspace_members` and `baseline.decision_counts` fields while " +"retaining both closure arrays. Workspace membership and crate " +"classifications are already derived by joining Cargo metadata with the " +"explicit crate policy, so aggregate member and decision counts are not " +"stored a second time. Removing an unrelated member requires its actual " +"workspace and classification edits; it does not require editing aggregate " +"counts. A removal that changes either dependency closure still requires " +"reviewing and updating that exact structural baseline." msgstr "" -"Die zugesagte Baseline zeichnet nur strukturelle Signale auf: die 76 " -"überprüften Mitgliedsentscheidungen, die Standard-Abhängigkeitsschließung, " -"die Schließung der `perry` CLI und die Entscheidung zählt. Jede strukturelle " -"Änderung muss die Richtlinie absichtlich aktualisieren; gewöhnliche Rust-" -"Quellbearbeitungen schleudern nicht die Basislinie." -#: src/contributing/crate-policy.md:121 +#: src/contributing/crate-policy.md:127 msgid "Adding or removing a crate" msgstr "Hinzufügen oder Entfernen einer Kiste" -#: src/contributing/crate-policy.md:123 +#: src/contributing/crate-policy.md:129 msgid "" "A crate change must update all of the following in the same pull request:" msgstr "" "Eine Kistenänderung muss alle folgenden Änderungen in der gleichen " "Zuganforderung aktualisieren:" -#: src/contributing/crate-policy.md:125 +#: src/contributing/crate-policy.md:131 msgid "explicit workspace membership;" msgstr "explizite Mitgliedschaft in Arbeitsräumen;" -#: src/contributing/crate-policy.md:126 +#: src/contributing/crate-policy.md:132 msgid "`workspace-architecture.json` classification and decision;" msgstr "Klassifizierung und Entscheidung von `workspace-architecture.json`;" -#: src/contributing/crate-policy.md:127 +#: src/contributing/crate-policy.md:133 msgid "shared workspace dependencies, when applicable;" msgstr "gemeinsame Abhängigkeiten von Arbeitsräumen, soweit zutreffend;" -#: src/contributing/crate-policy.md:128 +#: src/contributing/crate-policy.md:134 msgid "CI/release selection for its category;" msgstr "CI/release-Auswahl für seine Kategorie;" -#: src/contributing/crate-policy.md:129 +#: src/contributing/crate-policy.md:135 msgid "contributor or user documentation;" msgstr "Beitragende oder Benutzerdokumentation;" -#: src/contributing/crate-policy.md:130 +#: src/contributing/crate-policy.md:136 msgid "tests at the crate's external interface." msgstr "Tests an der externen Schnittstelle der Kiste." -#: src/contributing/crate-policy.md:132 +#: src/contributing/crate-policy.md:138 msgid "" "Run the architecture audit before requesting review. CI rejects implicit or " "unclassified workspace members, unexpected default members, missing " @@ -87228,15 +90513,11 @@ msgstr "" #: src/contributing/building.md:5 msgid "" -"Rust toolchain (stable, **≥ 1.94**): [rustup.rs](https://rustup.rs/). The " -"workspace pins no toolchain file, so an older `stable` fails with a " -"`sqlx@0.9.0 requires rustc 1.94.0` MSRV error from deep in the dependency " -"graph. `rustup update stable` resolves it." +"Rust toolchain: install [rustup](https://rustup.rs/); the workspace pins " +"`nightly-2026-10-04` in `rust-toolchain.toml` because its exception " +"transport needs nightly unwind-table flags. Running Cargo from the checkout " +"installs or selects the pinned toolchain automatically." msgstr "" -"Rust Werkzeugkette (stabil, **≥ 1.94**): [rustup.rs](https://rustup.rs/). " -"Der Workspace pinnt keine Toolchain-Datei, so dass ein älterer `stable` mit " -"einem `sqlx@0.9.0 requires rustc 1.94.0` MSRV-Fehler aus der Tiefe des " -"Abhängigkeitsdiagramms fehlschlägt. `rustup update stable` löst es auf." #: src/contributing/building.md:9 msgid "System C compiler (`cc` on macOS/Linux, MSVC on Windows)" @@ -87273,7 +90554,13 @@ msgstr "" "22. Auf Windows ist diese Variable obligatorisch und muss auf das " "extrahierte LLVM 22 Entwicklungsarchiv des Builds zeigen." -#: src/contributing/building.md:22 +#: src/contributing/building.md:21 +msgid "" +"For the cached Make targets, install the pinned Mr Boxington once with `make " +"mbx-deps`." +msgstr "" + +#: src/contributing/building.md:24 msgid "" "An external clang is not part of the normal in-process codegen path. Install " "a matching clang only when working on a path that explicitly invokes it (for " @@ -87285,16 +90572,17 @@ msgstr "" "der ihn explizit aufruft (z.B. Windows Host `--embed`) oder wenn Sie mit `--" "no-default-features` das textual-IR-Backend aufbauen." -#: src/contributing/building.md:32 +#: src/contributing/building.md:34 #, fuzzy -msgid "# Build the default product and its dependency closure\n" +msgid "# Build the fully optimized product and its dependency closure\n" msgstr "# Bauen Sie das Standardprodukt und seinen Abhängigkeitsverschluss" -#: src/contributing/building.md:37 -msgid "The binary is at `target/release/perry`." +#: src/contributing/building.md:39 +#, fuzzy +msgid "The binary is at `target/prod/perry`." msgstr "Die Binärdatei befindet sich unter `target/release/perry`." -#: src/contributing/building.md:39 +#: src/contributing/building.md:41 msgid "" "The workspace deliberately defaults to the `perry` CLI. Bindings, platform " "adapters, test support, and release-only archives are selected explicitly by " @@ -87307,65 +90595,100 @@ msgstr "" "müssen die in [Kistenpolitik](crate-policy.md) beschriebenen zentralen " "Plattformausschlüsse verwenden." -#: src/contributing/building.md:44 -msgid "Build taxonomy (dev / release / dist)" +#: src/contributing/building.md:46 +#, fuzzy +msgid "Build taxonomy (dev / prod, with compatibility profiles)" msgstr "Taxonomie erstellen (dev / release / dist)" -#: src/contributing/building.md:46 -msgid "Perry has three build profiles, each tuned for a different job (#5422):" +#: src/contributing/building.md:48 +msgid "" +"Use `dev` and `prod` for new builds. Cargo's `debug` output directory is the " +"artifact directory for the `dev` profile; it is not a separate Cargo " +"profile. The legacy `perry-dev`, `release`, and `dist` profile names remain " +"for existing CI, tooling, and reproducible investigations." msgstr "" -"Perry verfügt über drei Build-Profile, die jeweils für einen anderen Job " -"(#5422) abgestimmt sind:" -#: src/contributing/building.md:48 +#: src/contributing/building.md:53 msgid "Goal" msgstr "Goal" -#: src/contributing/building.md:48 +#: src/contributing/building.md:53 msgid "Profile" msgstr "Profile" -#: src/contributing/building.md:50 +#: src/contributing/building.md:55 msgid "Fastest correctness feedback" msgstr "Schnellste Richtigkeit feedback" -#: src/contributing/building.md:50 +#: src/contributing/building.md:55 msgid "`cargo check -p perry`" msgstr "`cargo check -p perry`" -#: src/contributing/building.md:51 -msgid "Optimized **local** development" +#: src/contributing/building.md:56 +#, fuzzy +msgid "Fast, debuggable local development" msgstr "Optimiert **Ort** Entwicklung" -#: src/contributing/building.md:51 +#: src/contributing/building.md:56 +#, fuzzy +msgid "`make build-dev` (or `cargo build --profile dev -p perry`)" +msgstr "`cargo build --profile perry-dev -p perry`" + +#: src/contributing/building.md:57 +#, fuzzy +msgid "Optimized local development / CI" +msgstr "Optimiert **Ort** Entwicklung" + +#: src/contributing/building.md:57 msgid "`cargo build --profile perry-dev -p perry`" msgstr "`cargo build --profile perry-dev -p perry`" -#: src/contributing/building.md:51 +#: src/contributing/building.md:57 msgid "`perry-dev`" msgstr "`perry-dev`" -#: src/contributing/building.md:52 +#: src/contributing/building.md:58 +msgid "Fully optimized local production build" +msgstr "" + +#: src/contributing/building.md:58 +msgid "`make build-prod`" +msgstr "" + +#: src/contributing/building.md:58 src/contributing/building.md:60 +#, fuzzy +msgid "`prod`" +msgstr "`product`" + +#: src/contributing/building.md:59 msgid "Release-compatible build" msgstr "Release-kompatibles Build" -#: src/contributing/building.md:52 +#: src/contributing/building.md:59 msgid "`cargo build --release`" msgstr "`cargo build --release`" -#: src/contributing/building.md:53 +#: src/contributing/building.md:60 msgid "Official distribution artifacts" msgstr "Offizielle Verteilungsgegenstände" -#: src/contributing/building.md:53 -msgid "`cargo build --profile dist ...`" +#: src/contributing/building.md:60 +#, fuzzy +msgid "`cargo build --profile prod ...`" msgstr "`cargo build --profile dist ...`" -#: src/contributing/building.md:53 -msgid "`dist`" -msgstr "`dist`" +#: src/contributing/building.md:62 +msgid "" +"**`dev`** keeps debug info and prioritizes compilation speed (`opt-level = " +"0`, `codegen-units = 256`, debug assertions on, and no LTO). Direct Cargo " +"builds use Cargo incremental compilation; `make build-dev` lets mbx manage " +"learned incremental state while preserving shared-cache reuse for matching " +"outputs. It keeps `panic = \"abort\"` so locally built Perry runtime " +"archives preserve the production exception transport contract. `make build-" +"dev` routes through Mr Boxington. Output is at `target/debug/perry`." +msgstr "" -#: src/contributing/building.md:55 +#: src/contributing/building.md:69 msgid "" "**`perry-dev`** inherits `release` but disables the expensive distribution " "settings (`lto = false`, `codegen-units = 16`, `opt-level = 1`, `incremental " @@ -87377,18 +90700,21 @@ msgstr "" "= 1`, `incremental = true`, kein Streifen) so bleibt die edit/build Schleife " "kurz. Die Ausgabe ist bei `target/perry-dev/perry`." -#: src/contributing/building.md:59 +#: src/contributing/building.md:73 +msgid "" +"**`prod`** inherits the optimized distribution settings (ThinLTO, `opt-level " +"= 3`, strip) and uses 16 codegen units to parallelize compilation. ThinLTO " +"still optimizes across those units. Release workflows and `make build-prod` " +"use Mr Boxington and write to `target/prod/`." +msgstr "" + +#: src/contributing/building.md:77 msgid "" -"**`dist`** mirrors `release` exactly (ThinLTO, `codegen-units = 1`, `opt-" -"level = 3`, strip) and is the explicit, named profile the release workflows " -"use for shipped artifacts. Output is at `target/dist/`." +"**`dist`** is retained as a compatibility profile with the same optimized " +"settings. New build commands should use `prod`." msgstr "" -"**`dist`** spiegel `release` genau (ThinLTO, `codegen-units = 1`, `opt-level " -"= 3`, Streifen) und ist das explizite, benannte Profil, das die Freigabe-" -"Workflows für ausgelieferte Artefakte verwenden. Die Ausgabe ist bei `target/" -"dist/`." -#: src/contributing/building.md:63 +#: src/contributing/building.md:80 msgid "" "After a `--timings` build, `scripts/cargo_timing_summary.py` prints the " "slowest units so build-time regressions are visible." @@ -87396,11 +90722,11 @@ msgstr "" "Nach einem `--timings` Build druckt `scripts/cargo_timing_summary.py` die " "langsamsten Einheiten, damit die Regressionen der Bauzeit sichtbar sind." -#: src/contributing/building.md:66 +#: src/contributing/building.md:83 msgid "Compiler cache for ephemeral worktrees" msgstr "Compiler-Cache für ephemere Worktrees" -#: src/contributing/building.md:68 +#: src/contributing/building.md:85 msgid "" "Short-lived worktrees and coding agents can opt into a compiler cache shared " "outside the repository. Install `sccache` in your user environment, then run " @@ -87410,16 +90736,16 @@ msgstr "" "Cache außerhalb des Repositorys freigeben. Installieren Sie `sccache` in " "Ihrer Benutzerumgebung, dann führen Sie Cargo durch den Wrapper:" -#: src/contributing/building.md:74 +#: src/contributing/building.md:91 #, fuzzy msgid "# Slim, optimized developer CLI\n" msgstr "# Schlanker, optimierter Entwickler CLI" -#: src/contributing/building.md:80 +#: src/contributing/building.md:97 msgid "" "The wrapper disables Cargo incremental compilation because `sccache` cannot " -"cache incremental artifacts. It stores compiler objects under `" -"${XDG_CACHE_HOME:-$HOME/.cache}/perry/sccache` by default, not in the " +"cache incremental artifacts. It stores compiler objects under " +"`${XDG_CACHE_HOME:-$HOME/.cache}/perry/sccache` by default, not in the " "worktree; set `SCCACHE_DIR` or `SCCACHE_CACHE_SIZE` to override its `12G` " "cache policy. It does not install or configure `sccache` globally." msgstr "" @@ -87430,7 +90756,7 @@ msgstr "" "um seine `12G`-Cache-Richtlinie zu überschreiben. Es installiert oder " "konfiguriert `sccache` nicht global." -#: src/contributing/building.md:86 +#: src/contributing/building.md:103 msgid "" "In a long-lived worktree, use ordinary `cargo` commands instead so the local " "incremental cache remains available. Cache benefit depends on the compiler, " @@ -87441,16 +90767,16 @@ msgstr "" "Benefit hängt vom Compiler, Flags, Abhängigkeiten und davon ab, wie viel " "Vorarbeiten der Cache wiederverwenden kann." -#: src/contributing/building.md:90 +#: src/contributing/building.md:107 msgid "Build Specific Crates" msgstr "Spezifische Crates bauen" -#: src/contributing/building.md:93 +#: src/contributing/building.md:110 #, fuzzy msgid "# Runtime only (must rebuild stdlib too!)\n" msgstr "# Nur Laufzeit (muss auch stdlib neu aufbauen!)" -#: src/contributing/building.md:95 +#: src/contributing/building.md:112 #, fuzzy msgid "" "# The .a static archives are emitted by separate wrapper crates (#5422), so " @@ -87459,7 +90785,7 @@ msgstr "" "# Die .a statischen Archive werden durch separate Wrapperkisten (#5422) " "emittiert, so dass ein" -#: src/contributing/building.md:97 +#: src/contributing/building.md:114 #, fuzzy msgid "" "# explicitly when you need libperry_runtime.a / libperry_stdlib.a (e.g. to " @@ -87468,12 +90794,23 @@ msgstr "" "# explizit, wenn Sie libperry_runtime.a / libperry_stdlib.a benötigen (e.g. " "zum Verlinken" -#: src/contributing/building.md:101 +#: src/contributing/building.md:118 +msgid "" +"# `perry` refuses to link workspace archives that lack a GC-effects sidecar\n" +msgstr "" + +#: src/contributing/building.md:120 +msgid "" +"\"the runtime GC effects sidecar cannot speak for the archives this program\n" +"# links\"" +msgstr "" + +#: src/contributing/building.md:123 #, fuzzy msgid "# Codegen only\n" msgstr "# Nur Codegen" -#: src/contributing/building.md:106 +#: src/contributing/building.md:128 msgid "" "**Important**: When rebuilding `perry-runtime`, you must also rebuild `perry-" "stdlib` because `libperry_stdlib.a` embeds perry-runtime as a static " @@ -87483,11 +90820,11 @@ msgstr "" "stdlib` neu bauen, weil `libperry_stdlib.a` perry-runtime als statische " "Abhängigkeit einbettet." -#: src/contributing/building.md:108 +#: src/contributing/building.md:130 msgid "Slim developer CLI" msgstr "Schlanker Entwickler CLI" -#: src/contributing/building.md:110 +#: src/contributing/building.md:132 msgid "" "The default build is the full official CLI. For compiler work you can build " "a slimmer CLI that omits the publish / mobile / updater / native / audit " @@ -87498,7 +90835,7 @@ msgstr "" "native / audit Befehle und die nicht-native Codegen Backends (#5422) " "auslässt:" -#: src/contributing/building.md:118 +#: src/contributing/building.md:140 msgid "" "`dev-cli` keeps `compile` / `run` / `check` / `types` / `cache` / `dev`. " "Disabled commands drop out of `--help`, and disabled `--target` backends " @@ -87512,16 +90849,16 @@ msgstr "" "Siehe `crates/perry/Cargo.toml` für die vollständige Funktionsliste (`full-" "cli`, `publish-cli`, `backend-wasm`, ...)." -#: src/contributing/building.md:123 +#: src/contributing/building.md:145 msgid "Run Tests" msgstr "Tests ausführen" -#: src/contributing/building.md:126 +#: src/contributing/building.md:148 #, fuzzy msgid "# Product unit targets\n" msgstr "# Produkt Einzelziele" -#: src/contributing/building.md:128 +#: src/contributing/building.md:150 #, fuzzy msgid "" "# Inspect the nightly CI test scope (all Linux-compatible test crates)\n" @@ -87529,43 +90866,43 @@ msgstr "" "# Prüfen Sie den nächtlichen CI-Testbereich (alle Linux-kompatiblen " "Testkisten)" -#: src/contributing/building.md:131 +#: src/contributing/building.md:153 #, fuzzy msgid "# Specific crate\n" msgstr "# Spezifische Kiste" -#: src/contributing/building.md:137 +#: src/contributing/building.md:159 msgid "Compile and Run TypeScript" msgstr "TypeScript kompilieren und ausführen" -#: src/contributing/building.md:140 +#: src/contributing/building.md:162 #, fuzzy msgid "# Compile a TypeScript file\n" msgstr "# Eine TypeScript-Datei kompilieren" -#: src/contributing/building.md:143 +#: src/contributing/building.md:165 #, fuzzy msgid "# Debug: print HIR\n" msgstr "# Debug: HIR drucken" -#: src/contributing/building.md:148 +#: src/contributing/building.md:170 msgid "Development Workflow" msgstr "Entwicklungs-Workflow" -#: src/contributing/building.md:150 +#: src/contributing/building.md:172 msgid "Make changes to the relevant crate" msgstr "Änderungen an der relevanten Crate vornehmen" -#: src/contributing/building.md:151 +#: src/contributing/building.md:173 msgid "`cargo check -p perry` for fast product feedback" msgstr "`cargo check -p perry` für schnelles Produkt feedback" -#: src/contributing/building.md:152 +#: src/contributing/building.md:174 msgid "Run tests for the crates affected by the change" msgstr "" "Durchführen von Tests für die Kisten, die von der Änderung betroffen sind" -#: src/contributing/building.md:153 +#: src/contributing/building.md:175 msgid "" "Test with a real TypeScript file: `cargo run --release -- test.ts -o test " "&& ./test`" @@ -87573,15 +90910,123 @@ msgstr "" "Mit einer echten TypeScript-Datei testen: `cargo run --release -- test.ts -o " "test && ./test`" -#: src/contributing/building.md:181 +#: src/contributing/building.md:203 msgid "[Architecture](architecture.md) — Crate map and pipeline overview" msgstr "[Architektur](architecture.md) — Crate-Karte und Pipeline-Überblick" -#: src/contributing/building.md:182 -msgid "See `CLAUDE.md` for detailed implementation notes and pitfalls" +#: src/contributing/building.md:204 +#, fuzzy +msgid "See `AGENTS.md` for implementation pitfalls" msgstr "" "Siehe `CLAUDE.md` für detaillierte Implementierungs-Hinweise und Fallstricke" +#: src/contributing/building.md:206 +#, fuzzy +msgid "Development debug information" +msgstr "Entwicklungs-Builds" + +#: src/contributing/building.md:208 +msgid "" +"`dev` (including tests) and `perry-dev` use `line-tables-only` debug " +"information to retain file/line backtraces while reducing build storage and " +"linking work. Variable inspection in a debugger requires an explicit local " +"override, such as `CARGO_PROFILE_DEV_DEBUG=2 make build-dev`. Production " +"stripping is unchanged." +msgstr "" + +#: src/contributing/building.md:213 +msgid "" +"The policy is checked by `python3 scripts/check_dev_debug.py` in PR lint." +msgstr "" + +#: src/contributing/building.md:215 +msgid "Cached Linux linking" +msgstr "" + +#: src/contributing/building.md:217 +msgid "" +"Use `make mbx-deps` and the cached Make targets for local builds. Linux GNU " +"x86_64 and AArch64 targets use mold 2.42.0 via `.mbx.toml`; install `clang` " +"on the build host. MBX downloads the pinned mold release and verifies its " +"GitHub SHA-256 digest. macOS, Windows, Android and custom musl linker paths " +"keep the system linker. The core-runtime and Linux release scripts require " +"MBX instead of silently bypassing the cache when it is missing." +msgstr "" + +#: src/contributing/building.md:224 +msgid "" +"Use `MBX_LINKER=system` explicitly for linker bisection. Do not replace " +"`RUSTFLAGS`: Perry requires the unwind-table and x86_64 frame-pointer flags " +"in `.cargo/config.toml`. `share_workspace_root` stays false so panic " +"locations and debug paths remain real paths; shared outputs may retain their " +"source checkout paths. Keep package and feature sets consistent across " +"comparisons." +msgstr "" + +#: src/contributing/building.md:230 +msgid "" +"See [MBX managed linkers](https://mr-boxington.jdx.dev/linkers) and [mold]" +"(https://github.com/rui314/mold)." +msgstr "" + +#: src/contributing/building.md:233 +msgid "" +"For dedicated Linux agent hosts, use [compressed ZFS build storage](build-" +"storage.md) and `make build-agent` to check storage before building." +msgstr "" + +#: src/contributing/build-storage.md:3 +msgid "" +"Repeated Rust builds need both a bounded MBX cache and compressed build " +"storage. Dedicated Linux agent hosts use `make build-agent`, which refuses a " +"non-ZFS, uncompressed, unbounded or deduplicated build dataset before " +"invoking MBX. Ordinary macOS/Windows contributors continue using `make build-" +"dev`." +msgstr "" + +#: src/contributing/build-storage.md:8 +msgid "" +"Provision a dedicated dataset in an **existing** pool as an administrator. " +"Choose the pool, mountpoint and quota for the host; this example reserves a " +"200 GiB dataset quota. It does not create or reformat a pool." +msgstr "" + +#: src/contributing/build-storage.md:23 +msgid "" +"`zstd` (or an explicit `zstd-N` level) is also accepted. Keep store and " +"managed targets on the same dataset so eligible clones need not cross a " +"filesystem boundary. Use OpenZFS with block cloning enabled if reflink reuse " +"is required; compression alone does not prove cloning is available. Check " +"`zpool get feature@block_cloning tank` and the host's `/sys/module/zfs/" +"parameters/zfs_bclone_enabled`. The storage checker verifies dataset " +"placement and properties, not kernel reflink support." +msgstr "" + +#: src/contributing/build-storage.md:31 +msgid "" +"Keep `CARGO_TARGET_DIR` and `CARGO_BUILD_BUILD_DIR` unset for this entry " +"point: MBX owns target placement. Set machine-specific cleanup budgets with " +"`mbx settings set gc.max_total_size 150GiB`, adjusted below the dataset " +"quota and available capacity. Logical and physical usage differ under " +"compression; monitor `zfs list -o name,used,available,logicalused," +"compressratio` and preview cleanup with `mbx gc --dry-run`. Do not turn on " +"block deduplication to chase identical artifacts; use MBX and compression." +msgstr "" + +#: src/contributing/build-storage.md:39 +msgid "" +"The PR lint job tests the storage rejection paths without requiring a ZFS " +"runner. Actual host provisioning remains an administrator operation." +msgstr "" + +#: src/contributing/build-storage.md:42 +msgid "" +"Sources: [Infrastructure for Agentic Rust](https://blog.brokk.ai/" +"infrastructure-for-agentic-rust/), [MBX configuration](https://mr-boxington." +"jdx.dev/configuration), and [OpenZFS dataset properties](https://openzfs." +"github.io/openzfs-docs/man/master/7/zfsprops.7.html)." +msgstr "" + #: src/contributing/releasing.md:3 msgid "" "Maintainer runbook. Every release, including a patch, is gated on the exact " @@ -87645,15 +91090,15 @@ msgstr "" "aber nicht" #: src/contributing/releasing.md:38 +#, fuzzy msgid "" "Prepare the release candidate. Perry's normal merges already advance the " "workspace version, so use the version at the chosen commit; do not add " "another bump merely to release it. The version must exist in the source " "before builds start because it is embedded in Cargo and npm artifacts. " -"`Cargo.toml` and `CLAUDE.md` must agree, release-note fragments must exist, " -"and the Git tag must not exist locally or on origin. If that version was " -"already tagged, land a new version bump through the normal merge process " -"first." +"Release-note fragments must exist, and the Git tag must not exist locally or " +"on origin. If that version was already tagged, land a new version bump " +"through the normal merge process first." msgstr "" "Bereiten Sie den Release Candidate vor. Perry's normale Merges führen " "bereits die Workspace-Version voran, also verwenden Sie die Version bei der " @@ -87679,24 +91124,20 @@ msgid "'^version'" msgstr "„^Umwandlung\"" #: src/contributing/releasing.md:50 -msgid "\"**Current Version:** $VERSION\"" -msgstr "\"**Aktuelle Version:** $VERSION\"" - -#: src/contributing/releasing.md:51 msgid "'[0-9]*.md'" msgstr "\"[0-9]*.md\"" -#: src/contributing/releasing.md:52 +#: src/contributing/releasing.md:51 #, fuzzy msgid "\"refs/tags/v$VERSION\" # must print nothing\n" msgstr "\"refs/tags/v$VERSION\" # darf nichts drucken" -#: src/contributing/releasing.md:53 src/contributing/releasing.md:54 -#: src/contributing/releasing.md:60 src/contributing/releasing.md:61 +#: src/contributing/releasing.md:52 src/contributing/releasing.md:53 +#: src/contributing/releasing.md:59 src/contributing/releasing.md:60 msgid "\"release/v$VERSION\"" msgstr "\"release/v$VERSION\"" -#: src/contributing/releasing.md:57 +#: src/contributing/releasing.md:56 msgid "" "Run the two exact-SHA CI gates on that pinned branch and wait for both to " "pass:" @@ -87704,7 +91145,7 @@ msgstr "" "Führen Sie die beiden Exact-SHA CI-Tore auf diesem angehefteten Ast und " "warten Sie, bis beide passieren:" -#: src/contributing/releasing.md:64 +#: src/contributing/releasing.md:63 msgid "" "Freeze that candidate SHA. Unrelated merges to `main` after the branch is " "cut do not invalidate successful gates and do not require another test " @@ -87716,7 +91157,7 @@ msgstr "" "und erfordern keinen weiteren Testzyklus. Aktualisieren Sie den Kandidaten " "nur für einen Release-Blocking-Fix oder eine erforderliche Versionsänderung." -#: src/contributing/releasing.md:68 +#: src/contributing/releasing.md:67 msgid "" "Then use the npm-first pipeline. npm publication happens only in GitHub " "Actions through Trusted Publisher/OIDC. There is no `npm login`, npm account " @@ -87731,7 +91172,7 @@ msgstr "" "Authentifizierung auf dispatch/watch, um den Workflow und die anonyme " "Registrierung zu überprüfen." -#: src/contributing/releasing.md:74 +#: src/contributing/releasing.md:73 msgid "" "Socket is an optional pre-publish tarball scan, not an npm credential. When " "enabled, Actions submits each of the exact nine `.tgz` files as a temporary " @@ -87751,7 +91192,7 @@ msgstr "" "Version, weglassen `--socket-scan`; der Workflow zeichnet eine explizite " "übersprungene Quittung auf und fährt fort." -#: src/contributing/releasing.md:82 +#: src/contributing/releasing.md:81 msgid "" "To enable the gate later, store `SOCKET_API_TOKEN` as a repository or " "organization Actions secret with permission to create/read full scans, read " @@ -87765,7 +91206,7 @@ msgstr "" "Quoten. Es ist keine GitHub Umgebung erforderlich. Der Wert bleibt nur in " "GitHub und darf niemals lokal übertragen oder exportiert werden:" -#: src/contributing/releasing.md:91 +#: src/contributing/releasing.md:90 msgid "" "Before the first nine-package release, an npm organization owner must " "confirm that every name in `scripts/publish/constants.mts` exists and has " @@ -87775,27 +91216,27 @@ msgstr "" "bestätigen, dass jeder Name in `scripts/publish/constants.mts` existiert und " "diese einzige Trusted Publisher-Konfiguration hat:" -#: src/contributing/releasing.md:95 +#: src/contributing/releasing.md:94 msgid "provider: GitHub Actions" msgstr "Anbieter: GitHub Aktionen" -#: src/contributing/releasing.md:96 +#: src/contributing/releasing.md:95 msgid "organization/repository: `PerryTS/perry`" msgstr "organization/repository: `PerryTS/perry`" -#: src/contributing/releasing.md:97 +#: src/contributing/releasing.md:96 msgid "workflow filename: `release-packages.yml`" msgstr "Workflow-Dateiname: `release-packages.yml`" -#: src/contributing/releasing.md:98 +#: src/contributing/releasing.md:97 msgid "environment: none" msgstr "Umwelt: keine" -#: src/contributing/releasing.md:99 +#: src/contributing/releasing.md:98 msgid "allowed action: **`npm publish`**" msgstr "zulässige Maßnahmen: **`npm publish`**" -#: src/contributing/releasing.md:101 +#: src/contributing/releasing.md:100 #, fuzzy msgid "" "npm permits only one trusted publisher per package. The canonical identity " @@ -87810,11 +91251,11 @@ msgstr "" "nicht als zweiten Publisher und fügen Sie keinen Umgebungsnamen hinzu, den " "die anderen Pakete nicht verwenden." -#: src/contributing/releasing.md:107 +#: src/contributing/releasing.md:106 msgid "In particular, verify the ARM64 Windows package:" msgstr "Prüfen Sie insbesondere das Paket ARM64 Windows:" -#: src/contributing/releasing.md:113 +#: src/contributing/releasing.md:112 msgid "" "If that returns `E404`, stop: npm does not allow a Trusted Publisher to be " "configured for a package that does not exist, so OIDC cannot perform its " @@ -87831,19 +91272,43 @@ msgstr "" "genannten Felder des Trusted Publisher konfigurieren. Die Freigabeleitung " "lehnt einen Teilsatz absichtlich ab." -#: src/contributing/releasing.md:120 +#: src/contributing/releasing.md:119 msgid "" -"# one Release Packages run: exact-SHA gates/builds,\n" +"# one Publish to npm / GitHub Release run: exact-SHA gates/builds,\n" " # publish + verify all 9 via OIDC, then create\n" " # v0.x.y + the GitHub Release last\n" msgstr "" -#: src/contributing/releasing.md:125 +#: src/contributing/releasing.md:124 #, fuzzy msgid "# inspect the commit/run/package/Socket receipt\n" msgstr "# inspizieren Sie den commit/run/package/Socket Empfang" -#: src/contributing/releasing.md:128 +#: src/contributing/releasing.md:127 +msgid "Automated nightly prerelease" +msgstr "" + +#: src/contributing/releasing.md:129 +msgid "" +"`release-packages.yml` runs nightly at 06:37 UTC from the latest `main` " +"commit. It builds current binaries for testers without waiting for stable " +"release gates. To request an additional prerelease from a pushed branch, run:" +msgstr "" + +#: src/contributing/releasing.md:137 +msgid "" +"The automated and on-demand runs build host and cross-platform release " +"archives from an exact commit and publish them as a GitHub prerelease named " +"`nightly-v-YYYYMMDD-ra-`. The compiler " +"keeps its Cargo workspace version; `nightly` is a separate release channel, " +"not a version suffix. They do not publish npm packages or update Homebrew, " +"APT, winget, or build workers. They skip the full-suite and simulator gates, " +"so treat these downloads as preview builds. The manual command requires `gh` " +"authentication and a pushed branch whose tip matches the checkout. Find " +"builds under [GitHub prereleases](https://github.com/PerryTS/perry/releases)." +msgstr "" + +#: src/contributing/releasing.md:147 msgid "" "Publication sends the eight platform packages first and the wrapper last. If " "a network or registry error interrupts it before the tag exists, rerun the " @@ -87859,7 +91324,7 @@ msgstr "" "exakten CI-Tarball übereinstimmt; andernfalls stoppt es und benötigt eine " "neue Version." -#: src/contributing/releasing.md:134 +#: src/contributing/releasing.md:153 msgid "" "If the accumulated changelog fragments exceed the inline release-note " "budget, the publisher keeps the GitHub Release body concise and uploads the " @@ -87871,7 +91336,7 @@ msgstr "" "lädt die kompletten Notizen als Checksummed `release-notes-full.md` Asset " "hoch. Kein Fragment wird fallen gelassen." -#: src/contributing/releasing.md:138 +#: src/contributing/releasing.md:157 msgid "" "Do not run `npm login`, `git tag`, or manually publish a GitHub Release. The " "local command dispatches `release-packages.yml` with `cut_release=true`; " @@ -87884,11 +91349,11 @@ msgstr "" "npm Versionen öffentlich sind und ihre Registry-Shasums mit den genauen CI-" "Tarballs übereinstimmen." -#: src/contributing/releasing.md:143 +#: src/contributing/releasing.md:162 msgid "2. Additional major-release verification" msgstr "2. Zusätzliche Überprüfung der Hauptfreigabe" -#: src/contributing/releasing.md:145 +#: src/contributing/releasing.md:164 msgid "" "The automated gates above apply to every release. For a major/minor release, " "also perform the product-level platform checks that are not fully " @@ -87898,71 +91363,71 @@ msgstr "" "major/minor Release führen Sie auch die Produkt-Plattform-Checks durch, die " "nicht vollständig durch die automatisierten Suiten vertreten sind:" -#: src/contributing/releasing.md:149 +#: src/contributing/releasing.md:168 msgid "What to run" msgstr "Was zu laufen ist" -#: src/contributing/releasing.md:149 +#: src/contributing/releasing.md:168 msgid "Runs in CI?" msgstr "Läuft in CI?" -#: src/contributing/releasing.md:151 +#: src/contributing/releasing.md:170 msgid "**macOS** (arm64 + x86_64)" msgstr "**macOS** (Arm64 + x86_64)" -#: src/contributing/releasing.md:151 src/contributing/releasing.md:154 +#: src/contributing/releasing.md:170 src/contributing/releasing.md:173 msgid "Smoke-test installed archives on both architectures" msgstr "Smoke-test installierte Archive auf beiden Architekturen" -#: src/contributing/releasing.md:151 +#: src/contributing/releasing.md:170 msgid "Builds in release matrix; full tests on macOS arm64" msgstr "Baut in Release Matrix; vollständige Tests auf macOS arm64" -#: src/contributing/releasing.md:152 +#: src/contributing/releasing.md:171 msgid "**Linux glibc** (x86_64 + aarch64)" msgstr "**Linux glibc** (x86_64 + aarch64)" -#: src/contributing/releasing.md:152 +#: src/contributing/releasing.md:171 msgid "Smoke-test the packaged binary on the oldest supported glibc" msgstr "Smoke-Test des verpackten Binärs auf dem ältesten unterstützten glibc" -#: src/contributing/releasing.md:152 src/contributing/releasing.md:153 +#: src/contributing/releasing.md:171 src/contributing/releasing.md:172 msgid "Builds in release matrix" msgstr "Baut in Release Matrix auf" -#: src/contributing/releasing.md:153 +#: src/contributing/releasing.md:172 msgid "**Linux musl** (x86_64 + aarch64)" msgstr "**Linuxmusl** (x86_64 + aarch64)" -#: src/contributing/releasing.md:153 +#: src/contributing/releasing.md:172 msgid "Spot-check a compiled `hello.ts` on Alpine" msgstr "Spot-Check eine kompilierte `hello.ts` auf Alpine" -#: src/contributing/releasing.md:154 +#: src/contributing/releasing.md:173 msgid "**Windows** (x86_64 + ARM64 MSVC)" msgstr "**Windows** (x86_64 + ARM64 MSVC)" -#: src/contributing/releasing.md:154 +#: src/contributing/releasing.md:173 msgid "Build plus full-tier Windows checks" msgstr "Build plus vollständige Windows-Prüfungen" -#: src/contributing/releasing.md:155 +#: src/contributing/releasing.md:174 msgid "**iOS Simulator**" msgstr "**iOS Simulator**" -#: src/contributing/releasing.md:155 +#: src/contributing/releasing.md:174 msgid "Exercise a representative app with `xcrun simctl`" msgstr "Übung einer repräsentativen App mit `xcrun simctl`" -#: src/contributing/releasing.md:155 +#: src/contributing/releasing.md:174 msgid "Required `simctl-tests.yml`" msgstr "Erforderliche `simctl-tests.yml`" -#: src/contributing/releasing.md:156 +#: src/contributing/releasing.md:175 msgid "**visionOS Simulator**" msgstr "**visionOS Simulator**" -#: src/contributing/releasing.md:156 +#: src/contributing/releasing.md:175 msgid "" "`perry compile --target visionos-simulator ...`, launch in Apple Vision Pro " "Simulator" @@ -87970,23 +91435,23 @@ msgstr "" "`perry compile --target visionos-simulator ...`, Einführung im Apple Vision " "Pro Simulator" -#: src/contributing/releasing.md:156 src/contributing/releasing.md:157 +#: src/contributing/releasing.md:175 src/contributing/releasing.md:176 msgid "No (Xcode required)" msgstr "Nein (Xcode erforderlich)" -#: src/contributing/releasing.md:157 +#: src/contributing/releasing.md:176 msgid "**tvOS Simulator**" msgstr "**tvOS Simulator**" -#: src/contributing/releasing.md:157 +#: src/contributing/releasing.md:176 msgid "`perry compile --target tvos-simulator ...`, launch in Simulator" msgstr "`perry compile --target tvos-simulator ...`, Start im Simulator" -#: src/contributing/releasing.md:158 +#: src/contributing/releasing.md:177 msgid "**watchOS Simulator**" msgstr "**watchOS Simulator**" -#: src/contributing/releasing.md:158 +#: src/contributing/releasing.md:177 msgid "" "`perry compile --target watchos-simulator ...` — requires `rustup toolchain " "install nightly` + `cargo +nightly -Zbuild-std`" @@ -87994,11 +91459,11 @@ msgstr "" "`perry compile --target watchos-simulator ...` — erfordert `rustup toolchain " "install nightly` + `cargo +nightly -Zbuild-std`" -#: src/contributing/releasing.md:158 +#: src/contributing/releasing.md:177 msgid "No (Xcode + nightly required)" msgstr "Nein (Xcode + nachts erforderlich)" -#: src/contributing/releasing.md:159 +#: src/contributing/releasing.md:178 msgid "" "`perry compile --target android examples/widget_demo.ts`; install APK on " "emulator" @@ -88006,15 +91471,15 @@ msgstr "" "`perry compile --target android examples/widget_demo.ts`; APK auf Emulator " "installieren" -#: src/contributing/releasing.md:159 +#: src/contributing/releasing.md:178 msgid "No (NDK required)" msgstr "Nein (NDK erforderlich)" -#: src/contributing/releasing.md:160 +#: src/contributing/releasing.md:179 msgid "**Web / WASM**" msgstr "**Web / WASM**" -#: src/contributing/releasing.md:160 +#: src/contributing/releasing.md:179 msgid "" "`perry compile --target web examples/wasm_ui_demo.ts`, open `out.html` in a " "browser" @@ -88022,19 +91487,19 @@ msgstr "" "`perry compile --target web examples/wasm_ui_demo.ts`, öffnen Sie `out.html` " "in einem Browser" -#: src/contributing/releasing.md:160 src/contributing/releasing.md:161 +#: src/contributing/releasing.md:179 src/contributing/releasing.md:180 msgid "No" msgstr "No" -#: src/contributing/releasing.md:161 +#: src/contributing/releasing.md:180 msgid "**Home-screen widgets**" msgstr "**Home-Bildschirm Widgets**" -#: src/contributing/releasing.md:161 +#: src/contributing/releasing.md:180 msgid "`perry compile --target widgetkit ... && perry publish ios`" msgstr "`perry compile --target widgetkit ... && perry publish ios`" -#: src/contributing/releasing.md:163 +#: src/contributing/releasing.md:182 msgid "" "Record the manual results in the release issue. These checks supplement CI; " "they never waive a red required workflow." @@ -88042,15 +91507,15 @@ msgstr "" "Nehmen Sie die manuellen Ergebnisse im Release-Problem auf. Diese Kontrollen " "ergänzen CI; sie verzichten nie auf einen roten erforderlichen Workflow." -#: src/contributing/releasing.md:166 +#: src/contributing/releasing.md:185 msgid "2a. Simulator-run recipe (iOS / tvOS)" msgstr "2a. Rezept für Simulatoren (iOS / tvOS)" -#: src/contributing/releasing.md:168 +#: src/contributing/releasing.md:187 msgid "" "`perry-ui-ios` and `perry-ui-tvos` honor `PERRY_UI_TEST_MODE=1` — when set, " -"the app renders one frame, optionally writes a screenshot to `" -"$PERRY_UI_SCREENSHOT_PATH`, and exits cleanly. Combine with `xcrun simctl` " +"the app renders one frame, optionally writes a screenshot to " +"`$PERRY_UI_SCREENSHOT_PATH`, and exits cleanly. Combine with `xcrun simctl` " "to verify a doc-example runs without a human:" msgstr "" "`perry-ui-ios` und `perry-ui-tvos` ehren `PERRY_UI_TEST_MODE=1` — wenn " @@ -88059,27 +91524,27 @@ msgstr "" "`xcrun simctl`, um einen doc-Beispiel läuft ohne einen Menschen zu " "überprüfen:" -#: src/contributing/releasing.md:174 +#: src/contributing/releasing.md:193 #, fuzzy msgid "# Compile for the simulator\n" msgstr "# Kompilieren für den Simulator" -#: src/contributing/releasing.md:176 +#: src/contributing/releasing.md:195 #, fuzzy msgid "# Boot a device (one-time; reuse the UDID across runs)\n" msgstr "" "# Booten Sie ein Gerät (einmal; verwenden Sie die UDID über den Lauf hinweg)" -#: src/contributing/releasing.md:178 +#: src/contributing/releasing.md:197 msgid "\"iPhone 15\"" msgstr "\"iPhone 15\"" -#: src/contributing/releasing.md:180 +#: src/contributing/releasing.md:199 #, fuzzy msgid "# Install + launch with test mode\n" msgstr "# Installieren + Starten mit Testmodus" -#: src/contributing/releasing.md:191 +#: src/contributing/releasing.md:210 msgid "" "Same recipe works for `tvos-simulator` + `\"Apple TV\"` device. On watchOS " "the Rust Tier-3 toolchain requires `+nightly -Zbuild-std` — see the `watchos-" @@ -88089,25 +91554,26 @@ msgstr "" "Auf watchOS benötigt die Rust Tier-3 Toolchain `+nightly -Zbuild-std` — " "siehe die `watchos-simulator` Zeile in der Matrix oben." -#: src/contributing/releasing.md:195 +#: src/contributing/releasing.md:214 msgid "3. What CI does on the release" msgstr "3. Was CI bei der Veröffentlichung macht" -#: src/contributing/releasing.md:197 +#: src/contributing/releasing.md:216 +#, fuzzy msgid "" -"The `Release Packages` workflow (`.github/workflows/release-packages.yml`) " -"triggers on a published GitHub Release or manual `workflow_dispatch`. Matrix " -"runners build:" +"The `Publish to npm / GitHub Release` workflow (`.github/workflows/release-" +"packages.yml`) triggers on a published GitHub Release or manual " +"`workflow_dispatch`. Matrix runners build:" msgstr "" "Der `Release Packages` Workflow (`.github/workflows/release-packages.yml`) " "löst auf einem veröffentlichten GitHub Release oder Handbuch " "`workflow_dispatch` aus. Matrix-Runner aufbauen:" -#: src/contributing/releasing.md:201 +#: src/contributing/releasing.md:220 msgid "`macos-14` / `macos-15` — arm64 + x86_64 Darwin binaries" msgstr "`macos-14` / `macos-15` — Arm64 + x86_64 Darwin-Binärdateien" -#: src/contributing/releasing.md:202 +#: src/contributing/releasing.md:221 msgid "" "`ubuntu-24.04` / `ubuntu-24.04-arm` — glibc x86_64 + aarch64; the compiler, " "runtime, stdlib and extension archives build inside architecture-matched " @@ -88121,21 +91587,21 @@ msgstr "" "aufbaut und danach hinzugefügt wird (glibc 2.31 Compiler-Boden; " "`GLIBC_BUILD_FLOOR` in `npm/perry/bin/detect.cjs` synchronisiert halten)" -#: src/contributing/releasing.md:207 +#: src/contributing/releasing.md:226 msgid "" "`ubuntu-24.04` / `ubuntu-24.04-arm` — musl x86_64 + aarch64 (fully static)" msgstr "" "`ubuntu-24.04` / `ubuntu-24.04-arm` — musl x86_64 + aarch64 (vollstatisch)" -#: src/contributing/releasing.md:208 +#: src/contributing/releasing.md:227 msgid "`windows-latest` / `windows-11-arm` — x86_64 + ARM64 MSVC" msgstr "`windows-latest` / `windows-11-arm` — x86_64 + ARM64 MSVC" -#: src/contributing/releasing.md:210 +#: src/contributing/releasing.md:229 msgid "Artifacts are published to:" msgstr "Artefakte werden veröffentlicht an:" -#: src/contributing/releasing.md:212 +#: src/contributing/releasing.md:231 msgid "" "**npm** (`@perryts/perry` + eight per-platform optional-deps) — via OIDC " "Trusted Publisher" @@ -88143,26 +91609,26 @@ msgstr "" "**npm** (`@perryts/perry` + acht pro Plattform optionale Deps) — über OIDC " "Trusted Publisher" -#: src/contributing/releasing.md:214 +#: src/contributing/releasing.md:233 msgid "**Homebrew** — formula auto-update" msgstr "**Kopfbraue** — automatische Aktualisierung der Formel" -#: src/contributing/releasing.md:215 +#: src/contributing/releasing.md:234 msgid "**APT** (Debian/Ubuntu) — GPG-signed repository" msgstr "**APT** (Debian/Ubuntu) — GPG-signiertes Repository" -#: src/contributing/releasing.md:216 +#: src/contributing/releasing.md:235 msgid "**winget** — manifest auto-update" msgstr "**winget** — manifestieren Auto-Update" -#: src/contributing/releasing.md:217 +#: src/contributing/releasing.md:236 msgid "" "**hub.perryts.com** — worker notification so cloud build workers refresh" msgstr "" "**hub.perryts.com** — Benachrichtigung der Arbeitnehmer, so dass Cloud-Build-" "Arbeiter aktualisieren" -#: src/contributing/releasing.md:219 +#: src/contributing/releasing.md:238 msgid "" "In the canonical npm-first flow, any failing host or cross build prevents " "npm publication. The wrapper is not published when a platform package fails. " @@ -88175,11 +91641,11 @@ msgstr "" "fix-forward mit einer neuen Patch-Version statt Änderung eines bestehenden " "Tags." -#: src/contributing/releasing.md:224 +#: src/contributing/releasing.md:243 msgid "4. Release gates (what blocks a release)" msgstr "4. Lösen von Toren (was eine Freigabe blockiert)" -#: src/contributing/releasing.md:226 +#: src/contributing/releasing.md:245 msgid "" "`release-packages.yml` rejects a cut release unless `test.yml` has a " "successful **`full-suite-gate`** and `simctl-tests.yml` has a successful run " @@ -88192,7 +91658,7 @@ msgstr "" "oder Push-to-Main-Sweep zählt _not_. Siehe [KI-Ebenen](../testing/ci-tiers." "md). Die vollständige Ebene ist:" -#: src/contributing/releasing.md:231 +#: src/contributing/releasing.md:250 msgid "" "everything the PR gate and the post-merge sweep run (`lint`, `check`, " "`warnings`, `cargo test --workspace`, the gap suite, `gc-stress`, Windows " @@ -88204,7 +91670,7 @@ msgstr "" "x64 + ARM64 baut, Compiler-Output-Gate, `repsel-census`, `harmonyos-smoke`, " "`security-audit`), plus `binary-size` und" -#: src/contributing/releasing.md:235 +#: src/contributing/releasing.md:254 msgid "" "`parity` — must clear the threshold in `test-parity/threshold.json` and add " "no new / stale known-failure entries" @@ -88212,7 +91678,7 @@ msgstr "" "`parity` — muss die Schwelle in `test-parity/threshold.json` löschen und " "keine neuen / veralteten bekannten-Fehler-Einträge hinzufügen" -#: src/contributing/releasing.md:237 +#: src/contributing/releasing.md:256 msgid "" "`compile-smoke` — must compile every file under `test-files/`, plus the UI " "styling matrix, Fastify integration and memory-stability tests" @@ -88220,7 +91686,7 @@ msgstr "" "`compile-smoke` — muss jede Datei unter `test-files/` kompilieren, sowie die " "UI-Stylingmatrix, Fastify Integration und Speicherstabilitätstests" -#: src/contributing/releasing.md:239 +#: src/contributing/releasing.md:258 msgid "" "the gap suite in its 8-shard **auto-optimize** mode (the PR/sweep tiers use " "the prebuilt-runtime `fast` mode)" @@ -88228,7 +91694,7 @@ msgstr "" "die Lücke-Suite in seiner 8-shard **Auto-Optimieren** Modus (die PR/sweep-" "Ebenen verwenden den vorgefertigten Laufzeitmodus `fast`)" -#: src/contributing/releasing.md:241 +#: src/contributing/releasing.md:260 msgid "" "`doc-tests` (macOS + Windows) — must compile + run every example under `docs/" "examples/`" @@ -88236,7 +91702,7 @@ msgstr "" "`doc-tests` (macOS + Windows) — muss kompilieren + jedes Beispiel unter " "`docs/examples/` ausführen" -#: src/contributing/releasing.md:243 +#: src/contributing/releasing.md:262 msgid "" "the package smokes (`drizzle-mysql-smoke`, `ink-link-smoke`, `effect-basic-" "smoke`) and `native-abi-evidence-packet`" @@ -88244,7 +91710,7 @@ msgstr "" "das Paket raucht (`drizzle-mysql-smoke`, `ink-link-smoke`, `effect-basic-" "smoke`) und `native-abi-evidence-packet`" -#: src/contributing/releasing.md:245 +#: src/contributing/releasing.md:264 msgid "" "`full-suite-gate`, the fan-in which proves every required full-tier job " "above succeeded" @@ -88252,7 +91718,7 @@ msgstr "" "`full-suite-gate`, der Lüfter, der alle erforderlichen Full-Tier-Aufgaben " "über succeeded prüft" -#: src/contributing/releasing.md:248 +#: src/contributing/releasing.md:267 msgid "" "None of these carries `continue-on-error` any more: a red suite in the full " "tier blocks the release. If a suite is red for a reason that is not the " @@ -88267,7 +91733,7 @@ msgstr "" "Level `continue-on-error: true` mit dieser Ausgabenummer hinzu) — " "veröffentlichen Sie es nicht." -#: src/contributing/releasing.md:254 +#: src/contributing/releasing.md:273 msgid "" "The release workflow then requires every host/cross package build, all nine " "exact npm publishes, and public-registry sha1 verification. Socket is an " @@ -88284,11 +91750,11 @@ msgstr "" "Sie sie, nachdem die GitHub Release erstellt wurde, aber verwechseln Sie sie " "nicht mit Vortagstoren." -#: src/contributing/releasing.md:261 +#: src/contributing/releasing.md:280 msgid "4a. What tells you a release is overdue" msgstr "4a. Was dir eine Freilassung sagt, ist überfällig" -#: src/contributing/releasing.md:263 +#: src/contributing/releasing.md:282 msgid "" "Nothing in the sections above fires if a release simply never happens. That " "is [\\#7491](https://github.com/PerryTS/perry/issues/7491): npm served a " @@ -88305,7 +91771,7 @@ msgstr "" "install @perryts/perry` Ihnen gibt. Der einzige Detektor war ein Benutzer, " "der die Registerkarte Versionen liest." -#: src/contributing/releasing.md:270 +#: src/contributing/releasing.md:289 msgid "" "`npm-publish-freshness.yml` runs daily and calls `scripts/" "check_npm_publish_freshness.py`, which reads the full packument for every " @@ -88315,27 +91781,27 @@ msgstr "" "check_npm_publish_freshness.py` auf, was das volle Paket für jedes Paket " "unter `npm/` liest und es mit `[workspace.package] version` vergleicht:" -#: src/contributing/releasing.md:274 +#: src/contributing/releasing.md:293 msgid "signal" msgstr "signal" -#: src/contributing/releasing.md:274 +#: src/contributing/releasing.md:293 msgid "budget" msgstr "budget" -#: src/contributing/releasing.md:274 +#: src/contributing/releasing.md:293 msgid "why" msgstr "why" -#: src/contributing/releasing.md:276 +#: src/contributing/releasing.md:295 msgid "age of the published `latest`" msgstr "Alter der veröffentlichten `latest`" -#: src/contributing/releasing.md:276 +#: src/contributing/releasing.md:295 msgid "14 days" msgstr "14 Tage" -#: src/contributing/releasing.md:276 +#: src/contributing/releasing.md:295 msgid "" "counted **only while the tree is ahead**, so a quiet week with nothing to " "release is not a failure. This is the signal that would have caught #7491 on " @@ -88345,15 +91811,15 @@ msgstr "" "zu veröffentlichen ist also kein Misserfolg. Das ist das Signal, das #7491 " "am Tag 15 erwischt hätte." -#: src/contributing/releasing.md:277 +#: src/contributing/releasing.md:296 msgid "patch distance" msgstr "Abstand des Pflasters" -#: src/contributing/releasing.md:277 +#: src/contributing/releasing.md:296 msgid "500" msgstr "500" -#: src/contributing/releasing.md:277 +#: src/contributing/releasing.md:296 msgid "" "every merge bumps the workspace patch, so this is a commit count in " "disguise. A backstop for a cadence spike inside an unexpired age budget — " @@ -88363,11 +91829,11 @@ msgstr "" "Anzahl in Verkleidung. Ein Backstop für eine Kadenzspitze innerhalb eines " "unerledigten Altersbudgets — keine Freigabe-Kadenz-Regel." -#: src/contributing/releasing.md:278 +#: src/contributing/releasing.md:297 msgid "platform packages match the launcher" msgstr "Plattformpakete passen zum Launcher" -#: src/contributing/releasing.md:278 +#: src/contributing/releasing.md:297 msgid "" "`npm/perry/package.json.tmpl` pins its optionalDependencies to its own exact " "version, so a partial publish breaks installs while both halves sit inside " @@ -88377,7 +91843,7 @@ msgstr "" "eigene genaue Version, so dass ein Teil veröffentlichen Pausen installiert, " "während beide Hälften sitzen in ihren Budgets." -#: src/contributing/releasing.md:280 +#: src/contributing/releasing.md:299 msgid "" "Budgets live in `scripts/npm_publish_freshness.json`. A failing run files " "one sticky issue and updates it in place; it closes itself once the registry " @@ -88387,22 +91853,22 @@ msgstr "" "fehlgeschlagene Run-Dateien ein klebriges Problem und aktualisiert es an Ort " "und Stelle; es schließt sich, sobald die Registry aufgeholt hat." -#: src/contributing/releasing.md:284 +#: src/contributing/releasing.md:303 #, fuzzy msgid "# proves it can fail\n" msgstr "# beweist, dass es fehlschlagen kann" -#: src/contributing/releasing.md:285 +#: src/contributing/releasing.md:304 #, fuzzy msgid "# offline\n" msgstr "# offline" -#: src/contributing/releasing.md:286 +#: src/contributing/releasing.md:305 #, fuzzy msgid "# real registry, no issue writes\n" msgstr "# echte Registrierung, kein Problem schreibt" -#: src/contributing/releasing.md:289 +#: src/contributing/releasing.md:308 msgid "" "An unreachable or unparseable registry is **red, not a skip** — this " "detector exists because a silence read as health for a month, and a skip " @@ -88417,11 +91883,11 @@ msgstr "" "Statuskontext: ob eine Veröffentlichung geschnitten wurde, kann ein PR-Autor " "nicht beheben." -#: src/contributing/releasing.md:294 +#: src/contributing/releasing.md:313 msgid "5. If a release goes wrong" msgstr "5. Wenn eine Freigabe schief geht" -#: src/contributing/releasing.md:296 +#: src/contributing/releasing.md:315 msgid "" "**Wrong artifact published**: tag a new patch release with the fix; npm " "rejects re-publishes of the same version anyway." @@ -88429,7 +91895,7 @@ msgstr "" "**Falsches Artefakt veröffentlicht**: eine neue Patch-Release mit dem Fix " "taggen; npm lehnt Re-Publishes derselben Version sowieso ab." -#: src/contributing/releasing.md:298 +#: src/contributing/releasing.md:317 msgid "" "**Broken build before npm publication**: fix it and rebuild the complete " "nine-package set; the canonical flow will not tag a partial set." @@ -88438,7 +91904,7 @@ msgstr "" "der kompletten neun-Paket-Set; der kanonischen Fluss wird nicht Tag ein Teil-" "Set." -#: src/contributing/releasing.md:300 +#: src/contributing/releasing.md:319 msgid "" "**Broken binary discovered after publication**: ship a follow-up patch " "version; neither npm versions nor release tags are mutable." @@ -88447,7 +91913,7 @@ msgstr "" "Patch-Version versenden; weder npm-Versionen noch Release-Tags sind " "mutierbar." -#: src/contributing/releasing.md:302 +#: src/contributing/releasing.md:321 msgid "" "**A post-tag distribution hook failed**: re-run the failed workflow. To " "retry the legacy release-packages distribution legs, dispatch it with " @@ -88460,6 +91926,165 @@ msgstr "" "Z`; fügen Sie `publish_npm=true` nur dann hinzu, wenn das idempotent npm " "Bein selbst ebenfalls erneut getestet werden muss." +#~ msgid "`perry-ext-events`" +#~ msgstr "`perry-ext-events`" + +#~ msgid "`perry-ext-mongodb`" +#~ msgstr "`perry-ext-mongodb`" + +#~ msgid "`mongodb`" +#~ msgstr "`mongodb`" + +#~ msgid "`perry-ext-streams`" +#~ msgstr "`perry-ext-streams`" + +#~ msgid "" +#~ "**Async returns `*mut Promise`**. Pattern: `JsPromise::new()` → " +#~ "`spawn_blocking(move || { tokio::runtime::Handle::current()." +#~ "block_on(async {...}); promise.resolve(...) })` → return `promise." +#~ "as_raw()`." +#~ msgstr "" +#~ "**Async gibt `*mut Promise` zurück**. Muster: `JsPromise::new()` → " +#~ "`spawn_blocking(move || { tokio::runtime::Handle::current()." +#~ "block_on(async {...}); promise.resolve(...) })` → `promise.as_raw()` " +#~ "zurückgeben." + +#~ msgid "Async one-shot (HTTP request, DB query)" +#~ msgstr "Async-Einmalvorgang (HTTP-Anfrage, DB-Abfrage)" + +#~ msgid "\"fetch: {}\"" +#~ msgstr "\"fetch: {}\"" + +#~ msgid "" +#~ "These are real impls on macOS via `NSTableView.sortDescriptors` and " +#~ "`selectedRowIndexes`; other platforms link safe-default stubs." +#~ msgstr "" +#~ "Diese sind echte Implementierungen auf macOS via `NSTableView." +#~ "sortDescriptors` und `selectedRowIndexes`; andere Plattformen linken Safe-" +#~ "Default-Stubs." + +#~ msgid "**mongodb** — MongoDB client" +#~ msgstr "**mongodb** — MongoDB-Client" + +#~ msgid "[`mongodb`](#mongodb)" +#~ msgstr "[`mongodb`](#mongodb)" + +#~ msgid "`collection` — instance" +#~ msgstr "`collection` — Instanz" + +#~ msgid "`connect` — instance" +#~ msgstr "`connect` — Instanz" + +#~ msgid "`countDocuments` — instance" +#~ msgstr "`countDocuments` — Instanz" + +#~ msgid "`db` — instance" +#~ msgstr "`db` — Instanz" + +#~ msgid "`deleteMany` — instance" +#~ msgstr "`deleteMany` — Instanz" + +#~ msgid "`deleteOne` — instance" +#~ msgstr "`deleteOne` — Instanz" + +#~ msgid "`findOne` — instance" +#~ msgstr "`findOne` — Instanz" + +#~ msgid "`insertMany` — instance" +#~ msgstr "`insertMany` — Instanz" + +#~ msgid "`insertOne` — instance" +#~ msgstr "`insertOne` — Instanz" + +#~ msgid "`updateMany` — instance" +#~ msgstr "`updateMany` — Instanz" + +#~ msgid "`updateOne` — instance" +#~ msgstr "`updateOne` — Instanz" + +#~ msgid "" +#~ "Retain symbols/DWARF (and emit a Windows PDB) instead of stripping the " +#~ "result." +#~ msgstr "" +#~ "Behalten Sie symbols/DWARF (und emittieren Sie eine Windows PDB) statt " +#~ "das Ergebnis zu entfernen." + +#~ msgid "tenuring feedback may grow the effective cap by up to 4×" +#~ msgstr "Tenuring feedback kann die effektive Kappe um bis zu 4× wachsen" + +#~ msgid "" +#~ "on live-set-bound workloads, where a fixed cap would multiply the per-" +#~ "collection fixed cost by an enormous collection count. Generated write " +#~ "barriers are also on by default. Turning them off makes generational " +#~ "minors unsound, so the runtime deliberately falls back to full mark-sweep." +#~ msgstr "" +#~ "bei Workloads mit Live-Sets, bei denen eine fixe Obergrenze die Fixkosten " +#~ "je Sammlung mit einer enormen Sammelzahl multipliziert. Erzeugte " +#~ "Schreibbarrieren sind standardmäßig ebenfalls an. Wenn man sie " +#~ "ausschaltet, macht es Generations-Molls unerhört, so fällt die Laufzeit " +#~ "bewusst auf volles Mark-Sweep zurück." + +#~ msgid "`arm64_32` watchOS, ARM64 Windows, and unsupported architectures" +#~ msgstr "" +#~ "`arm64_32` watchOS, ARM64 Windows und nicht unterstützte Architekturen" + +#~ msgid "" +#~ "The compile graph records every approved `.node` file as a native-addon " +#~ "module instead of trying to read it as UTF-8. At runtime, one loader " +#~ "operation does the following:" +#~ msgstr "" +#~ "Der Compil-Graph zeichnet jede genehmigte `.node`-Datei als natives Addon-" +#~ "Modul auf, anstatt sie als UTF-8 zu lesen. Zur Laufzeit führt ein Loader-" +#~ "Betrieb Folgendes aus:" + +#~ msgid "" +#~ "The committed baseline records only structural signals: the 76 reviewed " +#~ "member decisions, the default dependency closure, the `perry` CLI " +#~ "closure, and decision counts. Any structural change must update the " +#~ "policy intentionally; ordinary Rust source edits do not churn the " +#~ "baseline." +#~ msgstr "" +#~ "Die zugesagte Baseline zeichnet nur strukturelle Signale auf: die 76 " +#~ "überprüften Mitgliedsentscheidungen, die Standard-" +#~ "Abhängigkeitsschließung, die Schließung der `perry` CLI und die " +#~ "Entscheidung zählt. Jede strukturelle Änderung muss die Richtlinie " +#~ "absichtlich aktualisieren; gewöhnliche Rust-Quellbearbeitungen schleudern " +#~ "nicht die Basislinie." + +#~ msgid "" +#~ "Rust toolchain (stable, **≥ 1.94**): [rustup.rs](https://rustup.rs/). The " +#~ "workspace pins no toolchain file, so an older `stable` fails with a " +#~ "`sqlx@0.9.0 requires rustc 1.94.0` MSRV error from deep in the dependency " +#~ "graph. `rustup update stable` resolves it." +#~ msgstr "" +#~ "Rust Werkzeugkette (stabil, **≥ 1.94**): [rustup.rs](https://rustup.rs/). " +#~ "Der Workspace pinnt keine Toolchain-Datei, so dass ein älterer `stable` " +#~ "mit einem `sqlx@0.9.0 requires rustc 1.94.0` MSRV-Fehler aus der Tiefe " +#~ "des Abhängigkeitsdiagramms fehlschlägt. `rustup update stable` löst es " +#~ "auf." + +#~ msgid "" +#~ "Perry has three build profiles, each tuned for a different job (#5422):" +#~ msgstr "" +#~ "Perry verfügt über drei Build-Profile, die jeweils für einen anderen Job " +#~ "(#5422) abgestimmt sind:" + +#~ msgid "`dist`" +#~ msgstr "`dist`" + +#~ msgid "" +#~ "**`dist`** mirrors `release` exactly (ThinLTO, `codegen-units = 1`, `opt-" +#~ "level = 3`, strip) and is the explicit, named profile the release " +#~ "workflows use for shipped artifacts. Output is at `target/dist/`." +#~ msgstr "" +#~ "**`dist`** spiegel `release` genau (ThinLTO, `codegen-units = 1`, `opt-" +#~ "level = 3`, Streifen) und ist das explizite, benannte Profil, das die " +#~ "Freigabe-Workflows für ausgelieferte Artefakte verwenden. Die Ausgabe ist " +#~ "bei `target/dist/`." + +#~ msgid "\"**Current Version:** $VERSION\"" +#~ msgstr "\"**Aktuelle Version:** $VERSION\"" + #~ msgid "# Arch" #~ msgstr "# Arch" @@ -88543,9 +92168,6 @@ msgstr "" #~ msgid "`perry-ext-fastify`" #~ msgstr "`perry-ext-fastify`" -#~ msgid "`fastify`" -#~ msgstr "`fastify`" - #~ msgid "`perry-ext-fetch`" #~ msgstr "`perry-ext-fetch`" @@ -88954,17 +92576,14 @@ msgstr "" #~ "}\n" #~ "```" -#~ msgid "commander (CLI Parsing)" -#~ msgstr "commander (CLI-Parsing)" - #~ msgid "" #~ "```typescript,no-test\n" #~ "import { Command } from \"commander\"\n" #~ "\n" #~ "function commanderExample(): void {\n" #~ " const program = new Command()\n" -#~ " program.name(\"my-cli\").version(\"1.0.0\").description(\"My CLI tool" -#~ "\")\n" +#~ " program.name(\"my-cli\").version(\"1.0.0\").description(\"My CLI " +#~ "tool\")\n" #~ "\n" #~ " program\n" #~ " .command(\"serve\")\n" @@ -88983,8 +92602,8 @@ msgstr "" #~ "\n" #~ "function commanderExample(): void {\n" #~ " const program = new Command()\n" -#~ " program.name(\"my-cli\").version(\"1.0.0\").description(\"My CLI tool" -#~ "\")\n" +#~ " program.name(\"my-cli\").version(\"1.0.0\").description(\"My CLI " +#~ "tool\")\n" #~ "\n" #~ " program\n" #~ " .command(\"serve\")\n" @@ -89556,9 +93175,6 @@ msgstr "" #~ msgid "`isBetween` — instance" #~ msgstr "`isBetween` — Instanz" -#~ msgid "`moment` — module" -#~ msgstr "`moment` — Modul" - #~ msgid "`toDate` — instance" #~ msgstr "`toDate` — Instanz" @@ -90335,8 +93951,8 @@ msgstr "" #~ msgstr "Dann stoßen und tag:" #~ msgid "" -#~ "# Bump [workspace.package] version in Cargo.toml AND the \"Current Version" -#~ "\"" +#~ "# Bump [workspace.package] version in Cargo.toml AND the \"Current " +#~ "Version\"" #~ msgstr "" #~ "# Bump [workspace.package] Version in Cargo.toml UND die \"aktuelle " #~ "Version\"" @@ -91330,8 +94946,9 @@ msgstr "" #~ msgid "" #~ "The result: at any GC safepoint, the collector can walk the shadow stack " #~ "and see the live NaN-boxed value of every TS-level local in every active " -#~ "frame, regardless of what LLVM did with registers. This is the \"precise" -#~ "\" half of the root scan — `shadow_stack_root_scanner` (`gc.rs:3860`)." +#~ "frame, regardless of what LLVM did with registers. This is the " +#~ "\"precise\" half of the root scan — `shadow_stack_root_scanner` (`gc." +#~ "rs:3860`)." #~ msgstr "" #~ "Das Ergebnis: An jedem GC-Safepoint kann der Collector den Shadow Stack " #~ "durchlaufen und den live NaN-geboxt-en Wert jeder TS-lokalen Variable in " @@ -91472,9 +95089,6 @@ msgstr "" #~ msgid "Shadow stack" #~ msgstr "Shadow Stack" -#~ msgid "Minor GC" -#~ msgstr "Minor GC" - #~ msgid "" #~ "This is a brief overview for contributors. For detailed implementation " #~ "notes, see the project's `CLAUDE.md`." @@ -91585,9 +95199,6 @@ msgstr "" #~ "sind. Siehe [Decorators](decorators.md) für die vollständige Position und " #~ "ein durchgespieltes Migrationsrezept." -#~ msgid "No Reflection" -#~ msgstr "Keine Reflexion" - #~ msgid "There is no `Reflect` API or runtime type metadata:" #~ msgstr "Es gibt keine `Reflect`-API oder Laufzeit-Typmetadaten:" diff --git a/docs/po/es.po b/docs/po/es.po index 06637b33951..bb89c7b9b15 100644 --- a/docs/po/es.po +++ b/docs/po/es.po @@ -166,7 +166,7 @@ msgid "Events" msgstr "Eventos" #: src/SUMMARY.md:51 src/ui/canvas.md:1 src/platforms/macos.md:37 -#: src/platforms/android.md:38 src/platforms/windows.md:62 +#: src/platforms/android.md:43 src/platforms/windows.md:62 #: src/platforms/linux.md:52 msgid "Canvas" msgstr "Canvas" @@ -222,11 +222,11 @@ msgstr "Hooks" #: src/SUMMARY.md:68 src/threading/parallel-map.md:157 #: src/threading/parallel-filter.md:78 src/threading/spawn.md:191 -#: src/tui/examples.md:1 src/cli/flags.md:504 +#: src/tui/examples.md:1 src/cli/flags.md:508 msgid "Examples" msgstr "Ejemplos" -#: src/SUMMARY.md:70 src/system/overview.md:21 +#: src/SUMMARY.md:70 src/system/overview.md:21 src/cli/function-order.md:52 msgid "Platforms" msgstr "Plataformas" @@ -392,7 +392,7 @@ msgstr "HTTP y redes" msgid "Databases" msgstr "Bases de datos" -#: src/SUMMARY.md:94 src/stdlib/overview.md:42 src/stdlib/crypto.md:1 +#: src/SUMMARY.md:94 src/stdlib/overview.md:41 src/stdlib/crypto.md:1 msgid "Cryptography" msgstr "Criptografía" @@ -401,7 +401,7 @@ msgstr "Criptografía" msgid "Containers" msgstr "Contenedores" -#: src/SUMMARY.md:96 src/stdlib/overview.md:49 src/stdlib/utilities.md:1 +#: src/SUMMARY.md:96 src/stdlib/overview.md:48 src/stdlib/utilities.md:1 #: src/cli/perry-toml.md:238 msgid "Utilities" msgstr "Utilidades" @@ -500,7 +500,7 @@ msgstr "Geolocalización y selector de imágenes" msgid "Background Tasks" msgstr "Tareas en segundo plano" -#: src/SUMMARY.md:133 src/ui/menus.md:68 src/stdlib/overview.md:56 +#: src/SUMMARY.md:133 src/ui/menus.md:68 src/stdlib/overview.md:55 msgid "Other" msgstr "Otros" @@ -582,155 +582,190 @@ msgid "CI Tiers (PR gate / sweep / full)" msgstr "Niveles de CI (comprobación de PR / barrido / suite completa)" #: src/SUMMARY.md:161 -msgid "Claude Code Bundle Parity" +msgid "Perry CLI Performance Reports (tak)" msgstr "" #: src/SUMMARY.md:162 +msgid "Claude Code Bundle Parity" +msgstr "" + +#: src/SUMMARY.md:163 msgid "CI Gate Scheduling" msgstr "Programación de comprobaciones de CI" -#: src/SUMMARY.md:163 +#: src/SUMMARY.md:164 msgid "Linux Incident Capture" msgstr "" -#: src/SUMMARY.md:165 +#: src/SUMMARY.md:166 msgid "CLI Reference" msgstr "Referencia de la CLI" -#: src/SUMMARY.md:167 +#: src/SUMMARY.md:168 msgid "Commands" msgstr "Comandos" -#: src/SUMMARY.md:168 src/cli/flags.md:1 +#: src/SUMMARY.md:169 src/cli/flags.md:1 msgid "Compiler Flags" msgstr "Flags del compilador" -#: src/SUMMARY.md:169 +#: src/SUMMARY.md:170 +#, fuzzy +msgid "Source-level Debugging" +msgstr "pin a nivel de proceso" + +#: src/SUMMARY.md:171 msgid "Cache Directory" msgstr "Directorio de caché" -#: src/SUMMARY.md:170 +#: src/SUMMARY.md:172 msgid "Fast-math (`--fast-math`)" msgstr "Fast-math (`--fast-math`)" -#: src/SUMMARY.md:171 +#: src/SUMMARY.md:173 +msgid "Function Order (`--function-order`)" +msgstr "" + +#: src/SUMMARY.md:174 msgid "Dynamic Stdlib Dispatch" msgstr "Despacho Dinámico de Stdlib" -#: src/SUMMARY.md:172 +#: src/SUMMARY.md:175 msgid "JS Runtime Opt-In" msgstr "Habilitación del Runtime JS" -#: src/SUMMARY.md:173 src/cli/sandbox-buildrs.md:1 +#: src/SUMMARY.md:176 src/cli/sandbox-buildrs.md:1 msgid "`PERRY_SANDBOX_BUILDRS`" msgstr "`PERRY_SANDBOX_BUILDRS`" -#: src/SUMMARY.md:174 src/cli/emit-attest.md:1 +#: src/SUMMARY.md:177 src/cli/emit-attest.md:1 msgid "`--emit-attest` (binary attestation sidecar)" msgstr "`--emit-attest` (sidecar de atestación binaria)" -#: src/SUMMARY.md:175 src/cli/flags.md:426 +#: src/SUMMARY.md:178 src/cli/flags.md:428 msgid "`--emit-sandbox`" msgstr "`--emit-sandbox`" -#: src/SUMMARY.md:176 src/cli/flags.md:427 +#: src/SUMMARY.md:179 src/cli/flags.md:429 msgid "`--lockdown`" msgstr "`--lockdown`" -#: src/SUMMARY.md:177 +#: src/SUMMARY.md:180 msgid "Egress Allowlist (`allowedHosts`)" msgstr "Lista de Permitidos de Egress (`allowedHosts`)" -#: src/SUMMARY.md:178 src/cli/capabilities.md:1 +#: src/SUMMARY.md:181 src/cli/capabilities.md:1 msgid "Per-Package Capabilities (`perry.permissions`)" msgstr "Capacidades por Paquete (`perry.permissions`)" -#: src/SUMMARY.md:179 +#: src/SUMMARY.md:182 msgid "`perry audit --sbom`" msgstr "`perry audit --sbom`" -#: src/SUMMARY.md:180 +#: src/SUMMARY.md:183 msgid "Host Allowlist (nativeLibrary, compilePackages)" msgstr "Lista de Permitidos del Host (nativeLibrary, compilePackages)" -#: src/SUMMARY.md:181 src/cli/perry-toml.md:1 +#: src/SUMMARY.md:184 src/cli/perry-toml.md:1 msgid "perry.toml Reference" msgstr "Referencia de perry.toml" -#: src/SUMMARY.md:182 src/cli/updates.md:1 +#: src/SUMMARY.md:185 src/cli/updates.md:1 msgid "Updates" msgstr "Updates" -#: src/SUMMARY.md:183 +#: src/SUMMARY.md:186 msgid "Update Checks in Your Apps" msgstr "Comprobaciones de actualizaciones en tus aplicaciones" -#: src/SUMMARY.md:184 src/cli/telemetry.md:1 +#: src/SUMMARY.md:187 src/cli/telemetry.md:1 msgid "Privacy & Telemetry" msgstr "Privacidad y Telemetría" -#: src/SUMMARY.md:188 +#: src/SUMMARY.md:191 msgid "Internals" msgstr "Aspectos Internos" -#: src/SUMMARY.md:190 src/internals/memory-model.md:1 +#: src/SUMMARY.md:193 src/internals/memory-model.md:1 msgid "Memory Model" msgstr "Modelo de Memoria" -#: src/SUMMARY.md:191 src/internals/regexp-program-cache.md:1 +#: src/SUMMARY.md:194 src/internals/retained-function-source.md:1 +msgid "Retained function source" +msgstr "" + +#: src/SUMMARY.md:195 src/internals/regexp-program-cache.md:1 msgid "RegExp program ownership and caching" msgstr "" -#: src/SUMMARY.md:192 +#: src/SUMMARY.md:196 src/internals/weakmap-owned-index-design.md:1 +msgid "WeakMap lookup and owned identity storage" +msgstr "" + +#: src/SUMMARY.md:197 +#, fuzzy +msgid "Implementation validation" +msgstr "Estado de la aplicación" + +#: src/SUMMARY.md:198 msgid "Garbage Collector" msgstr "Recolector de basura" -#: src/SUMMARY.md:193 src/internals/explicit-memory.md:1 +#: src/SUMMARY.md:199 src/internals/explicit-memory.md:1 msgid "Explicit Memory Control" msgstr "Gestión explícita de memoria" -#: src/SUMMARY.md:194 src/internals/gc-rooting-invariant.md:1 +#: src/SUMMARY.md:200 src/internals/gc-rooting-invariant.md:1 msgid "The GC rooting invariant (codegen)" msgstr "La invariante de enraizamiento del GC (generación de código)" -#: src/SUMMARY.md:195 src/internals/local-binding-type-evidence.md:1 +#: src/SUMMARY.md:201 src/internals/local-binding-type-evidence.md:1 msgid "Local binding type evidence" msgstr "Evidencia de tipo para bindings locales" -#: src/SUMMARY.md:196 src/internals/codegen-mechanisms.md:1 +#: src/SUMMARY.md:202 src/internals/codegen-mechanisms.md:1 msgid "Codegen mechanisms and workload evidence" msgstr "" -#: src/SUMMARY.md:197 +#: src/SUMMARY.md:203 msgid "Incremental GC step bounds" msgstr "Límites de los pasos del GC incremental" -#: src/SUMMARY.md:198 src/internals/rfc-rooting-by-construction.md:1 +#: src/SUMMARY.md:204 src/internals/rfc-rooting-by-construction.md:1 msgid "RFC: rooting by construction" msgstr "RFC: enraizamiento por construcción" -#: src/SUMMARY.md:199 src/internals/node-api-host.md:1 +#: src/SUMMARY.md:205 src/internals/node-api-host.md:1 msgid "Node-API host design" msgstr "Node-API host design" -#: src/SUMMARY.md:201 +#: src/SUMMARY.md:206 src/internals/fallback-diagnostics.md:1 +#, fuzzy +msgid "Generic fallback diagnostics" +msgstr "Semántica de objeto general" + +#: src/SUMMARY.md:208 msgid "Contributing" msgstr "Contribuir" -#: src/SUMMARY.md:203 src/platforms/watchos.md:25 src/platforms/harmonyos.md:5 +#: src/SUMMARY.md:210 src/platforms/watchos.md:25 src/platforms/harmonyos.md:5 #: src/testing/geisterhand.md:683 src/contributing/architecture.md:1 msgid "Architecture" msgstr "Arquitectura" -#: src/SUMMARY.md:204 src/contributing/crate-policy.md:1 +#: src/SUMMARY.md:211 src/contributing/crate-policy.md:1 msgid "Crate policy" msgstr "Política de crates" -#: src/SUMMARY.md:205 src/contributing/building.md:1 +#: src/SUMMARY.md:212 src/contributing/building.md:1 msgid "Building from Source" msgstr "Compilar desde el código fuente" -#: src/SUMMARY.md:206 src/contributing/releasing.md:1 +#: src/SUMMARY.md:213 src/contributing/build-storage.md:1 +msgid "Linux agent build storage" +msgstr "" + +#: src/SUMMARY.md:214 src/contributing/releasing.md:1 msgid "Releasing Perry" msgstr "Publicar una versión de Perry" @@ -995,21 +1030,21 @@ msgstr "" #: src/introduction.md:96 src/getting-started/hello-world.md:155 #: src/getting-started/first-app.md:184 -#: src/getting-started/project-config.md:325 +#: src/getting-started/project-config.md:327 #: src/language/supported-features.md:631 src/language/type-system.md:149 #: src/language/limitations.md:393 src/threading/overview.md:350 #: src/ui/overview.md:239 src/ui/widgets.md:706 src/ui/layout.md:393 #: src/ui/styling.md:387 src/ui/state.md:226 src/ui/events.md:167 #: src/ui/canvas.md:93 src/ui/menus.md:119 src/ui/tray.md:106 -#: src/ui/dialogs.md:166 src/ui/table.md:150 src/ui/animation.md:71 +#: src/ui/dialogs.md:166 src/ui/table.md:158 src/ui/animation.md:71 #: src/ui/multi-window.md:158 src/ui/theming.md:166 src/ui/camera.md:143 #: src/ui/webview.md:239 src/platforms/overview.md:80 src/platforms/macos.md:86 #: src/platforms/ios.md:207 src/platforms/tvos.md:180 -#: src/platforms/watchos.md:316 src/platforms/android.md:92 +#: src/platforms/watchos.md:316 src/platforms/android.md:97 #: src/platforms/wearos.md:208 src/platforms/windows.md:144 #: src/platforms/linux.md:84 src/platforms/web.md:21 src/platforms/wasm.md:191 -#: src/stdlib/overview.md:129 src/stdlib/fs.md:98 src/stdlib/http.md:408 -#: src/stdlib/database.md:107 src/stdlib/crypto.md:87 +#: src/stdlib/overview.md:128 src/stdlib/fs.md:98 src/stdlib/http.md:408 +#: src/stdlib/database.md:112 src/stdlib/crypto.md:87 #: src/stdlib/utilities.md:96 src/stdlib/other.md:333 src/i18n/overview.md:108 #: src/updater/overview.md:445 src/system/overview.md:77 #: src/system/preferences.md:44 src/system/keychain.md:35 @@ -1020,8 +1055,8 @@ msgstr "" #: src/plugins/overview.md:96 src/plugins/creating-plugins.md:162 #: src/plugins/hooks-and-events.md:144 src/plugins/native-extensions.md:324 #: src/plugins/appstore-review.md:199 src/cli/commands.md:437 -#: src/cli/flags.md:541 src/contributing/architecture.md:100 -#: src/contributing/building.md:179 +#: src/cli/flags.md:545 src/contributing/architecture.md:109 +#: src/contributing/building.md:201 msgid "Next Steps" msgstr "Próximos pasos" @@ -1204,7 +1239,8 @@ msgstr "" #: src/system/background.md:78 src/system/other.md:18 src/system/other.md:35 #: src/widgets/data-fetching.md:142 src/widgets/platforms.md:14 #: src/plugins/native-extensions.md:298 src/testing/geisterhand.md:257 -#: src/cli/flags.md:96 src/contributing/releasing.md:149 +#: src/cli/flags.md:96 src/cli/function-order.md:54 +#: src/contributing/releasing.md:168 msgid "Platform" msgstr "Plataforma" @@ -1820,7 +1856,10 @@ msgstr "" "```" #: src/getting-started/hello-world.md:98 -msgid "Perry compiles async/await to a native async runtime backed by Tokio." +#, fuzzy +msgid "" +"Perry compiles async/await to native code driven by its own event loop " +"(turnloop)." msgstr "" "Perry compila async/await a un runtime asíncrono nativo respaldado por Tokio." @@ -1928,12 +1967,15 @@ msgid "The result is a standalone executable with no external dependencies." msgstr "El resultado es un ejecutable autónomo sin dependencias externas." #: src/getting-started/hello-world.md:144 -#: src/getting-started/hello-world.md:146 src/stdlib/overview.md:74 -#: src/stdlib/overview.md:78 +#: src/getting-started/hello-world.md:146 src/stdlib/overview.md:73 +#: src/stdlib/overview.md:77 msgid "Binary Size" msgstr "Tamaño del binario" #: src/getting-started/hello-world.md:146 +#: src/internals/weakmap-owned-index-design.md:60 +#: src/internals/weakmap-owned-index-validation.md:71 +#: src/internals/weakmap-owned-index-validation.md:93 msgid "Program" msgstr "Programa" @@ -1941,7 +1983,7 @@ msgstr "Programa" msgid "Hello world" msgstr "Hello world" -#: src/getting-started/hello-world.md:148 src/stdlib/overview.md:80 +#: src/getting-started/hello-world.md:148 src/stdlib/overview.md:79 msgid "~300KB" msgstr "~300KB" @@ -1950,7 +1992,7 @@ msgid "CLI with fs/path" msgstr "CLI con fs/path" #: src/getting-started/hello-world.md:149 -#: src/getting-started/hello-world.md:150 src/stdlib/overview.md:81 +#: src/getting-started/hello-world.md:150 src/stdlib/overview.md:80 msgid "~3MB" msgstr "~3MB" @@ -1962,7 +2004,7 @@ msgstr "Aplicación de UI" msgid "Full app with stdlib" msgstr "Aplicación completa con stdlib" -#: src/getting-started/hello-world.md:151 src/stdlib/overview.md:82 +#: src/getting-started/hello-world.md:151 src/stdlib/overview.md:81 msgid "~48MB" msgstr "~48MB" @@ -2418,8 +2460,8 @@ msgstr "" #: src/getting-started/project-config.md:26 #: src/native-libraries/overview.md:131 src/native-libraries/overview.md:136 -#: src/native-libraries/authoring-guide.md:119 -#: src/native-libraries/authoring-guide.md:128 +#: src/native-libraries/authoring-guide.md:121 +#: src/native-libraries/authoring-guide.md:130 #: src/native-libraries/manifest-v1.md:156 #: src/native-libraries/manifest-v1.md:159 #: src/native-libraries/manifest-v1.md:160 @@ -2430,7 +2472,7 @@ msgstr "" #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 src/plugins/native-extensions.md:58 #: src/plugins/native-extensions.md:64 src/plugins/appstore-review.md:190 -#: src/cli/app-updates.md:23 +#: src/cli/debugging.md:42 src/cli/app-updates.md:23 msgid "\"name\"" msgstr "\"nombre\"" @@ -2439,7 +2481,7 @@ msgid "\"my-project\"" msgstr "\"Mi proyecto\"" #: src/getting-started/project-config.md:27 -#: src/native-libraries/authoring-guide.md:120 +#: src/native-libraries/authoring-guide.md:122 #: src/native-libraries/manifest-v1.md:385 #: src/native-libraries/manifest-v1.md:513 src/plugins/native-extensions.md:59 #: src/cli/emit-attest.md:61 src/cli/perry-audit-sbom.md:47 @@ -2448,7 +2490,7 @@ msgid "\"version\"" msgstr "\"versión\"" #: src/getting-started/project-config.md:27 -#: src/native-libraries/authoring-guide.md:120 +#: src/native-libraries/authoring-guide.md:122 #: src/plugins/native-extensions.md:59 msgid "\"0.1.0\"" msgstr "\"0.1.0\"" @@ -2458,7 +2500,7 @@ msgid "\"private\"" msgstr "\"privado\"" #: src/getting-started/project-config.md:29 -#: src/native-libraries/authoring-guide.md:121 +#: src/native-libraries/authoring-guide.md:123 #: src/plugins/native-extensions.md:60 msgid "\"main\"" msgstr "\"main\"" @@ -2475,15 +2517,15 @@ msgstr "\"src/main.ts\"" #: src/getting-started/project-config.md:184 #: src/getting-started/project-config.md:197 #: src/getting-started/project-config.md:218 src/packages/porting.md:84 -#: src/native-libraries/authoring-guide.md:123 -#: src/native-libraries/authoring-guide.md:271 -#: src/native-libraries/authoring-guide.md:296 src/native-libraries/abi.md:49 +#: src/native-libraries/authoring-guide.md:125 +#: src/native-libraries/authoring-guide.md:273 +#: src/native-libraries/authoring-guide.md:298 src/native-libraries/abi.md:49 #: src/native-libraries/manifest-v1.md:31 #: src/native-libraries/manifest-v1.md:514 #: src/native-libraries/zero-config-and-faithfulness.md:25 #: src/platforms/ios.md:168 src/platforms/ios.md:181 -#: src/platforms/android.md:57 src/platforms/android.md:72 -#: src/stdlib/overview.md:113 src/stdlib/http.md:186 src/stdlib/http.md:349 +#: src/platforms/android.md:62 src/platforms/android.md:77 +#: src/stdlib/overview.md:112 src/stdlib/http.md:186 src/stdlib/http.md:349 #: src/plugins/native-extensions.md:61 src/plugins/appstore-review.md:187 #: src/cli/fast-math.md:34 src/cli/dynamic-dispatch.md:101 #: src/cli/dynamic-dispatch.md:117 src/cli/allow-js-runtime.md:44 @@ -2492,7 +2534,8 @@ msgstr "\"src/main.ts\"" #: src/cli/capabilities.md:28 src/cli/allow-perry-features.md:52 #: src/cli/allow-perry-features.md:69 src/cli/allow-perry-features.md:83 #: src/cli/app-updates.md:25 src/cli/app-updates.md:140 -#: src/cli/app-updates.md:151 src/internals/node-api-host.md:438 +#: src/cli/app-updates.md:151 src/internals/node-api-host.md:450 +#: src/internals/node-api-host.md:507 msgid "\"perry\"" msgstr "\"Perry\"" @@ -2501,7 +2544,7 @@ msgstr "\"Perry\"" #: src/getting-started/project-config.md:86 #: src/getting-started/project-config.md:87 src/packages/porting.md:85 #: src/native-libraries/zero-config-and-faithfulness.md:26 -#: src/stdlib/overview.md:114 src/stdlib/http.md:187 src/stdlib/http.md:350 +#: src/stdlib/overview.md:113 src/stdlib/http.md:187 src/stdlib/http.md:350 #: src/cli/allow-perry-features.md:53 src/cli/allow-perry-features.md:56 #: src/cli/allow-perry-features.md:71 src/cli/allow-perry-features.md:83 msgid "\"compilePackages\"" @@ -2548,11 +2591,11 @@ msgstr "" #: src/getting-started/project-config.md:53 msgid "" -"The existing `\"jsx\": \"solid\"` selects `perry-solid`; `\"jsx\": \"default" -"\"` disables automatic Solid detection. A host setting overrides per-file " -"detection. The equivalent TOML setting is `[perry]` with `jsx = { runtime = " -"\"@opentui/solid\" }`; TOML overrides the host's package setting. React/" -"Preact import sources keep their existing JSX behavior." +"The existing `\"jsx\": \"solid\"` selects `perry-solid`; `\"jsx\": " +"\"default\"` disables automatic Solid detection. A host setting overrides " +"per-file detection. The equivalent TOML setting is `[perry]` with `jsx = " +"{ runtime = \"@opentui/solid\" }`; TOML overrides the host's package " +"setting. React/Preact import sources keep their existing JSX behavior." msgstr "" #: src/getting-started/project-config.md:59 @@ -2578,13 +2621,13 @@ msgstr "" #: src/getting-started/project-config.md:71 #: src/getting-started/project-config.md:86 src/packages/porting.md:85 -#: src/stdlib/overview.md:114 +#: src/stdlib/overview.md:113 msgid "\"@noble/curves\"" msgstr "\"@noble/curves\"" #: src/getting-started/project-config.md:71 #: src/getting-started/project-config.md:86 src/packages/porting.md:85 -#: src/stdlib/overview.md:114 +#: src/stdlib/overview.md:113 msgid "\"@noble/hashes\"" msgstr "\"@noble/hashes\"" @@ -2594,8 +2637,8 @@ msgid "" "Compiling third-party TypeScript into your binary is a privileged operation, " "so every entry in `compilePackages` must _also_ be matched by an entry in " "`perry.allow.compilePackages` in the same `package.json` — otherwise the " -"build refuses. Patterns accept exact names, scope wildcards (`\"@scope/*" -"\"`), or the universal `\"*\"`:" +"build refuses. Patterns accept exact names, scope wildcards (`\"@scope/" +"*\"`), or the universal `\"*\"`:" msgstr "" "**Dos-claves de admisión.** La inclusión de un paquete no es suficiente por " "sí sola. Compilar TypeScript de terceros en su binario es una operación " @@ -2959,8 +3002,8 @@ msgstr "**Mínima (ambas plataformas comparten la misma presentación):**" #: src/getting-started/project-config.md:185 #: src/getting-started/project-config.md:198 #: src/getting-started/project-config.md:219 src/platforms/ios.md:169 -#: src/platforms/ios.md:182 src/platforms/android.md:58 -#: src/platforms/android.md:73 +#: src/platforms/ios.md:182 src/platforms/android.md:63 +#: src/platforms/android.md:78 msgid "\"splash\"" msgstr "\"Splash\"" @@ -2968,13 +3011,13 @@ msgstr "\"Splash\"" #: src/getting-started/project-config.md:199 #: src/getting-started/project-config.md:202 #: src/getting-started/project-config.md:206 src/platforms/ios.md:170 -#: src/platforms/android.md:59 +#: src/platforms/android.md:64 msgid "\"image\"" msgstr "\"imagen\"" #: src/getting-started/project-config.md:186 #: src/getting-started/project-config.md:199 src/platforms/ios.md:170 -#: src/platforms/android.md:59 +#: src/platforms/android.md:64 msgid "\"logo/icon-256.png\"" msgstr "\"logo/icon-256.png\"" @@ -2982,13 +3025,13 @@ msgstr "\"logo/icon-256.png\"" #: src/getting-started/project-config.md:200 #: src/getting-started/project-config.md:203 #: src/getting-started/project-config.md:207 src/ui/theming.md:26 -#: src/platforms/ios.md:171 src/platforms/android.md:60 +#: src/platforms/ios.md:171 src/platforms/android.md:65 msgid "\"background\"" msgstr "\"en el fondo\"" #: src/getting-started/project-config.md:187 #: src/getting-started/project-config.md:200 src/platforms/ios.md:171 -#: src/platforms/android.md:60 +#: src/platforms/android.md:65 msgid "\"#FFF5EE\"" msgstr "\"#FFF5EE\"" @@ -2998,7 +3041,7 @@ msgstr "**Sobrescrituras por plataforma:**" #: src/getting-started/project-config.md:201 #: src/getting-started/project-config.md:220 -#: src/native-libraries/authoring-guide.md:299 +#: src/native-libraries/authoring-guide.md:301 #: src/native-libraries/manifest-v1.md:434 src/platforms/ios.md:183 #: src/plugins/native-extensions.md:67 msgid "\"ios\"" @@ -3015,7 +3058,7 @@ msgid "\"#FFFFFF\"" msgstr "\"#FFFFFF\"" #: src/getting-started/project-config.md:205 -#: src/getting-started/project-config.md:223 src/platforms/android.md:74 +#: src/getting-started/project-config.md:223 src/platforms/android.md:79 #: src/plugins/native-extensions.md:72 msgid "\"android\"" msgstr "\"Androide\"" @@ -3036,19 +3079,19 @@ msgstr "\"Storyboard\"" msgid "\"splash/LaunchScreen.storyboard\"" msgstr "\"splash/LaunchScreen.storyboard\"" -#: src/getting-started/project-config.md:224 src/platforms/android.md:75 +#: src/getting-started/project-config.md:224 src/platforms/android.md:80 msgid "\"layout\"" msgstr "\"distribución\"" -#: src/getting-started/project-config.md:224 src/platforms/android.md:75 +#: src/getting-started/project-config.md:224 src/platforms/android.md:80 msgid "\"splash/splash_background.xml\"" msgstr "\"splash/splash_background.xml\"" -#: src/getting-started/project-config.md:225 src/platforms/android.md:76 +#: src/getting-started/project-config.md:225 src/platforms/android.md:81 msgid "\"theme\"" msgstr "\"tema\"" -#: src/getting-started/project-config.md:225 src/platforms/android.md:76 +#: src/getting-started/project-config.md:225 src/platforms/android.md:81 msgid "\"splash/themes.xml\"" msgstr "\"splash/themes.xml\"" @@ -3086,8 +3129,8 @@ msgstr "Campo" #: src/cli/commands.md:268 src/cli/commands.md:283 src/cli/commands.md:295 #: src/cli/flags.md:80 src/cli/flags.md:135 src/cli/flags.md:143 #: src/cli/flags.md:191 src/cli/flags.md:291 src/cli/flags.md:379 -#: src/cli/flags.md:397 src/cli/flags.md:410 src/cli/flags.md:417 -#: src/cli/flags.md:431 src/cli/perry-toml.md:117 src/cli/perry-toml.md:128 +#: src/cli/flags.md:399 src/cli/flags.md:412 src/cli/flags.md:419 +#: src/cli/flags.md:435 src/cli/perry-toml.md:117 src/cli/perry-toml.md:128 #: src/cli/perry-toml.md:156 src/cli/perry-toml.md:172 #: src/cli/perry-toml.md:182 src/cli/perry-toml.md:188 #: src/cli/perry-toml.md:198 src/cli/perry-toml.md:248 @@ -3220,10 +3263,15 @@ msgid "" "// requires: auto-optimize\n" "// run: false\n" "\n" -"// These four imports are Perry's most-used built-in stdlib shims:\n" -"// fastify (HTTP server), mysql2 (db), ioredis (Redis), bcrypt (password\n" -"// hashing). They're compiled to native code via Perry's per-package\n" -"// implementations — no `compilePackages` needed.\n" +"// Four common npm packages: fastify (HTTP server), mysql2 (db), ioredis\n" +"// (Redis), bcrypt (password hashing). With no `perry.compilePackages` " +"entry,\n" +"// Perry compiles each installed package's real source to native code " +"(bcrypt,\n" +"// a Node native addon, routes to Perry's perry-ext-bcrypt wrapper). They " +"must\n" +"// be installed: the doc-tests job runs `npm ci` at the repo root, whose\n" +"// devDependencies list them.\n" "//\n" "// `// run: false` because each one needs a live external service (DB,\n" "// Redis, network port) to actually do anything; the binary still has to\n" @@ -3272,7 +3320,7 @@ msgstr "" "console.log(typeof app, typeof db, typeof redis, hashed.length)\n" "```" -#: src/getting-started/project-config.md:283 +#: src/getting-started/project-config.md:285 msgid "" "These are compiled to native code using Perry's built-in implementations. " "See [Standard Library](../stdlib/overview.md) for the full list." @@ -3281,7 +3329,7 @@ msgstr "" "de Perry. Consulta [Biblioteca estándar](../stdlib/overview.md) para ver la " "lista completa." -#: src/getting-started/project-config.md:285 +#: src/getting-started/project-config.md:287 msgid "" "For packages not natively supported, use `compilePackages` for pure TS/JS " "packages, or the JavaScript runtime fallback for complex packages." @@ -3290,51 +3338,51 @@ msgstr "" "paquetes puros de TS/JS, o el respaldo del runtime de JavaScript para " "paquetes complejos." -#: src/getting-started/project-config.md:287 src/contributing/building.md:155 +#: src/getting-started/project-config.md:289 src/contributing/building.md:177 msgid "Project Structure" msgstr "Estructura del proyecto" -#: src/getting-started/project-config.md:289 +#: src/getting-started/project-config.md:291 msgid "Perry is flexible about project structure. Common patterns:" msgstr "" "Perry es flexible respecto a la estructura del proyecto. Patrones comunes:" -#: src/getting-started/project-config.md:299 +#: src/getting-started/project-config.md:301 msgid "For UI apps:" msgstr "Para aplicaciones de UI:" -#: src/getting-started/project-config.md:310 src/widgets/watchos.md:60 +#: src/getting-started/project-config.md:312 src/widgets/watchos.md:60 #: src/widgets/wearos.md:61 msgid "Compilation" msgstr "Compilación" -#: src/getting-started/project-config.md:313 +#: src/getting-started/project-config.md:315 #, fuzzy msgid "# Compile a file\n" msgstr "# Compilar un archivo" -#: src/getting-started/project-config.md:315 +#: src/getting-started/project-config.md:317 #, fuzzy msgid "# Compile with a specific target\n" msgstr "# Compilar con un objetivo específico" -#: src/getting-started/project-config.md:318 +#: src/getting-started/project-config.md:320 #, fuzzy msgid "# Debug: print intermediate representation\n" msgstr "# Debug: imprimir representación intermedia" -#: src/getting-started/project-config.md:323 +#: src/getting-started/project-config.md:325 msgid "See [CLI Commands](../cli/commands.md) for all options." msgstr "" "Consulta [Comandos de CLI](../cli/commands.md) para todas las opciones." -#: src/getting-started/project-config.md:327 +#: src/getting-started/project-config.md:329 msgid "[CLI Commands](../cli/commands.md) — All compiler commands and flags" msgstr "" "[Comandos de CLI](../cli/commands.md) — Todos los comandos y opciones del " "compilador" -#: src/getting-started/project-config.md:328 +#: src/getting-started/project-config.md:330 msgid "" "[Supported Features](../language/supported-features.md) — What TypeScript " "features work" @@ -3342,7 +3390,7 @@ msgstr "" "[Características soportadas](../language/supported-features.md) — Qué " "características de TypeScript funcionan" -#: src/getting-started/project-config.md:329 +#: src/getting-started/project-config.md:331 msgid "[Standard Library](../stdlib/overview.md) — Supported npm packages" msgstr "[Biblioteca estándar](../stdlib/overview.md) — Paquetes npm soportados" @@ -3489,13 +3537,13 @@ msgstr "Notificación local" #: src/platforms/windows-7.md:25 src/container/overview.md:71 #: src/container/security.md:105 src/container/determinism.md:59 #: src/testing/geisterhand.md:87 src/testing/geisterhand.md:101 -#: src/cli/flags.md:558 src/cli/flags.md:664 src/cli/flags.md:665 +#: src/cli/flags.md:562 src/cli/flags.md:668 src/cli/flags.md:669 #: src/cli/dynamic-dispatch.md:123 src/cli/allow-js-runtime.md:67 #: src/cli/sandbox-buildrs.md:25 src/cli/sandbox-buildrs.md:53 -#: src/cli/perry-toml.md:431 src/internals/gc-rooting-invariant.md:258 +#: src/cli/perry-toml.md:431 src/internals/gc-rooting-invariant.md:285 #: src/internals/codegen-mechanisms.md:56 #: src/internals/rfc-rooting-by-construction.md:354 -#: src/contributing/releasing.md:183 +#: src/contributing/releasing.md:202 msgid "1" msgstr "1" @@ -3617,8 +3665,8 @@ msgid "" " // Arrow functions\n" " const double = (x: number) => x * 2;\n" "\n" -" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} sum=" -"${sum(1, 2, 3)} double=${double(5)}`)\n" +" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} " +"sum=${sum(1, 2, 3)} double=${double(5)}`)\n" "}\n" "```" msgstr "" @@ -3641,23 +3689,23 @@ msgstr "" " // Arrow functions\n" " const double = (x: number) => x * 2;\n" "\n" -" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} sum=" -"${sum(1, 2, 3)} double=${double(5)}`)\n" +" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} " +"sum=${sum(1, 2, 3)} double=${double(5)}`)\n" "}\n" "```" #: src/language/supported-features.md:60 src/api/reference.md:223 #: src/api/reference.md:257 src/api/reference.md:291 src/api/reference.md:349 -#: src/api/reference.md:373 src/api/reference.md:460 src/api/reference.md:507 -#: src/api/reference.md:528 src/api/reference.md:553 src/api/reference.md:828 -#: src/api/reference.md:911 src/api/reference.md:959 src/api/reference.md:979 -#: src/api/reference.md:1088 src/api/reference.md:1166 -#: src/api/reference.md:1205 src/api/reference.md:1254 -#: src/api/reference.md:1282 src/api/reference.md:1443 -#: src/api/reference.md:1651 src/api/reference.md:1674 -#: src/api/reference.md:1728 src/api/reference.md:1759 -#: src/api/reference.md:1813 src/api/reference.md:1876 -#: src/api/reference.md:2008 src/api/reference.md:2150 +#: src/api/reference.md:373 src/api/reference.md:462 src/api/reference.md:509 +#: src/api/reference.md:530 src/api/reference.md:555 src/api/reference.md:830 +#: src/api/reference.md:913 src/api/reference.md:961 src/api/reference.md:981 +#: src/api/reference.md:1090 src/api/reference.md:1168 +#: src/api/reference.md:1207 src/api/reference.md:1256 +#: src/api/reference.md:1284 src/api/reference.md:1445 +#: src/api/reference.md:1653 src/api/reference.md:1676 +#: src/api/reference.md:1730 src/api/reference.md:1761 +#: src/api/reference.md:1815 src/api/reference.md:1859 +#: src/api/reference.md:1993 src/api/reference.md:2135 #: src/api/reference.md:2371 src/api/reference.md:2860 #: src/api/reference.md:2873 src/api/reference.md:2944 #: src/api/reference.md:3006 src/api/reference.md:3115 @@ -3880,11 +3928,11 @@ msgid "" " console.log(item);\n" " }\n" "\n" -" console.log(`arrays: len=${len} doubled=${doubled.length} filtered=" -"${filtered.length} sum=${sum} found=${found} idx=${idx} joined=${joined} " -"sliced=${sliced.length} sorted=${sorted.length} reversed=${reversed.length} " -"includes=${includes} every=${every} some=${some} flat=${flat.length} " -"concatted=${concatted.length} arr=${arr.length}`)\n" +" console.log(`arrays: len=${len} doubled=${doubled.length} " +"filtered=${filtered.length} sum=${sum} found=${found} idx=${idx} " +"joined=${joined} sliced=${sliced.length} sorted=${sorted.length} " +"reversed=${reversed.length} includes=${includes} every=${every} some=${some} " +"flat=${flat.length} concatted=${concatted.length} arr=${arr.length}`)\n" "}\n" "```" msgstr "" @@ -3926,11 +3974,11 @@ msgstr "" " console.log(item);\n" " }\n" "\n" -" console.log(`arrays: len=${len} doubled=${doubled.length} filtered=" -"${filtered.length} sum=${sum} found=${found} idx=${idx} joined=${joined} " -"sliced=${sliced.length} sorted=${sorted.length} reversed=${reversed.length} " -"includes=${includes} every=${every} some=${some} flat=${flat.length} " -"concatted=${concatted.length} arr=${arr.length}`)\n" +" console.log(`arrays: len=${len} doubled=${doubled.length} " +"filtered=${filtered.length} sum=${sum} found=${found} idx=${idx} " +"joined=${joined} sliced=${sliced.length} sorted=${sorted.length} " +"reversed=${reversed.length} includes=${includes} every=${every} some=${some} " +"flat=${flat.length} concatted=${concatted.length} arr=${arr.length}`)\n" "}\n" "```" @@ -4023,8 +4071,8 @@ msgid "" " }\n" "\n" " process(user)\n" -" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} name=" -"${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" +" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} " +"name=${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" "}\n" "```" msgstr "" @@ -4052,8 +4100,8 @@ msgstr "" " }\n" "\n" " process(user)\n" -" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} name=" -"${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" +" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} " +"name=${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" "}\n" "```" @@ -4073,8 +4121,8 @@ msgid "" "`;\n" " const expr = `Result: ${1 + 2}`;\n" "\n" -" console.log(`template-literals: greeting=${greeting} multiline_len=" -"${multiline.length} expr=${expr}`)\n" +" console.log(`template-literals: greeting=${greeting} " +"multiline_len=${multiline.length} expr=${expr}`)\n" "}\n" "```" msgstr "" @@ -4088,8 +4136,8 @@ msgstr "" "`;\n" " const expr = `Result: ${1 + 2}`;\n" "\n" -" console.log(`template-literals: greeting=${greeting} multiline_len=" -"${multiline.length} expr=${expr}`)\n" +" console.log(`template-literals: greeting=${greeting} " +"multiline_len=${multiline.length} expr=${expr}`)\n" "}\n" "```" @@ -4227,9 +4275,10 @@ msgstr "" "```" #: src/language/supported-features.md:319 +#, fuzzy msgid "" -"Perry compiles async functions to a state machine backed by Tokio's async " -"runtime." +"Perry compiles async functions to a state machine driven by its own event " +"loop (turnloop)." msgstr "" "Perry compila las funciones async a una máquina de estados respaldada por el " "runtime asíncrono de Tokio." @@ -5461,8 +5510,8 @@ msgstr "" #: src/language/native-values.md:90 msgid "" "```typescript,no-test\n" -"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/native" -"\";\n" +"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/" +"native\";\n" "\n" "const delta = i8(dynamicDelta);\n" "const offset16 = i16(dynamicOffset);\n" @@ -5476,8 +5525,8 @@ msgid "" "```" msgstr "" "```typescript,no-test\n" -"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/native" -"\";\n" +"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/" +"native\";\n" "\n" "const delta = i8(dynamicDelta);\n" "const offset16 = i16(dynamicOffset);\n" @@ -6096,8 +6145,8 @@ msgstr "Sin eval() ni código dinámico" msgid "" "Perry compiles to native code ahead of time. It cannot evaluate a code " "string that is only known at runtime. A _constant_ code string is the " -"exception — `eval(\"1 + 1\")` and `new Function(\"a\", \"b\", \"return a + b" -"\")` are compiled to real native functions (#1679). Only a body built from " +"exception — `eval(\"1 + 1\")` and `new Function(\"a\", \"b\", \"return a + " +"b\")` are compiled to real native functions (#1679). Only a body built from " "runtime data hits this limit:" msgstr "" "Perry se compila con el código nativo antes de tiempo. No puede evaluar una " @@ -6385,17 +6434,17 @@ msgid "" "The same strict controls apply to runtime-computed dynamic `import()` " "(#5230). The broad `perry.strict = true` covers both eval and dynamic " "import. For a knob scoped to dynamic imports only, use `--strict-dynamic-" -"import` or `\"perry\": { \"dynamicImport\": \"error\" }` (accepts `\"defer" -"\"` (default) or `\"error\"`); the dedicated knob overrides the broad `perry." -"strict` for import sites. `PERRY_ALLOW_EVAL=1` is the shared AOT escape " -"hatch — it forces defer for both eval and dynamic import." +"import` or `\"perry\": { \"dynamicImport\": \"error\" }` (accepts " +"`\"defer\"` (default) or `\"error\"`); the dedicated knob overrides the " +"broad `perry.strict` for import sites. `PERRY_ALLOW_EVAL=1` is the shared " +"AOT escape hatch — it forces defer for both eval and dynamic import." msgstr "" "Los mismos controles estrictos se aplican a la dinámica `import()` computada " "en tiempo de ejecución (#5230). La amplia `perry.strict = true` cubre tanto " "la importación eval como la dinámica. Para una perilla con alcances de " "importación dinámicos, utilice `--strict-dynamic-import` o `\"perry\": " -"{ \"dynamicImport\": \"error\" }` (acepta `\"defer\"` (por defecto) o `" -"\"error\"`); la perilla dedicada sobrescribe la amplia `perry.strict` para " +"{ \"dynamicImport\": \"error\" }` (acepta `\"defer\"` (por defecto) o " +"`\"error\"`); la perilla dedicada sobrescribe la amplia `perry.strict` para " "sitios de importación. `PERRY_ALLOW_EVAL=1` es la escotilla de escape AOT " "compartida, que obliga a diferir tanto para la importación eval como " "dinámica." @@ -7127,8 +7176,8 @@ msgstr "" #: src/packages/porting.md:35 msgid "" -"Packages that ship `.node` files, `binding.gyp`, `prebuilds/`, or a `" -"\"gypfile\"` package marker are compiled against Node's native addon ABI. " +"Packages that ship `.node` files, `binding.gyp`, `prebuilds/`, or a " +"`\"gypfile\"` package marker are compiled against Node's native addon ABI. " "The JavaScript entry point is usually just loader glue around a shared " "library that expects Node-API/N-API, NAN, V8, libuv, or Node internals. " "Perry does not host that ABI as part of `compilePackages`. Common examples " @@ -7886,7 +7935,7 @@ msgstr "" "exporta la staticlib junto con su firma visible desde TypeScript:" #: src/native-libraries/overview.md:129 -#: src/native-libraries/authoring-guide.md:126 +#: src/native-libraries/authoring-guide.md:128 #: src/native-libraries/manifest-v1.md:517 src/plugins/native-extensions.md:63 #: src/plugins/appstore-review.md:189 msgid "\"functions\"" @@ -7897,7 +7946,7 @@ msgid "\"js_mysql2_create_connection\"" msgstr "\"js_mysql2_create_connection\"" #: src/native-libraries/overview.md:132 src/native-libraries/overview.md:137 -#: src/native-libraries/authoring-guide.md:129 +#: src/native-libraries/authoring-guide.md:131 #: src/native-libraries/manifest-v1.md:518 #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 src/plugins/native-extensions.md:64 @@ -7911,7 +7960,7 @@ msgid "\"jsvalue\"" msgstr "\"jsvalue\"" #: src/native-libraries/overview.md:133 src/native-libraries/overview.md:138 -#: src/native-libraries/authoring-guide.md:130 +#: src/native-libraries/authoring-guide.md:132 #: src/native-libraries/manifest-v1.md:518 #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 src/plugins/native-extensions.md:64 @@ -7933,7 +7982,7 @@ msgid "\"i64\"" msgstr "\"i64\"" #: src/native-libraries/overview.md:137 -#: src/native-libraries/authoring-guide.md:130 +#: src/native-libraries/authoring-guide.md:132 #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 msgid "\"string\"" @@ -8004,12 +8053,13 @@ msgid "5. Runtime" msgstr "5. Ejecución" #: src/native-libraries/overview.md:172 +#, fuzzy msgid "" "User code runs. Calls into `js_mysql2_*` happen at native speed — function " "call overhead is one register-pass for the receiver handle plus one each per " "param. Promise resolution / closure invocation / async work bridge through " -"perry-ffi's surface (`JsPromise`, `JsClosure`, `spawn_blocking + tokio::" -"Handle::current().block_on`). The wrapper sees Perry's NaN-boxed JsValues " +"perry-ffi's surface (`JsPromise`, `JsClosure`, `spawn_blocking` / `pool::" +"submit`, `turnloop_net`). The wrapper sees Perry's NaN-boxed JsValues " "directly; user TypeScript sees a normal Promise / object / array." msgstr "" "El código del usuario se ejecuta. Las llamadas a `js_mysql2_*` ocurren a " @@ -8243,9 +8293,9 @@ msgstr "(c)" #: src/native-libraries/overview.md:253 #, fuzzy msgid "" -"Compatibility path: `import 'mysql2'` / `import 'mongodb'` route to in-tree " -"Rust wrappers. They remain available until the source-package migration " -"gates pass. `pg` has already migrated off this path — see the row below." +"Compatibility path: `import 'mysql2'` routes to an in-tree Rust wrapper. It " +"remains available until the source-package migration gates pass. `pg` and " +"`mongodb` have already migrated off this path — see the row below." msgstr "" "Ruta de compatibilidad: `import 'mysql2'` / `import 'pg'` / `import " "'mongodb'` ruta a envoltorios Rust en árbol. Siguen disponibles hasta que " @@ -8313,18 +8363,18 @@ msgstr "**Cuándo elegir cuál:**" #: src/native-libraries/overview.md:266 #, fuzzy msgid "" -"**Well-known native (`mysql2` / `mongodb`)** — current zero-install " -"compatibility path; its feature set tracks Perry's release cadence and it is " -"scheduled to yield to compiled package source. `pg` no longer has a native " -"binding: a plain `import ... from \"pg\"` compiles the real npm `pg` package " -"from source instead." +"**Well-known native (`mysql2`)** — current zero-install compatibility path; " +"its feature set tracks Perry's release cadence and it is scheduled to yield " +"to compiled package source. `pg` and `mongodb` no longer have a native " +"binding: a plain `import ... from \"pg\"` or `import { MongoClient } from " +"\"mongodb\"` compiles the real npm package from source instead." msgstr "" "**Nativo conocido (`mysql2` / `pg` / `mongodb`)** — ruta de compatibilidad " "actual de ceroinstall; su función establece pistas de la cadencia de " "lanzamiento de Perry y está programado para ceder a la fuente de paquetes " "compilados." -#: src/native-libraries/overview.md:271 +#: src/native-libraries/overview.md:272 msgid "" "**`@perryts/postgres` / `@perryts/mysql` / `@perryts/mongodb` / `@perryts/" "redis`** — you want to read / fork / patch the driver in plain TypeScript; " @@ -8336,7 +8386,7 @@ msgstr "" "plano; quieres que el mismo código funcione en Node.js o Bun como " "alternativa; necesitas una característica antes del próximo release de Perry." -#: src/native-libraries/overview.md:275 +#: src/native-libraries/overview.md:276 msgid "" "**External native binding** — you're wrapping a Rust crate that doesn't have " "a JS-only equivalent (Tursodb's embedded SQLite- compatible engine, Iroh's " @@ -8346,23 +8396,23 @@ msgstr "" "equivalente solo en JS (el motor SQLite embebido compatible de Tursodb, el " "transporte QUIC de Iroh)." -#: src/native-libraries/overview.md:279 +#: src/native-libraries/overview.md:280 msgid "Concrete how-tos" msgstr "Guías concretas" -#: src/native-libraries/overview.md:281 +#: src/native-libraries/overview.md:282 msgid "If you want to …" msgstr "Si quieres …" -#: src/native-libraries/overview.md:281 +#: src/native-libraries/overview.md:282 msgid "Read" msgstr "Lee" -#: src/native-libraries/overview.md:283 +#: src/native-libraries/overview.md:284 msgid "**Use a currently bundled compatibility shim**" msgstr "**Usar un shim de compatibilidad actualmente empaquetado**" -#: src/native-libraries/overview.md:283 +#: src/native-libraries/overview.md:284 msgid "" "`import` it directly, or explicitly select the installed package in `perry." "compilePackages` to exercise the preferred source path." @@ -8370,11 +8420,11 @@ msgstr "" "`import` directamente, o seleccionar explícitamente el paquete instalado en " "`perry.compilePackages` para ejercer la ruta de origen preferida." -#: src/native-libraries/overview.md:284 +#: src/native-libraries/overview.md:285 msgid "**Use a third-party native binding**" msgstr "**Usar un binding nativo de terceros**" -#: src/native-libraries/overview.md:284 +#: src/native-libraries/overview.md:285 msgid "" "`bun add `, then `import`. Perry's resolver finds it via " "`node_modules//package.json`." @@ -8382,19 +8432,19 @@ msgstr "" "`bun add `, luego `import`. El resolver de Perry lo encuentra a " "través de `node_modules//package.json`." -#: src/native-libraries/overview.md:285 +#: src/native-libraries/overview.md:286 msgid "**Find which packages ship out-of-the-box**" msgstr "**Ver qué paquetes se incluyen de serie**" -#: src/native-libraries/overview.md:285 src/cli/commands.md:416 +#: src/native-libraries/overview.md:286 src/cli/commands.md:416 msgid "`perry native list`" msgstr "`perry native list`" -#: src/native-libraries/overview.md:286 +#: src/native-libraries/overview.md:287 msgid "**Write your own native binding**" msgstr "**Escribir tu propio binding nativo**" -#: src/native-libraries/overview.md:286 +#: src/native-libraries/overview.md:287 msgid "" "`perry native init my-bindings` scaffolds the Cargo crate + `package.json` + " "`release.yml` for prebuilds. Then read [`abi.md`](abi.md) for the perry-ffi " @@ -8405,11 +8455,11 @@ msgstr "" "superficie de perry-ffi y [`manifest-v1.md`](manifest-v1.md) para el esquema " "del manifiesto." -#: src/native-libraries/overview.md:287 +#: src/native-libraries/overview.md:288 msgid "**Verify your binding's manifest matches its `.a`**" msgstr "**Verificar que el manifiesto de tu binding coincide con su `.a`**" -#: src/native-libraries/overview.md:287 +#: src/native-libraries/overview.md:288 msgid "" "`cd my-bindings && perry native validate` (runs `cargo build --release`, " "walks `nm -gP` over the staticlib, diffs against `functions[]`, reports " @@ -8419,11 +8469,11 @@ msgstr "" "recorre `nm -gP` sobre la staticlib, compara con `functions[]` e informa los " "símbolos faltantes o no declarados)." -#: src/native-libraries/overview.md:288 +#: src/native-libraries/overview.md:289 msgid "**Override a well-known binding**" msgstr "**Sobreescribir un binding conocido**" -#: src/native-libraries/overview.md:288 +#: src/native-libraries/overview.md:289 msgid "" "Install your fork into `node_modules//` with a `perry.nativeLibrary` " "block. Resolution layer (a) wins over layer (c)." @@ -8431,11 +8481,11 @@ msgstr "" "Instala tu fork en `node_modules//` con un bloque `perry." "nativeLibrary`. La capa de resolución (a) tiene prioridad sobre la capa (c)." -#: src/native-libraries/overview.md:289 +#: src/native-libraries/overview.md:290 msgid "**See what stdlib APIs Perry implements**" msgstr "**Ver qué APIs de stdlib implementa Perry**" -#: src/native-libraries/overview.md:289 +#: src/native-libraries/overview.md:290 msgid "" "Auto-generated from the manifest: [`docs/src/api/reference.md`](../api/" "reference.md). The `perry types` command writes a current snapshot to `." @@ -8446,20 +8496,20 @@ msgstr "" "actualizada en `.perry/types/stdlib/index.d.ts` para los indicadores del " "editor." -#: src/native-libraries/overview.md:291 +#: src/native-libraries/overview.md:292 msgid "Authoring a binding — the 60-second tour" msgstr "Cómo crear un binding — tour de 60 segundos" -#: src/native-libraries/overview.md:294 +#: src/native-libraries/overview.md:295 #, fuzzy msgid "# Scaffold\n" msgstr "# Scaffold" -#: src/native-libraries/overview.md:295 +#: src/native-libraries/overview.md:296 msgid "\"PDF rendering bindings\"" msgstr "\"PDF rendering bindings\"" -#: src/native-libraries/overview.md:321 +#: src/native-libraries/overview.md:322 msgid "" "A user can now `bun add my-pdf` and `import { renderPdf } from \"my-pdf\"` " "in their Perry program." @@ -8467,11 +8517,11 @@ msgstr "" "El usuario ahora puede ejecutar `bun add my-pdf` y usar `import " "{ renderPdf } from \"my-pdf\"` en su programa Perry." -#: src/native-libraries/overview.md:324 +#: src/native-libraries/overview.md:325 msgid "Versioning policy" msgstr "Política de versiones" -#: src/native-libraries/overview.md:326 +#: src/native-libraries/overview.md:327 msgid "" "**`perry-ffi`** semver: tracks Perry's minor today (`perry-ffi = \"0.5\"` " "for Perry `0.5.x`). Backwards-incompatible changes to anything documented in " @@ -8486,7 +8536,7 @@ msgstr "" "probada de Perry `0.5.x` de la caja; véase [Consumo actual](#consumption-" "today-v05x)." -#: src/native-libraries/overview.md:331 +#: src/native-libraries/overview.md:332 msgid "" "**Manifest spec v1**: locked at `abiVersion: \"0.5\"`; missing field is " "warning-only in v0.5.x, hard error from v0.6.0. Schema changes bump the spec " @@ -8497,7 +8547,7 @@ msgstr "" "v0.6.0. Los cambios en el esquema incrementan la versión de la spec (`v2`) y " "se publican junto con un nuevo archivo de esquema de manifiesto." -#: src/native-libraries/overview.md:335 +#: src/native-libraries/overview.md:336 msgid "" "**Wrappers**: each ships independent semver; users `bun update` a binding " "without touching Perry." @@ -8505,11 +8555,11 @@ msgstr "" "**Wrappers**: cada uno publica su propio semver independiente; los usuarios " "actualizan un binding con `bun update` sin tocar Perry." -#: src/native-libraries/overview.md:338 +#: src/native-libraries/overview.md:339 msgid "Consumption today (v0.5.x)" msgstr "Uso actual (v0.5.x)" -#: src/native-libraries/overview.md:340 +#: src/native-libraries/overview.md:341 msgid "" "`perry-ffi` owns its public ABI types, but it is not currently available " "from crates.io. Publishing it requires publishing the optional `perry-" @@ -8522,21 +8572,21 @@ msgstr "" "de trabajo primero. Envoltorios externos utilizan la dependencia de " "repositorio que `perry native init` emite:" -#: src/native-libraries/overview.md:345 src/native-libraries/abi.md:26 +#: src/native-libraries/overview.md:346 src/native-libraries/abi.md:26 msgid "" "```toml\n" "[dependencies]\n" -"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = \"main" -"\" }\n" +"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = " +"\"main\" }\n" "```" msgstr "" "```toml\n" "[dependencies]\n" -"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = \"main" -"\" }\n" +"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = " +"\"main\" }\n" "```" -#: src/native-libraries/overview.md:350 +#: src/native-libraries/overview.md:351 msgid "" "Pin a tested Perry tag or commit for a released wrapper rather than " "following `main` indefinitely. Leave the optional `runtime-link` feature off " @@ -8553,11 +8603,11 @@ msgstr "" "el paso final del enlace de una aplicación. Véase [`abi.md`](abi." "md#versioning-and-dependency-setup) para obtener el contrato exacto." -#: src/native-libraries/overview.md:357 +#: src/native-libraries/overview.md:358 msgid "Limits" msgstr "Limitaciones" -#: src/native-libraries/overview.md:359 +#: src/native-libraries/overview.md:360 msgid "" "Bindings are **build-time linked**. Perry doesn't `dlopen` plugins at " "runtime — the staticlib joins the link line, the binary stands on its own." @@ -8566,7 +8616,7 @@ msgstr "" "para cargar plugins en tiempo de ejecución — la staticlib se incorpora a la " "línea de enlace y el binario es autónomo." -#: src/native-libraries/overview.md:362 +#: src/native-libraries/overview.md:363 msgid "" "Bindings can't bring their own JS runtime — they extend Perry's, not replace " "it. A binding that wants its own GC / event loop / threading is out of scope." @@ -8575,7 +8625,7 @@ msgstr "" "Perry, no lo reemplazan. Un binding que requiera su propio GC / bucle de " "eventos / threading está fuera del alcance." -#: src/native-libraries/overview.md:365 +#: src/native-libraries/overview.md:366 msgid "" "Cross-target prebuilds are the binding author's responsibility. The " "scaffolded GitHub Actions workflow handles the common matrix (x86_64+aarch64 " @@ -8586,15 +8636,15 @@ msgstr "" "gestiona la matriz habitual (x86_64+aarch64 macOS/Linux + Windows); otros " "targets requieren adiciones manuales." -#: src/native-libraries/overview.md:370 +#: src/native-libraries/overview.md:371 msgid "Next pages" msgstr "Páginas siguientes" -#: src/native-libraries/overview.md:372 +#: src/native-libraries/overview.md:373 msgid "[`abi.md`](abi.md) — the perry-ffi surface, reference grade." msgstr "[`abi.md`](abi.md) — la superficie de perry-ffi, nivel de referencia." -#: src/native-libraries/overview.md:373 +#: src/native-libraries/overview.md:374 msgid "" "[`manifest-v1.md`](manifest-v1.md) — the `perry.nativeLibrary` schema, every " "field documented." @@ -8602,7 +8652,7 @@ msgstr "" "[`manifest-v1.md`](manifest-v1.md) — el esquema de `perry.nativeLibrary`, " "con todos los campos documentados." -#: src/native-libraries/overview.md:375 +#: src/native-libraries/overview.md:376 msgid "" "[API reference](../api/reference.md) — auto-generated list of every stdlib " "symbol Perry implements." @@ -8643,7 +8693,7 @@ msgstr "" "cualquier otro paquete npm." #: src/native-libraries/governance.md:14 src/ui/multi-window.md:133 -#: src/widgets/data-fetching.md:134 src/internals/node-api-host.md:54 +#: src/widgets/data-fetching.md:134 src/internals/node-api-host.md:58 msgid "Policy" msgstr "Política" @@ -8886,7 +8936,7 @@ msgstr "Situación actual" msgid "`perry-ext-ads`" msgstr "`perry-ext-ads`" -#: src/native-libraries/governance.md:101 src/api/reference.md:2187 +#: src/native-libraries/governance.md:101 src/api/reference.md:2172 msgid "`perry/ads`" msgstr "`perry/ads`" @@ -8913,18 +8963,18 @@ msgstr "`argon2`" #: src/native-libraries/governance.md:102 #: src/native-libraries/governance.md:103 #: src/native-libraries/governance.md:104 +#: src/native-libraries/governance.md:110 +#: src/native-libraries/governance.md:111 #: src/native-libraries/governance.md:112 -#: src/native-libraries/governance.md:113 -#: src/native-libraries/governance.md:114 msgid "External integration" msgstr "Integración externa" #: src/native-libraries/governance.md:102 #: src/native-libraries/governance.md:103 #: src/native-libraries/governance.md:104 +#: src/native-libraries/governance.md:110 +#: src/native-libraries/governance.md:111 #: src/native-libraries/governance.md:112 -#: src/native-libraries/governance.md:113 -#: src/native-libraries/governance.md:114 msgid "Move to an external native package" msgstr "Mover a un paquete nativo externo" @@ -8934,12 +8984,11 @@ msgstr "Mover a un paquete nativo externo" #: src/native-libraries/governance.md:105 #: src/native-libraries/governance.md:106 #: src/native-libraries/governance.md:109 +#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:111 #: src/native-libraries/governance.md:112 #: src/native-libraries/governance.md:113 #: src/native-libraries/governance.md:114 -#: src/native-libraries/governance.md:116 -#: src/native-libraries/governance.md:117 msgid "Bundled; migration pending" msgstr "Agrupado; migración pendiente" @@ -8963,25 +9012,23 @@ msgstr "`better-sqlite3`" msgid "`perry-ext-cheerio`" msgstr "`perry-ext-cheerio`" -#: src/native-libraries/governance.md:105 src/api/reference.md:487 +#: src/native-libraries/governance.md:105 src/api/reference.md:489 msgid "`cheerio`" msgstr "`cheerio`" #: src/native-libraries/governance.md:105 #: src/native-libraries/governance.md:106 #: src/native-libraries/governance.md:109 -#: src/native-libraries/governance.md:111 -#: src/native-libraries/governance.md:116 -#: src/native-libraries/governance.md:117 +#: src/native-libraries/governance.md:113 +#: src/native-libraries/governance.md:114 msgid "Source package" msgstr "Paquete fuente" #: src/native-libraries/governance.md:105 #: src/native-libraries/governance.md:106 #: src/native-libraries/governance.md:109 -#: src/native-libraries/governance.md:111 -#: src/native-libraries/governance.md:116 -#: src/native-libraries/governance.md:117 +#: src/native-libraries/governance.md:113 +#: src/native-libraries/governance.md:114 msgid "Compile the upstream package source" msgstr "Compilar la fuente del paquete" @@ -8989,82 +9036,60 @@ msgstr "Compilar la fuente del paquete" msgid "`perry-ext-ethers`" msgstr "`perry-ext-ethers`" -#: src/native-libraries/governance.md:106 src/api/reference.md:1192 +#: src/native-libraries/governance.md:106 src/api/reference.md:1194 msgid "`ethers`" msgstr "`ethers`" #: src/native-libraries/governance.md:107 -msgid "`perry-ext-events`" -msgstr "`perry-ext-events`" +msgid "`perry-ext-http`" +msgstr "`perry-ext-http`" -#: src/native-libraries/governance.md:107 src/api/reference.md:1203 -msgid "`events`" -msgstr "`events`" +#: src/native-libraries/governance.md:107 +msgid "`http`
`http2`
`https`" +msgstr "`http`
`http2`
`https`" #: src/native-libraries/governance.md:107 #: src/native-libraries/governance.md:108 -#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:115 -#: src/native-libraries/governance.md:118 -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "Runtime API" msgstr "API de tiempo de ejecución" #: src/native-libraries/governance.md:107 #: src/native-libraries/governance.md:108 -#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:115 -#: src/native-libraries/governance.md:118 -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "Keep near core; consolidate when practical" msgstr "Mantener cerca del núcleo; consolidar cuando sea práctico" #: src/native-libraries/governance.md:107 #: src/native-libraries/governance.md:108 -#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:115 -#: src/native-libraries/governance.md:118 -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "Bundled; retained" msgstr "Agrupados; retenidos" #: src/native-libraries/governance.md:108 -msgid "`perry-ext-http`" -msgstr "`perry-ext-http`" - -#: src/native-libraries/governance.md:108 -msgid "`http`
`http2`
`https`" -msgstr "`http`
`http2`
`https`" - -#: src/native-libraries/governance.md:109 -msgid "`perry-ext-mongodb`" -msgstr "`perry-ext-mongodb`" - -#: src/native-libraries/governance.md:109 src/api/reference.md:1855 -msgid "`mongodb`" -msgstr "`mongodb`" - -#: src/native-libraries/governance.md:110 msgid "`perry-ext-net`" msgstr "`perry-ext-net`" -#: src/native-libraries/governance.md:110 src/api/reference.md:1874 +#: src/native-libraries/governance.md:108 src/api/reference.md:1857 msgid "`net`" msgstr "`net`" -#: src/native-libraries/governance.md:111 +#: src/native-libraries/governance.md:109 msgid "`perry-ext-nodemailer`" msgstr "`perry-ext-nodemailer`" -#: src/native-libraries/governance.md:111 src/api/reference.md:2030 +#: src/native-libraries/governance.md:109 src/api/reference.md:2015 msgid "`nodemailer`" msgstr "`nodemailer`" -#: src/native-libraries/governance.md:112 +#: src/native-libraries/governance.md:110 msgid "`perry-ext-parcel-watcher`" msgstr "`perry-ext-parcel-watcher`" -#: src/native-libraries/governance.md:112 +#: src/native-libraries/governance.md:110 msgid "" "`@parcel/watcher`
`@parcel/watcher-darwin-arm64`
`@parcel/watcher-" "darwin-x64`
`@parcel/watcher-linux-arm64-glibc`
`@parcel/watcher-linux-" @@ -9076,59 +9101,51 @@ msgstr "" "arm64-musl`
`@parcel/watcher-linux-x64-glibc`
`@parcel/watcher-linux-" "x64-musl`
`@parcel/watcher-win32-arm64`
`@parcel/watcher-win32-x64`" -#: src/native-libraries/governance.md:113 +#: src/native-libraries/governance.md:111 msgid "`perry-ext-pdf`" msgstr "`perry-ext-pdf`" -#: src/native-libraries/governance.md:113 src/api/reference.md:192 +#: src/native-libraries/governance.md:111 src/api/reference.md:192 msgid "`@perryts/pdf`" msgstr "`@perryts/pdf`" -#: src/native-libraries/governance.md:114 +#: src/native-libraries/governance.md:112 msgid "`perry-ext-sharp`" msgstr "`perry-ext-sharp`" -#: src/native-libraries/governance.md:114 src/api/reference.md:2914 +#: src/native-libraries/governance.md:112 src/api/reference.md:2914 msgid "`sharp`" msgstr "`sharp`" -#: src/native-libraries/governance.md:115 -msgid "`perry-ext-streams`" -msgstr "`perry-ext-streams`" - -#: src/native-libraries/governance.md:115 src/api/reference.md:3139 -msgid "`streams`" -msgstr "`streams`" - -#: src/native-libraries/governance.md:116 +#: src/native-libraries/governance.md:113 msgid "`perry-ext-typescript`" msgstr "`perry-ext-typescript`" -#: src/native-libraries/governance.md:116 src/api/reference.md:3363 +#: src/native-libraries/governance.md:113 src/api/reference.md:3363 msgid "`typescript`" msgstr "`typescript`" -#: src/native-libraries/governance.md:117 +#: src/native-libraries/governance.md:114 msgid "`perry-ext-undici`" msgstr "`perry-ext-undici`" -#: src/native-libraries/governance.md:117 src/api/reference.md:3376 +#: src/native-libraries/governance.md:114 src/api/reference.md:3376 msgid "`undici`" msgstr "`undici`" -#: src/native-libraries/governance.md:118 +#: src/native-libraries/governance.md:115 msgid "`perry-ext-ws`" msgstr "`perry-ext-ws`" -#: src/native-libraries/governance.md:118 src/api/reference.md:3681 +#: src/native-libraries/governance.md:115 src/api/reference.md:3681 msgid "`ws`" msgstr "`ws`" -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "`perry-ext-zlib`" msgstr "`perry-ext-zlib`" -#: src/native-libraries/governance.md:119 src/api/reference.md:3721 +#: src/native-libraries/governance.md:116 src/api/reference.md:3721 msgid "`zlib`" msgstr "`zlib`" @@ -9225,12 +9242,12 @@ msgid "" msgstr "" #: src/native-libraries/authoring-guide.md:65 -#: src/native-libraries/authoring-guide.md:360 -#: src/native-libraries/authoring-guide.md:396 -#: src/native-libraries/authoring-guide.md:401 -#: src/native-libraries/authoring-guide.md:436 -#: src/native-libraries/authoring-guide.md:445 src/native-libraries/abi.md:106 -#: src/native-libraries/abi.md:148 src/native-libraries/abi.md:157 +#: src/native-libraries/authoring-guide.md:369 +#: src/native-libraries/authoring-guide.md:415 +#: src/native-libraries/authoring-guide.md:420 +#: src/native-libraries/authoring-guide.md:455 +#: src/native-libraries/authoring-guide.md:464 src/native-libraries/abi.md:106 +#: src/native-libraries/abi.md:177 src/native-libraries/abi.md:186 #: src/plugins/native-extensions.md:183 src/plugins/native-extensions.md:191 #: src/plugins/native-extensions.md:283 msgid "\"C\"" @@ -9269,19 +9286,19 @@ msgstr "" #: src/native-libraries/authoring-guide.md:89 msgid "" -"**Async returns `*mut Promise`**. Pattern: `JsPromise::new()` → " -"`spawn_blocking(move || { tokio::runtime::Handle::current().block_on(async " -"{...}); promise.resolve(...) })` → return `promise.as_raw()`." +"**Async returns `*mut Promise`**. Pattern: `JsPromise::new()` → `perry_ffi::" +"pool::submit(work, deliver)` (bounded CPU work; `deliver` settles the " +"promise on the owning thread) or `spawn_blocking(move || { …; promise." +"resolve_with(...) })` → return `promise.as_raw()`. There is no tokio runtime " +"to `block_on`: Perry runs on turnloop, and socket I/O goes through " +"`perry_ffi::turnloop_net`." msgstr "" -"**Las funciones async devuelven `*mut Promise`**. Patrón: `JsPromise::new()` " -"→ `spawn_blocking(move || { tokio::runtime::Handle::current().block_on(async " -"{...}); promise.resolve(...) })` → devolver `promise.as_raw()`." -#: src/native-libraries/authoring-guide.md:93 +#: src/native-libraries/authoring-guide.md:95 msgid "`src/index.ts`" msgstr "`src/index.ts`" -#: src/native-libraries/authoring-guide.md:95 +#: src/native-libraries/authoring-guide.md:97 msgid "" "Declare the FFI symbol from your manifest, then export the TypeScript " "surface user code imports. Perry's FFI dispatch keys on the call-site " @@ -9294,12 +9311,12 @@ msgstr "" "wrapper debe llamar explícitamente al símbolo `js_*` indicado en `perry." "nativeLibrary.functions[]`." -#: src/native-libraries/authoring-guide.md:111 src/cli/perry-toml.md:583 +#: src/native-libraries/authoring-guide.md:113 src/cli/perry-toml.md:583 #: src/cli/perry-toml.md:584 msgid "`package.json`" msgstr "`package.json`" -#: src/native-libraries/authoring-guide.md:113 +#: src/native-libraries/authoring-guide.md:115 msgid "" "The `perry.nativeLibrary` block tells Perry's compiler about every `extern " "\"C\"` export plus the build config. Schema details in [`manifest-v1.md`]" @@ -9309,23 +9326,23 @@ msgstr "" "export `extern \"C\"` y la configuración de compilación. Los detalles del " "esquema están en [`manifest-v1.md`](manifest-v1.md)." -#: src/native-libraries/authoring-guide.md:119 +#: src/native-libraries/authoring-guide.md:121 msgid "\"my-bindings\"" msgstr "\"Mis encuadernaciones\"" -#: src/native-libraries/authoring-guide.md:121 -#: src/native-libraries/authoring-guide.md:122 +#: src/native-libraries/authoring-guide.md:123 +#: src/native-libraries/authoring-guide.md:124 #: src/plugins/native-extensions.md:60 msgid "\"src/index.ts\"" msgstr "\"src/index.ts\"" -#: src/native-libraries/authoring-guide.md:122 +#: src/native-libraries/authoring-guide.md:124 msgid "\"types\"" msgstr "\"tipos\"" -#: src/native-libraries/authoring-guide.md:124 -#: src/native-libraries/authoring-guide.md:272 -#: src/native-libraries/authoring-guide.md:297 src/native-libraries/abi.md:50 +#: src/native-libraries/authoring-guide.md:126 +#: src/native-libraries/authoring-guide.md:274 +#: src/native-libraries/authoring-guide.md:299 src/native-libraries/abi.md:50 #: src/native-libraries/manifest-v1.md:32 #: src/native-libraries/manifest-v1.md:515 src/plugins/native-extensions.md:62 #: src/plugins/appstore-review.md:188 src/cli/allow-perry-features.md:54 @@ -9333,24 +9350,24 @@ msgstr "\"tipos\"" msgid "\"nativeLibrary\"" msgstr "\"nativeLibrary\"" -#: src/native-libraries/authoring-guide.md:125 src/native-libraries/abi.md:51 +#: src/native-libraries/authoring-guide.md:127 src/native-libraries/abi.md:51 #: src/native-libraries/manifest-v1.md:33 #: src/native-libraries/manifest-v1.md:516 msgid "\"abiVersion\"" msgstr "\"abiVersion\"" -#: src/native-libraries/authoring-guide.md:125 src/native-libraries/abi.md:51 +#: src/native-libraries/authoring-guide.md:127 src/native-libraries/abi.md:51 #: src/native-libraries/manifest-v1.md:33 #: src/native-libraries/manifest-v1.md:516 msgid "\"0.5\"" msgstr "\"0.5\"" -#: src/native-libraries/authoring-guide.md:128 +#: src/native-libraries/authoring-guide.md:130 msgid "\"js_pdf_parse\"" msgstr "\"js_pdf_parse\"" -#: src/native-libraries/authoring-guide.md:129 -#: src/native-libraries/authoring-guide.md:164 +#: src/native-libraries/authoring-guide.md:131 +#: src/native-libraries/authoring-guide.md:166 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:144 #: src/native-libraries/manifest-v1.md:152 @@ -9358,34 +9375,34 @@ msgstr "\"js_pdf_parse\"" #: src/native-libraries/manifest-v1.md:155 #: src/native-libraries/manifest-v1.md:161 #: src/native-libraries/manifest-v1.md:192 -#: src/native-libraries/manifest-v1.md:386 src/cli/flags.md:592 +#: src/native-libraries/manifest-v1.md:386 src/cli/flags.md:596 msgid "\"kind\"" msgstr "\"malos\"" -#: src/native-libraries/authoring-guide.md:129 +#: src/native-libraries/authoring-guide.md:131 #: src/native-libraries/manifest-v1.md:153 msgid "\"buffer+len\"" msgstr "\"buffer+len\"" -#: src/native-libraries/authoring-guide.md:133 -#: src/native-libraries/authoring-guide.md:273 -#: src/native-libraries/authoring-guide.md:298 +#: src/native-libraries/authoring-guide.md:135 +#: src/native-libraries/authoring-guide.md:275 +#: src/native-libraries/authoring-guide.md:300 #: src/native-libraries/manifest-v1.md:374 #: src/native-libraries/manifest-v1.md:433 #: src/native-libraries/manifest-v1.md:522 src/plugins/native-extensions.md:66 msgid "\"targets\"" msgstr "\"objetivos\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:274 +#: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:276 #: src/native-libraries/manifest-v1.md:375 #: src/native-libraries/manifest-v1.md:523 src/plugins/native-extensions.md:77 msgid "\"macos\"" msgstr "Macos" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 #: src/native-libraries/manifest-v1.md:435 #: src/native-libraries/manifest-v1.md:523 #: src/native-libraries/manifest-v1.md:524 src/plugins/native-extensions.md:68 @@ -9393,15 +9410,15 @@ msgstr "Macos" msgid "\"crate\"" msgstr "\"crate\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 msgid "\"native\"" msgstr "\"nativo\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 #: src/native-libraries/manifest-v1.md:436 #: src/native-libraries/manifest-v1.md:523 #: src/native-libraries/manifest-v1.md:524 src/plugins/native-extensions.md:69 @@ -9409,31 +9426,31 @@ msgstr "\"nativo\"" msgid "\"lib\"" msgstr "\"lib\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 msgid "\"perry_ext_my_bindings\"" msgstr "\"perry_ext_my_bindings\"" -#: src/native-libraries/authoring-guide.md:135 -#: src/native-libraries/authoring-guide.md:275 -#: src/native-libraries/authoring-guide.md:310 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:277 +#: src/native-libraries/authoring-guide.md:312 #: src/native-libraries/manifest-v1.md:524 msgid "\"linux\"" msgstr "\"linux\"" -#: src/native-libraries/authoring-guide.md:136 -#: src/native-libraries/authoring-guide.md:276 -#: src/native-libraries/authoring-guide.md:319 +#: src/native-libraries/authoring-guide.md:138 +#: src/native-libraries/authoring-guide.md:278 +#: src/native-libraries/authoring-guide.md:321 #: src/native-libraries/manifest-v1.md:395 msgid "\"windows\"" msgstr "\"ventanas\"" -#: src/native-libraries/authoring-guide.md:143 +#: src/native-libraries/authoring-guide.md:145 msgid "Every entry in `functions[]` must:" msgstr "Cada entrada en `functions[]` debe:" -#: src/native-libraries/authoring-guide.md:144 +#: src/native-libraries/authoring-guide.md:146 msgid "" "have a `name` matching exactly the symbol the staticlib exports (Perry's " "`perry native validate` verifies this for you)" @@ -9442,31 +9459,31 @@ msgstr "" "staticlib (el comando `perry native validate` de Perry lo verifica " "automáticamente)" -#: src/native-libraries/authoring-guide.md:146 +#: src/native-libraries/authoring-guide.md:148 msgid "declare `params` and `returns` so codegen knows the calling convention" msgstr "" "declarar `params` y `returns` para que el codegen conozca la convención de " "llamada" -#: src/native-libraries/authoring-guide.md:148 +#: src/native-libraries/authoring-guide.md:150 msgid "" "Manifest descriptors are native ABI descriptors, not TypeScript surface " -"types. Existing strings such as `\"string\"`, `\"number\"`, `\"i64\"`, and `" -"\"void\"` still work. Use the explicit vocabulary when you need native " -"precision or metadata: `\"f32\"`, `\"u32\"`, `\"u64\"`, `\"usize\"`, `" -"\"buffer_len\"`, `{ \"kind\": \"buffer+len\" }`, `{ \"kind\": \"handle\", " -"\"type\": \"MyThing\" }`, and `{ \"kind\": \"promise\", \"result\": \"jsvalue" -"\" }`." +"types. Existing strings such as `\"string\"`, `\"number\"`, `\"i64\"`, and " +"`\"void\"` still work. Use the explicit vocabulary when you need native " +"precision or metadata: `\"f32\"`, `\"u32\"`, `\"u64\"`, `\"usize\"`, " +"`\"buffer_len\"`, `{ \"kind\": \"buffer+len\" }`, `{ \"kind\": \"handle\", " +"\"type\": \"MyThing\" }`, and `{ \"kind\": \"promise\", \"result\": " +"\"jsvalue\" }`." msgstr "" "Los descriptores del manifiesto son descriptores ABI nativos, no tipos de " -"superficie TypeScript. Las cadenas existentes como `\"string\"`, `\"number" -"\"`, `\"i64\"` y `\"void\"` siguen funcionando. Usa el vocabulario explícito " -"cuando necesites precisión nativa o metadatos: `\"f32\"`, `\"u32\"`, `" -"\"u64\"`, `\"usize\"`, `\"buffer_len\"`, `{ \"kind\": \"buffer+len\" }`, " -"`{ \"kind\": \"handle\", \"type\": \"MyThing\" }` y `{ \"kind\": \"promise" -"\", \"result\": \"jsvalue\" }`." +"superficie TypeScript. Las cadenas existentes como `\"string\"`, " +"`\"number\"`, `\"i64\"` y `\"void\"` siguen funcionando. Usa el vocabulario " +"explícito cuando necesites precisión nativa o metadatos: `\"f32\"`, " +"`\"u32\"`, `\"u64\"`, `\"usize\"`, `\"buffer_len\"`, `{ \"kind\": " +"\"buffer+len\" }`, `{ \"kind\": \"handle\", \"type\": \"MyThing\" }` y " +"`{ \"kind\": \"promise\", \"result\": \"jsvalue\" }`." -#: src/native-libraries/authoring-guide.md:156 +#: src/native-libraries/authoring-guide.md:158 msgid "" "Handles are opaque Perry native handle objects in JavaScript, not raw " "numbers. Legacy `\"handle\"` and `\"handle\"` descriptors still parse as " @@ -9474,12 +9491,12 @@ msgid "" "thread affinity, debug names, and an owned-return finalizer:" msgstr "" "Los handles son objetos handle nativos opacos de Perry en JavaScript, no " -"números sin procesar. Los descriptores heredados `\"handle\"` y `\"handle" -"\"` se siguen interpretando como handles prestados; los descriptores " -"estructurados pueden agregar propiedad, anulabilidad, afinidad de hilo, " -"nombres de depuración y un finalizador para returns de tipo owned:" +"números sin procesar. Los descriptores heredados `\"handle\"` y " +"`\"handle\"` se siguen interpretando como handles prestados; los " +"descriptores estructurados pueden agregar propiedad, anulabilidad, afinidad " +"de hilo, nombres de depuración y un finalizador para returns de tipo owned:" -#: src/native-libraries/authoring-guide.md:164 +#: src/native-libraries/authoring-guide.md:166 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:144 src/testing/geisterhand.md:68 #: src/testing/geisterhand.md:69 src/testing/geisterhand.md:70 @@ -9489,58 +9506,58 @@ msgstr "" msgid "\"handle\"" msgstr "\"Handle\"" -#: src/native-libraries/authoring-guide.md:165 +#: src/native-libraries/authoring-guide.md:167 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:145 #: src/native-libraries/manifest-v1.md:159 -#: src/native-libraries/manifest-v1.md:160 +#: src/native-libraries/manifest-v1.md:160 src/cli/debugging.md:40 msgid "\"type\"" msgstr "\"tipo\"" -#: src/native-libraries/authoring-guide.md:165 -#: src/native-libraries/authoring-guide.md:169 +#: src/native-libraries/authoring-guide.md:167 +#: src/native-libraries/authoring-guide.md:171 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:145 #: src/native-libraries/manifest-v1.md:150 msgid "\"MyThing\"" msgstr "\"MyThing\"" -#: src/native-libraries/authoring-guide.md:166 +#: src/native-libraries/authoring-guide.md:168 #: src/native-libraries/manifest-v1.md:146 msgid "\"ownership\"" msgstr "\"propiedad\"" -#: src/native-libraries/authoring-guide.md:166 +#: src/native-libraries/authoring-guide.md:168 #: src/native-libraries/manifest-v1.md:146 msgid "\"owned\"" msgstr "\"propiedad\"" -#: src/native-libraries/authoring-guide.md:167 +#: src/native-libraries/authoring-guide.md:169 #: src/native-libraries/manifest-v1.md:148 msgid "\"thread\"" msgstr "\"hilo\"" -#: src/native-libraries/authoring-guide.md:167 +#: src/native-libraries/authoring-guide.md:169 #: src/native-libraries/manifest-v1.md:148 msgid "\"creator\"" msgstr "\"creador\"" -#: src/native-libraries/authoring-guide.md:168 +#: src/native-libraries/authoring-guide.md:170 #: src/native-libraries/manifest-v1.md:149 msgid "\"finalizer\"" msgstr "\"finalizador\"" -#: src/native-libraries/authoring-guide.md:168 +#: src/native-libraries/authoring-guide.md:170 #: src/native-libraries/manifest-v1.md:149 msgid "\"my_thing_free\"" msgstr "\"my_thing_free\"" -#: src/native-libraries/authoring-guide.md:169 +#: src/native-libraries/authoring-guide.md:171 #: src/native-libraries/manifest-v1.md:150 msgid "\"debugName\"" msgstr "\"debugName\"" -#: src/native-libraries/authoring-guide.md:173 +#: src/native-libraries/authoring-guide.md:175 msgid "" "The finalizer symbol must use `void(ptr, ptr)` ABI and must only free native " "resources. It can run from GC finalization, so it must not call Perry JS " @@ -9549,15 +9566,15 @@ msgid "" msgstr "" "El símbolo del finalizador debe usar el ABI `void(ptr, ptr)` y solo debe " "liberar recursos nativos. Puede ejecutarse desde la finalización del GC, por " -"lo que no debe llamar a las APIs JS de Perry ni asignar valores JS. Usa `" -"\"ptr\"` cuando una API acepta intencionalmente un payload de puntero sin " +"lo que no debe llamar a las APIs JS de Perry ni asignar valores JS. Usa " +"`\"ptr\"` cuando una API acepta intencionalmente un payload de puntero sin " "procesar en lugar de un handle administrado." -#: src/native-libraries/authoring-guide.md:179 +#: src/native-libraries/authoring-guide.md:181 msgid "3. Verify" msgstr "3. Verificar" -#: src/native-libraries/authoring-guide.md:185 +#: src/native-libraries/authoring-guide.md:187 msgid "" "This runs `cargo build --release`, locates the resulting `.a`, walks `nm -" "gP` over its symbols, and diffs against the manifest's `functions[]`. The " @@ -9567,7 +9584,7 @@ msgstr "" "`nm -gP` sobre sus símbolos y los compara con `functions[]` del manifiesto. " "La salida señala dos modos de error:" -#: src/native-libraries/authoring-guide.md:189 +#: src/native-libraries/authoring-guide.md:191 msgid "" "**❌ declared function has NO matching symbol** — your manifest lists a " "function the staticlib doesn't export. Either you typo'd the name, or you " @@ -9577,7 +9594,7 @@ msgstr "" "lista una función que la staticlib no exporta. O tienes un error tipográfico " "en el nombre, o olvidaste `#[no_mangle]`." -#: src/native-libraries/authoring-guide.md:192 +#: src/native-libraries/authoring-guide.md:194 msgid "" "**⚠ `js_*` symbol NOT in the manifest** — your staticlib exports a function " "user code can't reach. Either add it to `functions[]`, rename it (drop the " @@ -9587,28 +9604,28 @@ msgstr "" "función a la que el código del usuario no puede acceder. Agrégala a " "`functions[]`, renómbrala (elimina el prefijo `js_`), o elimínala." -#: src/native-libraries/authoring-guide.md:196 +#: src/native-libraries/authoring-guide.md:198 msgid "A green run looks like:" msgstr "Una ejecución exitosa tiene esta apariencia:" -#: src/native-libraries/authoring-guide.md:209 +#: src/native-libraries/authoring-guide.md:211 msgid "4. Test in a Perry program" msgstr "4. Probar en un programa Perry" -#: src/native-libraries/authoring-guide.md:211 +#: src/native-libraries/authoring-guide.md:213 msgid "In a separate directory:" msgstr "En un directorio separado:" -#: src/native-libraries/authoring-guide.md:216 +#: src/native-libraries/authoring-guide.md:218 #, fuzzy msgid "# or any path your tooling supports\n" msgstr "# o cualquier camino que sus herramientas soportan" -#: src/native-libraries/authoring-guide.md:219 +#: src/native-libraries/authoring-guide.md:221 msgid "Add to your TS:" msgstr "Agrega a tu TS:" -#: src/native-libraries/authoring-guide.md:221 +#: src/native-libraries/authoring-guide.md:223 msgid "" "```typescript\n" "import { parse } from \"my-bindings\";\n" @@ -9622,19 +9639,19 @@ msgstr "" "console.log(parse(buf));\n" "```" -#: src/native-libraries/authoring-guide.md:227 +#: src/native-libraries/authoring-guide.md:229 msgid "Then `perry compile main.ts -o main && ./main`." msgstr "Luego, `perry compile main.ts -o main && ./main`." -#: src/native-libraries/authoring-guide.md:229 +#: src/native-libraries/authoring-guide.md:231 msgid "5. Publish" msgstr "5. Publicar" -#: src/native-libraries/authoring-guide.md:231 +#: src/native-libraries/authoring-guide.md:233 msgid "Tag a release" msgstr "Etiquetar una versión" -#: src/native-libraries/authoring-guide.md:238 +#: src/native-libraries/authoring-guide.md:240 msgid "" "The scaffolded `.github/workflows/release.yml` builds prebuilt staticlibs " "for x86_64 + aarch64 macOS/Linux + Windows on tag and attaches them to the " @@ -9646,11 +9663,11 @@ msgstr "" "crear una etiqueta y las adjunta al release de GitHub. Añade o elimina " "objetivos en el bloque `matrix` del workflow según sea necesario." -#: src/native-libraries/authoring-guide.md:243 +#: src/native-libraries/authoring-guide.md:245 msgid "npm publish" msgstr "npm publish" -#: src/native-libraries/authoring-guide.md:249 +#: src/native-libraries/authoring-guide.md:251 msgid "" "The scaffolded `package.json` includes the right `files: [...]` list to " "bundle `src/` + `Cargo.toml` + the README. If you also vendor the prebuilt " @@ -9661,37 +9678,37 @@ msgstr "" "incluyes los artefactos precompilados en el tarball de npm, agrégalos al " "bloque `files`." -#: src/native-libraries/authoring-guide.md:253 +#: src/native-libraries/authoring-guide.md:255 msgid "Two distribution models" msgstr "Dos modelos de distribución" -#: src/native-libraries/authoring-guide.md:255 +#: src/native-libraries/authoring-guide.md:257 msgid "There are two ways your users get the staticlib:" msgstr "Hay dos formas en que tus usuarios obtienen la staticlib:" -#: src/native-libraries/authoring-guide.md:257 +#: src/native-libraries/authoring-guide.md:259 msgid "Model" msgstr "Modelo" -#: src/native-libraries/authoring-guide.md:257 +#: src/native-libraries/authoring-guide.md:259 msgid "What ships in the npm tarball" msgstr "Qué incluye el tarball de npm" -#: src/native-libraries/authoring-guide.md:257 +#: src/native-libraries/authoring-guide.md:259 msgid "Trade-off" msgstr "Compensaciones" -#: src/native-libraries/authoring-guide.md:259 +#: src/native-libraries/authoring-guide.md:261 msgid "**Vendor prebuilts**" msgstr "**Incluir precompilados**" -#: src/native-libraries/authoring-guide.md:259 +#: src/native-libraries/authoring-guide.md:261 msgid "" "`src/`, `Cargo.toml`, AND `prebuilt//lib.a` for every target" msgstr "" "`src/`, `Cargo.toml` Y `prebuilt//lib.a` para cada objetivo" -#: src/native-libraries/authoring-guide.md:259 +#: src/native-libraries/authoring-guide.md:261 msgid "" "Bigger npm tarball; install is fast (no compile); user doesn't need a Rust " "toolchain" @@ -9699,15 +9716,15 @@ msgstr "" "Tarball de npm más grande; la instalación es rápida (sin compilación); el " "usuario no necesita una toolchain de Rust" -#: src/native-libraries/authoring-guide.md:260 +#: src/native-libraries/authoring-guide.md:262 msgid "**Source-only**" msgstr "**Solo fuente**" -#: src/native-libraries/authoring-guide.md:260 +#: src/native-libraries/authoring-guide.md:262 msgid "`src/`, `Cargo.toml`, no prebuilts" msgstr "`src/`, `Cargo.toml`, sin precompilados" -#: src/native-libraries/authoring-guide.md:260 +#: src/native-libraries/authoring-guide.md:262 msgid "" "Tiny tarball; first `perry compile` runs `cargo build --release` (slow); " "user needs Rust" @@ -9715,7 +9732,7 @@ msgstr "" "Tarball pequeño; el primer `perry compile` ejecuta `cargo build --release` " "(lento); el usuario necesita Rust" -#: src/native-libraries/authoring-guide.md:262 +#: src/native-libraries/authoring-guide.md:264 msgid "" "Vendoring is the friendlier default for npm consumers. Source-only makes " "sense if your matrix is too big for one tarball or if you're publishing a " @@ -9726,7 +9743,7 @@ msgstr "" "demasiado grande para un solo tarball o si estás publicando un wrapper " "privado para una audiencia reducida." -#: src/native-libraries/authoring-guide.md:266 +#: src/native-libraries/authoring-guide.md:268 msgid "" "The manifest's `targets..prebuilt` field tells Perry where to find a " "prebuilt for the user's compile target:" @@ -9734,30 +9751,30 @@ msgstr "" "El campo `targets..prebuilt` del manifiesto indica a Perry dónde " "encontrar un precompilado para el objetivo de compilación del usuario:" -#: src/native-libraries/authoring-guide.md:274 -#: src/native-libraries/authoring-guide.md:275 #: src/native-libraries/authoring-guide.md:276 -#: src/native-libraries/authoring-guide.md:300 -#: src/native-libraries/authoring-guide.md:311 -#: src/native-libraries/authoring-guide.md:320 +#: src/native-libraries/authoring-guide.md:277 +#: src/native-libraries/authoring-guide.md:278 +#: src/native-libraries/authoring-guide.md:302 +#: src/native-libraries/authoring-guide.md:313 +#: src/native-libraries/authoring-guide.md:322 #: src/native-libraries/manifest-v1.md:376 #: src/native-libraries/manifest-v1.md:396 msgid "\"prebuilt\"" msgstr "\"preconstruido\"" -#: src/native-libraries/authoring-guide.md:274 +#: src/native-libraries/authoring-guide.md:276 msgid "\"./prebuilt/macos/libperry_ext_my_bindings.a\"" msgstr "\"./prebuilt/macos/libperry_ext_my_bindings.a\"" -#: src/native-libraries/authoring-guide.md:275 +#: src/native-libraries/authoring-guide.md:277 msgid "\"./prebuilt/linux/libperry_ext_my_bindings.a\"" msgstr "\"./prebuilt/linux/libperry_ext_my_bindings.a\"" -#: src/native-libraries/authoring-guide.md:276 +#: src/native-libraries/authoring-guide.md:278 msgid "\"./prebuilt/windows/perry_ext_my_bindings.lib\"" msgstr "\"./prebuilt/windows/perry_ext_my_bindings.lib\"" -#: src/native-libraries/authoring-guide.md:283 +#: src/native-libraries/authoring-guide.md:285 msgid "" "If a `prebuilt` field is present, Perry treats the archive as required for " "that target and fails with a diagnostic when it cannot be resolved or " @@ -9769,11 +9786,11 @@ msgstr "" "resolverse o enlazarse. Omite `prebuilt` y proporciona `crate` / `lib` " "cuando el objetivo debe compilarse desde el código fuente." -#: src/native-libraries/authoring-guide.md:288 +#: src/native-libraries/authoring-guide.md:290 msgid "Backend-aware packaging" msgstr "Empaquetado con soporte de backend" -#: src/native-libraries/authoring-guide.md:290 +#: src/native-libraries/authoring-guide.md:292 msgid "" "Graphics or compute wrappers can describe backend-owned artifacts without " "adding app-specific APIs to Perry. Put backend metadata under the target " @@ -9784,52 +9801,52 @@ msgstr "" "Perry. Coloca los metadatos del backend bajo el objetivo que puede " "utilizarlos:" -#: src/native-libraries/authoring-guide.md:300 +#: src/native-libraries/authoring-guide.md:302 msgid "\"./prebuilt/ios/libdemo.a\"" msgstr "\"./prebuilt/ios/libdemo.a\"" -#: src/native-libraries/authoring-guide.md:301 -#: src/native-libraries/authoring-guide.md:312 -#: src/native-libraries/authoring-guide.md:321 +#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:314 +#: src/native-libraries/authoring-guide.md:323 #: src/native-libraries/manifest-v1.md:377 #: src/native-libraries/manifest-v1.md:397 msgid "\"backends\"" msgstr "\"backends\"" -#: src/native-libraries/authoring-guide.md:302 +#: src/native-libraries/authoring-guide.md:304 #: src/native-libraries/manifest-v1.md:378 msgid "\"metal\"" msgstr "\"metal\"" -#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:305 #: src/native-libraries/manifest-v1.md:379 src/plugins/native-extensions.md:70 #: src/plugins/native-extensions.md:75 src/plugins/native-extensions.md:80 msgid "\"frameworks\"" msgstr "\"marcos\"" -#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:305 #: src/native-libraries/manifest-v1.md:379 msgid "\"Metal\"" msgstr "\"Metal\"" -#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:305 #: src/native-libraries/manifest-v1.md:379 msgid "\"QuartzCore\"" msgstr "\"QuartzCore\"" -#: src/native-libraries/authoring-guide.md:304 +#: src/native-libraries/authoring-guide.md:306 #: src/native-libraries/manifest-v1.md:380 msgid "\"shaderSources\"" msgstr "\"shaderSources\"" -#: src/native-libraries/authoring-guide.md:304 +#: src/native-libraries/authoring-guide.md:306 #: src/native-libraries/manifest-v1.md:380 msgid "\"shaders/default.metal\"" msgstr "\"shaders/default.metal\"" -#: src/native-libraries/authoring-guide.md:305 -#: src/native-libraries/authoring-guide.md:315 -#: src/native-libraries/authoring-guide.md:324 +#: src/native-libraries/authoring-guide.md:307 +#: src/native-libraries/authoring-guide.md:317 +#: src/native-libraries/authoring-guide.md:326 #: src/native-libraries/manifest-v1.md:381 #: src/native-libraries/manifest-v1.md:391 #: src/native-libraries/manifest-v1.md:400 @@ -9837,75 +9854,75 @@ msgstr "\"shaders/default.metal\"" msgid "\"shaderOutputs\"" msgstr "\"shaderOutputs\"" -#: src/native-libraries/authoring-guide.md:305 +#: src/native-libraries/authoring-guide.md:307 #: src/native-libraries/manifest-v1.md:381 msgid "\"prebuilt/default.metallib\"" msgstr "\"prebuilt/default.metallib\"" -#: src/native-libraries/authoring-guide.md:306 +#: src/native-libraries/authoring-guide.md:308 #: src/native-libraries/manifest-v1.md:382 msgid "\"resources\"" msgstr "\"recursos\"" -#: src/native-libraries/authoring-guide.md:306 +#: src/native-libraries/authoring-guide.md:308 #: src/native-libraries/manifest-v1.md:382 msgid "\"resources/metal\"" msgstr "\"resources/metal\"" -#: src/native-libraries/authoring-guide.md:311 +#: src/native-libraries/authoring-guide.md:313 msgid "\"./prebuilt/linux/libdemo.a\"" msgstr "\"./prebuilt/linux/libdemo.a\"" -#: src/native-libraries/authoring-guide.md:313 -#: src/native-libraries/authoring-guide.md:314 +#: src/native-libraries/authoring-guide.md:315 +#: src/native-libraries/authoring-guide.md:316 #: src/native-libraries/manifest-v1.md:389 #: src/native-libraries/manifest-v1.md:390 #: src/native-libraries/manifest-v1.md:402 msgid "\"vulkan\"" msgstr "\"vulkan\"" -#: src/native-libraries/authoring-guide.md:314 -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:316 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:390 #: src/native-libraries/manifest-v1.md:399 #: src/native-libraries/manifest-v1.md:403 msgid "\"libs\"" msgstr "\"Libras\"" -#: src/native-libraries/authoring-guide.md:315 +#: src/native-libraries/authoring-guide.md:317 #: src/native-libraries/manifest-v1.md:391 #: src/native-libraries/manifest-v1.md:404 msgid "\"prebuilt/default.spv\"" msgstr "\"prebuilt/default.spv\"" -#: src/native-libraries/authoring-guide.md:320 +#: src/native-libraries/authoring-guide.md:322 #: src/native-libraries/manifest-v1.md:396 msgid "\"./prebuilt/windows/demo.lib\"" msgstr "\"./prebuilt/windows/demo.lib\"" -#: src/native-libraries/authoring-guide.md:322 -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:324 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:398 #: src/native-libraries/manifest-v1.md:399 msgid "\"d3d12\"" msgstr "\"d3d12\"" -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:399 msgid "\"dxgi\"" msgstr "\"dxgi\"" -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:399 msgid "\"dxguid\"" msgstr "\"dxguid\"" -#: src/native-libraries/authoring-guide.md:324 +#: src/native-libraries/authoring-guide.md:326 #: src/native-libraries/manifest-v1.md:400 msgid "\"prebuilt/default.dxil\"" msgstr "\"prebuilt/default.dxil\"" -#: src/native-libraries/authoring-guide.md:334 +#: src/native-libraries/authoring-guide.md:336 msgid "" "Perry validates the backend/target pairing early: Metal is Apple-only, " "Vulkan is available on macOS/Linux/Windows/Android/HarmonyOS, and D3D12 is " @@ -9918,11 +9935,11 @@ msgstr "" "precompilados y los recursos se copian en `NativeLibraries//" "/` dentro de los bundles de la aplicación." -#: src/native-libraries/authoring-guide.md:339 +#: src/native-libraries/authoring-guide.md:341 msgid "6. Update over time" msgstr "6. Actualizar con el tiempo" -#: src/native-libraries/authoring-guide.md:341 +#: src/native-libraries/authoring-guide.md:343 msgid "" "**A new perry-ffi feature lands**: bump your `Cargo.toml`'s `perry-ffi` " "version, rebuild prebuilts, tag a new release. Users `bun update` to pick it " @@ -9934,7 +9951,7 @@ msgstr "" "especificación del manifiesto de Perry permanece en v1 salvo que cambie el " "esquema." -#: src/native-libraries/authoring-guide.md:345 +#: src/native-libraries/authoring-guide.md:347 msgid "" "**A new Perry minor**: same — `perry-ffi`'s semver moves with Perry's minor. " "The git-URL consumption (v0.5.x) means rebuilding against `main` picks it up " @@ -9944,7 +9961,7 @@ msgstr "" "minor de Perry. El consumo por URL de git (v0.5.x) significa que reconstruir " "contra `main` lo adopta automáticamente." -#: src/native-libraries/authoring-guide.md:348 +#: src/native-libraries/authoring-guide.md:350 msgid "" "**Breaking change to the `js_*` surface you exported**: bump your package's " "major version (`1.0.0` → `2.0.0`). Users who pin a major aren't affected." @@ -9953,19 +9970,61 @@ msgstr "" "versión mayor de tu paquete (`1.0.0` → `2.0.0`). Los usuarios que fijan una " "versión mayor no se ven afectados." -#: src/native-libraries/authoring-guide.md:352 +#: src/native-libraries/authoring-guide.md:354 msgid "Common patterns" msgstr "Patrones comunes" -#: src/native-libraries/authoring-guide.md:354 -msgid "Async one-shot (HTTP request, DB query)" -msgstr "Operación asíncrona puntual (petición HTTP, consulta a base de datos)" +#: src/native-libraries/authoring-guide.md:356 +msgid "Async one-shot (hashing, compression, a blocking client call)" +msgstr "" + +#: src/native-libraries/authoring-guide.md:360 +msgid "" +"/// Stand-in for your real CPU-bound work. Owned Rust data in, owned out.\n" +msgstr "" + +#: src/native-libraries/authoring-guide.md:363 +msgid "\"{:08x}\"" +msgstr "" -#: src/native-libraries/authoring-guide.md:371 -msgid "\"fetch: {}\"" -msgstr "\"traer: . . \"" +#: src/native-libraries/authoring-guide.md:365 +#, fuzzy +msgid "" +"/// # Safety\n" +"/// `input_ptr` must be null or a Perry-runtime `StringHeader`.\n" +msgstr "" +"**Documenta `# Safety` para las funciones unsafe** — como mínimo indica \"el " +"puntero debe ser null o un `
` del runtime de Perry\"." + +#: src/native-libraries/authoring-guide.md:372 +msgid "// Copy the argument out of the JS heap before crossing threads.\n" +msgstr "" -#: src/native-libraries/authoring-guide.md:378 +#: src/native-libraries/authoring-guide.md:377 +msgid "" +"// `work` runs on a pool thread with owned Rust data only; `deliver` runs\n" +" // on the thread that owns the JS heap, where the promise is settled.\n" +msgstr "" + +#: src/native-libraries/authoring-guide.md:384 +#, fuzzy +msgid "\"cancelled\"" +msgstr "\"habilitado\"" + +#: src/native-libraries/authoring-guide.md:385 +#, fuzzy +msgid "\"digest panicked\"" +msgstr "\"Prueba aprobada\"" + +#: src/native-libraries/authoring-guide.md:392 +msgid "" +"Perry has no tokio runtime (it runs on turnloop), so there is nothing for " +"`Handle::current().block_on` to find. Network I/O belongs on `perry_ffi::" +"turnloop_net`; the old `spawn_async` / `spawn_blocking_with_reactor` entry " +"points were retired with tokio (see the ABI reference)." +msgstr "" + +#: src/native-libraries/authoring-guide.md:397 msgid "" "`reject_string(message)` rejects with a real JavaScript `Error`: consumers " "can use `error instanceof Error`, `error.message`, and `error.stack`. Use " @@ -9979,11 +10038,11 @@ msgstr "" "intencionadamente con un valor que no sea Error, o `reject_with(...)` cuando " "el Error necesite campos estructurados construidos en el hilo principal." -#: src/native-libraries/authoring-guide.md:384 +#: src/native-libraries/authoring-guide.md:403 msgid "Sync handle-based class" msgstr "Clase síncrona basada en handles" -#: src/native-libraries/authoring-guide.md:386 +#: src/native-libraries/authoring-guide.md:405 msgid "" "Use a `handle` descriptor for synchronous resource-style APIs. The native " "function receives or returns the raw resource pointer as `i64`, while " @@ -9993,16 +10052,16 @@ msgstr "" "nativa recibe o devuelve el puntero de recurso sin procesar como `i64`, " "mientras que los llamadores de TypeScript solo ven el objeto handle opaco." -#: src/native-libraries/authoring-guide.md:406 +#: src/native-libraries/authoring-guide.md:425 msgid "Event listeners (`.on(event, cb)`)" msgstr "Listeners de eventos (`.on(event, cb)`)" -#: src/native-libraries/authoring-guide.md:415 +#: src/native-libraries/authoring-guide.md:434 #, fuzzy msgid "// closure pointers, kept alive by the GC scanner below\n" msgstr "// punteros de cierre, mantenidos vivos por el escáner GC de abajo" -#: src/native-libraries/authoring-guide.md:458 +#: src/native-libraries/authoring-guide.md:477 msgid "" "The GC scanner is **load-bearing**: without it, a malloc-triggered GC " "between `.on(cb)` and `.emit()` will sweep the closure and the next emit " @@ -10014,11 +10073,11 @@ msgstr "" "memoria liberada. Registra siempre un scanner si tus handles almacenan " "punteros de closure." -#: src/native-libraries/authoring-guide.md:463 +#: src/native-libraries/authoring-guide.md:482 msgid "When to extend the perry-ffi surface" msgstr "Cuándo extender la superficie de perry-ffi" -#: src/native-libraries/authoring-guide.md:465 +#: src/native-libraries/authoring-guide.md:484 msgid "" "If your binding genuinely needs something perry-ffi doesn't expose, file an " "issue against [`PerryTS/perry`](https://github.com/PerryTS/perry/issues) " @@ -10028,20 +10087,20 @@ msgstr "" "issue en [`PerryTS/perry`](https://github.com/PerryTS/perry/issues) " "describiendo:" -#: src/native-libraries/authoring-guide.md:469 +#: src/native-libraries/authoring-guide.md:488 msgid "the binding you're writing," msgstr "el binding que estás escribiendo," -#: src/native-libraries/authoring-guide.md:470 +#: src/native-libraries/authoring-guide.md:489 msgid "the perry-runtime function/type you'd otherwise reach into," msgstr "" "la función/tipo de perry-runtime que de otro modo utilizarías directamente," -#: src/native-libraries/authoring-guide.md:471 +#: src/native-libraries/authoring-guide.md:490 msgid "why a higher-level perry-ffi entry would generalize." msgstr "por qué una entrada de perry-ffi de mayor nivel generalizaría el caso." -#: src/native-libraries/authoring-guide.md:473 +#: src/native-libraries/authoring-guide.md:492 msgid "" "The bar for adding to perry-ffi is high — every helper is a forever " "commitment — but real wrappers driving real needs is exactly the right " @@ -10055,7 +10114,7 @@ msgstr "" "Buffer en v0.5.556, JSON-stringify + event-pump en los seguimientos de " "v0.5.567) surgieron todas de wrappers específicos que los necesitaban." -#: src/native-libraries/authoring-guide.md:479 +#: src/native-libraries/authoring-guide.md:498 msgid "" "Don't reach into `perry_runtime::*` directly to \"unblock\" your wrapper " "today — it'll break the next time those internals change." @@ -10063,7 +10122,7 @@ msgstr "" "No accedas directamente a `perry_runtime::*` para \"desbloquear\" tu wrapper " "hoy — se romperá la próxima vez que cambien esos internos." -#: src/native-libraries/authoring-guide.md:482 src/container/containers.md:223 +#: src/native-libraries/authoring-guide.md:501 src/container/containers.md:223 #: src/container/compose.md:358 src/container/networking.md:183 #: src/container/volumes.md:184 src/container/security.md:216 #: src/container/production-patterns.md:298 src/cli/allow-js-runtime.md:81 @@ -10074,20 +10133,20 @@ msgstr "" msgid "See also" msgstr "Ver también" -#: src/native-libraries/authoring-guide.md:484 +#: src/native-libraries/authoring-guide.md:503 msgid "[`overview.md`](overview.md) — the architectural picture." msgstr "[`overview.md`](overview.md) — la visión arquitectónica." -#: src/native-libraries/authoring-guide.md:485 +#: src/native-libraries/authoring-guide.md:504 msgid "[`abi.md`](abi.md) — perry-ffi reference." msgstr "[`abi.md`](abi.md) — referencia de perry-ffi." -#: src/native-libraries/authoring-guide.md:486 +#: src/native-libraries/authoring-guide.md:505 msgid "[`manifest-v1.md`](manifest-v1.md) — the manifest schema in full." msgstr "" "[`manifest-v1.md`](manifest-v1.md) — el esquema del manifiesto completo." -#: src/native-libraries/authoring-guide.md:487 +#: src/native-libraries/authoring-guide.md:506 msgid "" "[`PerryTS/tursodb-bindings`](https://github.com/PerryTS/tursodb-bindings) " "and [`PerryTS/iroh-bindings`](https://github.com/PerryTS/iroh-bindings) for " @@ -10230,7 +10289,7 @@ msgstr "" "lib.rs) y su documentación Rust son la fuente de la verdad para las firmas " "exactas y los requisitos de seguridad." -#: src/native-libraries/abi.md:71 src/internals/node-api-host.md:41 +#: src/native-libraries/abi.md:71 src/internals/node-api-host.md:45 msgid "Area" msgstr "Area" @@ -10295,9 +10354,10 @@ msgid "Async work" msgstr "Trabajos de sincronización" #: src/native-libraries/abi.md:78 +#, fuzzy msgid "" -"`JsPromise`, `JsNativeAsyncCompletion`, `spawn_async`, `spawn_blocking`, " -"`spawn_blocking_with_reactor`, `run_pending`" +"`JsPromise`, `JsNativeAsyncCompletion`, `spawn_blocking`, `run_pending`, " +"`pool::{submit, run, cancel, turn}`, `agent_post`, `turnloop_net`" msgstr "" "`JsPromise`, `JsNativeAsyncCompletion`, `spawn_async`, `spawn_blocking`, " "`spawn_blocking_with_reactor`, `run_pending`" @@ -10347,10 +10407,83 @@ msgid "Use `perry_ffi::StringHeader` in exported signatures:" msgstr "Utilizar `perry_ffi::StringHeader` en las firmas exportadas:" #: src/native-libraries/abi.md:109 +msgid "Retired: `spawn_async` and `spawn_blocking_with_reactor`" +msgstr "" + +#: src/native-libraries/abi.md:111 +msgid "" +"Both were removed together with tokio, which Perry no longer contains in any " +"crate. Their contract was \"tokio's I/O reactor is ambient\": `spawn_async` " +"drove a boxed tokio future on perry-stdlib's shared runtime, and " +"`spawn_blocking_with_reactor` ran a closure on a tokio blocking thread that " +"carried that reactor. Nothing can honour that contract without tokio, so the " +"Rust functions and their C symbols (`perry_ffi_spawn_async`, " +"`perry_ffi_spawn_blocking_with_reactor`) were deleted rather than stubbed: a " +"wrapper that still calls them fails to compile against current `perry-ffi` " +"(or, if prebuilt, fails to link naming the symbol) instead of aborting at " +"its first socket. No in-tree or known out-of-tree wrapper used them when " +"they were retired — every in-tree caller had moved to turnloop first." +msgstr "" + +#: src/native-libraries/abi.md:123 +msgid "" +"This is a backwards-incompatible change to the `0.5.x` surface, made without " +"a major bump because `perry-ffi` tracks Perry's workspace version (there is " +"no independent major to raise) and the symbols had no remaining users. " +"Migrate as follows:" +msgstr "" + +#: src/native-libraries/abi.md:128 +#, fuzzy +msgid "Was" +msgstr "Watches" + +#: src/native-libraries/abi.md:128 +#, fuzzy +msgid "Use instead" +msgstr "Caso de uso" + +#: src/native-libraries/abi.md:130 +msgid "`spawn_async(future)` for socket / TLS / HTTP I/O" +msgstr "" + +#: src/native-libraries/abi.md:130 +msgid "" +"`perry_ffi::turnloop_net` (sockets on the agent's turnloop loop) and " +"`perry_ffi::agent_post`" +msgstr "" + +#: src/native-libraries/abi.md:131 +msgid "`spawn_blocking_with_reactor(closure)`" +msgstr "" + +#: src/native-libraries/abi.md:131 +msgid "" +"`spawn_blocking` for work that holds its thread, `pool::submit` for bounded " +"CPU work" +msgstr "" + +#: src/native-libraries/abi.md:132 +msgid "`Handle::current().block_on(…)` inside `spawn_blocking`" +msgstr "" + +#: src/native-libraries/abi.md:132 +msgid "a blocking client, or turnloop I/O; there is no ambient runtime" +msgstr "" + +#: src/native-libraries/abi.md:134 +msgid "" +"`spawn_blocking` and `run_pending` are unchanged in signature: " +"`spawn_blocking` runs on turnloop's long-occupancy worker set (one plain OS " +"thread when the caller has no event loop), and `run_pending` takes one " +"bounded loop turn." +msgstr "" + +#: src/native-libraries/abi.md:138 msgid "Async promise rejection" msgstr "Rechazo de la promesa de ASYnc" -#: src/native-libraries/abi.md:111 +#: src/native-libraries/abi.md:140 msgid "" "`JsPromise::reject_string(message)` copies the message and rejects with a " "real JavaScript `Error` allocated on the runtime's main thread. Its `." @@ -10369,11 +10502,11 @@ msgstr "" "construir un valor de rechazo estructurado de forma segura en el hilo " "principal." -#: src/native-libraries/abi.md:118 +#: src/native-libraries/abi.md:147 msgid "ABI boundaries and thread safety" msgstr "Límites ABI y seguridad de hilos" -#: src/native-libraries/abi.md:120 +#: src/native-libraries/abi.md:149 msgid "" "Use the exported constructors, accessors, and `JsValue` conversions. Do not " "depend on private runtime field offsets or hard-code pointer tags." @@ -10382,7 +10515,7 @@ msgstr "" "dependa de las compensaciones de campos de ejecución privados ni de las " "etiquetas de punteros de código duro." -#: src/native-libraries/abi.md:123 +#: src/native-libraries/abi.md:152 msgid "" "JavaScript heap allocation is tied to Perry's main-thread arena. If worker-" "thread work must produce an object, array, or other complex `JsValue`, carry " @@ -10394,7 +10527,7 @@ msgstr "" "matriz u otro complejo `JsValue`, lleve los datos planos `Send` de vuelta y " "construya el valor con `JsPromise::resolve_with` en el hilo principal." -#: src/native-libraries/abi.md:127 +#: src/native-libraries/abi.md:156 msgid "" "Register native values that retain JavaScript references with the handle/" "root-scanner APIs. Use `TransientRootScope` for temporary values that must " @@ -10404,7 +10537,7 @@ msgstr "" "las API de handle/root-scanner. Utilice `TransientRootScope` para valores " "temporales que deben sobrevivir a un punto de asignación o de recogida." -#: src/native-libraries/abi.md:130 +#: src/native-libraries/abi.md:159 msgid "" "Respect the `unsafe` contracts on raw pointer constructors and FFI entry " "points. `perry-ffi` stabilizes the interface; it cannot prove that a caller " @@ -10414,7 +10547,7 @@ msgstr "" "puntos de entrada FFI. `perry-ffi` estabiliza la interfaz; no puede probar " "que un llamante haya suministrado un puntero en vivo del tipo declarado." -#: src/native-libraries/abi.md:133 +#: src/native-libraries/abi.md:162 msgid "" "Keep `runtime-link` out of production wrapper dependencies unless the crate " "genuinely needs a Cargo-level `perry-runtime` link. It is normally enabled " @@ -10424,7 +10557,7 @@ msgstr "" "producción a menos que la caja necesite un enlace `perry-runtime` de nivel " "de carga. Normalmente sólo se activa en pruebas de envoltura." -#: src/native-libraries/abi.md:137 +#: src/native-libraries/abi.md:166 msgid "" "Any new ABI helper should be documented and covered by a focused test in " "`crates/perry-ffi` in the same change." @@ -10432,29 +10565,29 @@ msgstr "" "Cualquier nuevo ayudante de ABI debe documentarse y cubrirse mediante una " "prueba focalizada en `crates/perry-ffi` en el mismo cambio." -#: src/native-libraries/abi.md:140 +#: src/native-libraries/abi.md:169 msgid "Reference example: `perry-ext-dotenv`" msgstr "Ejemplo de referencia: `perry-ext-dotenv`" -#: src/native-libraries/abi.md:142 +#: src/native-libraries/abi.md:171 msgid "The smallest in-tree wrapper demonstrates string input and output:" msgstr "" "El envoltorio más pequeño en árbol muestra la entrada y salida de cadena:" -#: src/native-libraries/abi.md:152 +#: src/native-libraries/abi.md:181 msgid "\".env\"" msgstr "\".env\"" -#: src/native-libraries/abi.md:153 +#: src/native-libraries/abi.md:182 #, fuzzy msgid "// … read file, set env vars, return 1.0 / 0.0 …\n" msgstr "// ... leer el archivo, establecer env vars, devolver 1.0 / 0.0 " -#: src/native-libraries/abi.md:165 +#: src/native-libraries/abi.md:194 msgid "\"{}\"" msgstr "\"{}\"" -#: src/native-libraries/abi.md:170 +#: src/native-libraries/abi.md:199 msgid "" "Source: [`crates/perry-ext-dotenv/src/lib.rs`](https://github.com/PerryTS/" "perry/blob/main/crates/perry-ext-dotenv/src/lib.rs). The crate's normal " @@ -10467,11 +10600,11 @@ msgstr "" "que la prueba de ida y vuelta FFI pueda vincular símbolos de tiempo de " "ejecución." -#: src/native-libraries/abi.md:174 +#: src/native-libraries/abi.md:203 msgid "Tooling and implementation status" msgstr "Estado de la aplicación y la utilización de instrumentos" -#: src/native-libraries/abi.md:176 +#: src/native-libraries/abi.md:205 msgid "" "The native-library work tracked by [\\#466](https://github.com/PerryTS/perry/" "issues/466) has landed:" @@ -10479,16 +10612,16 @@ msgstr "" "El trabajo de biblioteca nativa seguido por [\\#466](https://github.com/" "PerryTS/perry/issues/466) ha aterrizado:" -#: src/native-libraries/abi.md:178 +#: src/native-libraries/abi.md:207 msgid "manifests declare their native functions and ABI version;" msgstr "los manifiestos declaran sus funciones nativas y la versión ABI;" -#: src/native-libraries/abi.md:179 +#: src/native-libraries/abi.md:208 msgid "incompatible declared ABI ranges are rejected during resolution;" msgstr "" "los rangos ABI declarados incompatibles son rechazados durante la resolución;" -#: src/native-libraries/abi.md:180 +#: src/native-libraries/abi.md:209 msgid "" "`perry native init`, `perry native validate`, and `perry native list` " "provide authoring and inspection workflows;" @@ -10496,13 +10629,13 @@ msgstr "" "`perry native init`, `perry native validate` y `perry native list` " "proporcionan flujos de trabajo de autoría e inspección;" -#: src/native-libraries/abi.md:182 +#: src/native-libraries/abi.md:211 msgid "the well-known bindings table routes supported package imports; and" msgstr "" "las rutas de tablas de encuadernación bien conocidas que apoyan las " "importaciones de envases; y" -#: src/native-libraries/abi.md:183 +#: src/native-libraries/abi.md:212 msgid "" "wrappers can depend on the repository's stable `perry-ffi` API instead of " "`perry-runtime` internals." @@ -10510,7 +10643,7 @@ msgstr "" "Los envoltorios pueden depender de la API estable de `perry-ffi` en lugar de " "los internos de `perry-runtime`." -#: src/native-libraries/abi.md:186 +#: src/native-libraries/abi.md:215 msgid "" "Issue #466 is retained as the historical design record. Open a new issue for " "a missing ABI helper or a new native-library capability." @@ -10558,8 +10691,8 @@ msgid "" "Map TypeScript-side function calls onto the right `extern \"C\"` symbol with " "the right calling convention." msgstr "" -"Mapear las llamadas a funciones del lado TypeScript al símbolo `extern \"C" -"\"` correcto con la convención de llamada adecuada." +"Mapear las llamadas a funciones del lado TypeScript al símbolo `extern " +"\"C\"` correcto con la convención de llamada adecuada." #: src/native-libraries/manifest-v1.md:16 msgid "" @@ -10757,9 +10890,9 @@ msgstr "Requerido" #: src/platforms/tvos.md:149 src/platforms/watchos.md:137 #: src/platforms/wearos.md:23 src/container/containers.md:133 #: src/system/media.md:37 src/testing/geisterhand.md:257 src/cli/flags.md:96 -#: src/cli/cache-dir.md:42 src/internals/node-api-host.md:548 -#: src/internals/node-api-host.md:584 src/internals/node-api-host.md:598 -#: src/internals/node-api-host.md:609 +#: src/cli/cache-dir.md:42 src/internals/node-api-host.md:588 +#: src/internals/node-api-host.md:624 src/internals/node-api-host.md:638 +#: src/internals/node-api-host.md:649 msgid "Notes" msgstr "Notas" @@ -10822,16 +10955,17 @@ msgstr "string" #: src/testing/http2-conformance.md:424 src/testing/http2-conformance.md:425 #: src/testing/http2-conformance.md:426 src/testing/http2-conformance.md:427 #: src/testing/http2-conformance.md:428 src/testing/http2-conformance.md:429 -#: src/testing/ci-tiers.md:26 src/testing/ci-tiers.md:27 -#: src/testing/ci-tiers.md:28 src/testing/ci-tiers.md:29 -#: src/testing/ci-tiers.md:30 src/testing/ci-tiers.md:33 -#: src/testing/ci-tiers.md:34 src/testing/ci-tiers.md:35 -#: src/testing/ci-tiers.md:36 src/testing/ci-tiers.md:37 -#: src/testing/ci-tiers.md:38 src/testing/ci-tiers.md:39 -#: src/testing/ci-tiers.md:40 src/testing/ci-tiers.md:41 -#: src/testing/ci-tiers.md:42 src/testing/ci-tiers.md:43 -#: src/testing/ci-tiers.md:44 src/testing/ci-tiers.md:45 -#: src/testing/ci-tiers.md:46 src/testing/ci-tiers.md:47 +#: src/testing/ci-tiers.md:39 src/testing/ci-tiers.md:40 +#: src/testing/ci-tiers.md:41 src/testing/ci-tiers.md:42 +#: src/testing/ci-tiers.md:43 src/testing/ci-tiers.md:45 +#: src/testing/ci-tiers.md:46 src/testing/ci-tiers.md:48 +#: src/testing/ci-tiers.md:49 src/testing/ci-tiers.md:50 +#: src/testing/ci-tiers.md:51 src/testing/ci-tiers.md:52 +#: src/testing/ci-tiers.md:53 src/testing/ci-tiers.md:54 +#: src/testing/ci-tiers.md:55 src/testing/ci-tiers.md:56 +#: src/testing/ci-tiers.md:57 src/testing/ci-tiers.md:58 +#: src/testing/ci-tiers.md:59 src/testing/ci-tiers.md:60 +#: src/testing/ci-tiers.md:61 src/testing/ci-tiers.md:62 #: src/internals/rfc-rooting-by-construction.md:277 #: src/internals/rfc-rooting-by-construction.md:278 #: src/internals/rfc-rooting-by-construction.md:279 @@ -10906,8 +11040,8 @@ msgid "" "Unlike handles and promises, `pod` has no string-only spelling; use object " "form so the field order and scalar ABI types are explicit. `json` is " "parameter-only: it serializes its argument with `JSON.stringify` at the " -"callsite and passes the result in a `string`\\-shaped slot (see \"Param types" -"\")." +"callsite and passes the result in a `string`\\-shaped slot (see \"Param " +"types\")." msgstr "" "`number` es un alias de compatibilidad para `f64`; `js_value` y `boolean` " "son alias de compatibilidad para `jsvalue` y `bool`. El `handle` desnudo es " @@ -11108,7 +11242,7 @@ msgid "symbol string" msgstr "cadena de símbolo" #: src/native-libraries/manifest-v1.md:179 src/cli/app-updates.md:61 -#: src/cli/app-updates.md:66 src/contributing/releasing.md:278 +#: src/cli/app-updates.md:66 src/contributing/releasing.md:297 msgid "none" msgstr "ninguno" @@ -11598,29 +11732,29 @@ msgstr "" #: src/native-libraries/manifest-v1.md:276 msgid "" "Note on `\"string\"` vs. `\"i64_str\"`: both produce a string on the " -"TypeScript side, but they differ in how Rust returns the pointer. Use `" -"\"string\"` / `\"ptr\"` when your `extern \"C\" fn` is declared `-> *const " +"TypeScript side, but they differ in how Rust returns the pointer. Use " +"`\"string\"` / `\"ptr\"` when your `extern \"C\" fn` is declared `-> *const " "u8` (or `*const StringHeader`); use `\"i64_str\"` when it's `-> i64` and the " "value happens to be a `StringHeader` address (closes [\\#222](https://github." "com/PerryTS/perry/issues/222))." msgstr "" "Nota sobre `\"string\"` vs. `\"i64_str\"`: ambos producen una cadena en el " -"lado TypeScript, pero difieren en cómo Rust devuelve el puntero. Use `" -"\"string\"` / `\"ptr\"` cuando su `extern \"C\" fn` esté declarada como `-> " +"lado TypeScript, pero difieren en cómo Rust devuelve el puntero. Use " +"`\"string\"` / `\"ptr\"` cuando su `extern \"C\" fn` esté declarada como `-> " "*const u8` (o `*const StringHeader`); use `\"i64_str\"` cuando sea `-> i64` " "y el valor sea una dirección de `StringHeader` (cierra [\\#222](https://" "github.com/PerryTS/perry/issues/222))." #: src/native-libraries/manifest-v1.md:283 msgid "" -"`\"void\"` is valid only as a return descriptor. `\"buffer+len\"`, `\"json" -"\"`, and `{ \"kind\": \"pod\", ... }` are valid only as parameter " +"`\"void\"` is valid only as a return descriptor. `\"buffer+len\"`, " +"`\"json\"`, and `{ \"kind\": \"pod\", ... }` are valid only as parameter " "descriptors: `\"buffer+len\"` expands one JavaScript argument into two " "native ABI slots, while `pod` lowers one object-shaped argument to a pointer " "to verifier-backed C-layout storage." msgstr "" -"`\"void\"` es válido sólo como descriptor de retorno. `\"buffer+len\"`, `" -"\"json\"` y `{ \"kind\": \"pod\", ... }` son válidos sólo como descriptores " +"`\"void\"` es válido sólo como descriptor de retorno. `\"buffer+len\"`, " +"`\"json\"` y `{ \"kind\": \"pod\", ... }` son válidos sólo como descriptores " "de parámetros: `\"buffer+len\"` expande un argumento JavaScript en dos " "ranuras ABI nativas, mientras que `pod` reduce un argumento en forma de " "objeto a un puntero para el almacenamiento de C-layout con respaldo " @@ -12469,19 +12603,17 @@ msgstr "" #, fuzzy msgid "" "```toml\n" -"[bindings.mongodb]\n" -"crate = \"perry-ext-mongodb\"\n" -"lib = \"perry_ext_mongodb\"\n" +"[bindings.bcrypt]\n" +"crate = \"perry-ext-bcrypt\"\n" +"lib = \"perry_ext_bcrypt\"\n" "tracking = \"#466\"\n" "\n" -"[bindings.mongodb.upstream]\n" -"version = \"7.5.0\" # pinned npm release (immutable dist)\n" -"sha256 = \"4d93c312…\" # sha256 of the registry tarball at pin " +"[bindings.bcrypt.upstream]\n" +"version = \"6.0.0\" # pinned npm release (immutable dist)\n" +"sha256 = \"3b2478cd…\" # sha256 of the registry tarball at pin " "time\n" -"repo = \"https://github.com/mongodb/node-mongodb-native\"\n" -"ref = \"c4368315…\" # publisher's gitHead for the release, when " -"known\n" -"ported-at = \"7.5.0\" # release the wrapper was last REVIEWED " +"repo = \"https://github.com/kelektiv/node.bcrypt.js\"\n" +"ported-at = \"6.0.0\" # release the wrapper was last REVIEWED " "against\n" "date = \"2026-07-30\"\n" "```" @@ -12504,11 +12636,11 @@ msgstr "" "date = \"2026-07-30\"\n" "```" -#: src/native-libraries/upstream-pins.md:25 +#: src/native-libraries/upstream-pins.md:24 msgid "The lock-step rule" msgstr "La regla del paso de bloqueo" -#: src/native-libraries/upstream-pins.md:27 +#: src/native-libraries/upstream-pins.md:26 msgid "" "**`ported-at` must equal `version`.** Re-pinning a binding to a newer " "upstream release without re-reviewing the wrapper against the upstream diff " @@ -12525,15 +12657,15 @@ msgstr "" "que exige: chocar con `version` te obliga a avanzar `ported-at`, lo que " "obliga a la revisión." -#: src/native-libraries/upstream-pins.md:34 +#: src/native-libraries/upstream-pins.md:33 msgid "Exempt entries" msgstr "Entradas exentas" -#: src/native-libraries/upstream-pins.md:36 +#: src/native-libraries/upstream-pins.md:35 msgid "Three kinds of row carry no pin:" msgstr "Tres tipos de fila no llevan alfiler:" -#: src/native-libraries/upstream-pins.md:38 +#: src/native-libraries/upstream-pins.md:37 msgid "" "**Node builtins** (`node-builtin = true`): `zlib`, `events`, `net`, `http`, " "`https`, `http2`, `streams`. Their upstream is Node core, not an npm dist." @@ -12542,7 +12674,7 @@ msgstr "" "`http`, `https`, `http2`, `streams`. Sus aguas arriba son núcleo de nodo, no " "una dist npm." -#: src/native-libraries/upstream-pins.md:40 +#: src/native-libraries/upstream-pins.md:39 msgid "" "**Aliases** (`alias-of = \"\"`): a package subpath (`mysql2/" "promise`) or a bare-name alias (`fetch` → `node-fetch`) that shares its " @@ -12552,11 +12684,11 @@ msgstr "" "promise`) o un alias de nombre desnudo (`fetch` → `node-fetch`) que comparte " "la procedencia de su objetivo." -#: src/native-libraries/upstream-pins.md:43 +#: src/native-libraries/upstream-pins.md:42 msgid "**Perry-owned packages** (`@perryts/*`, `perry/*`)." msgstr "**Paquetes de Perry** (`@perryts/*`, `perry/*`)." -#: src/native-libraries/upstream-pins.md:45 +#: src/native-libraries/upstream-pins.md:44 #, fuzzy msgid "" "Note that a distinct npm package served by a shared wrapper crate is **not** " @@ -12568,11 +12700,11 @@ msgstr "" "utilizan `perry-ext-ioredis` pero se publican y se modifican por separado, " "por lo que cada uno lleva su propio pin." -#: src/native-libraries/upstream-pins.md:49 +#: src/native-libraries/upstream-pins.md:48 msgid "Tooling — `scripts/binding_pins.mjs`" msgstr "Herramientas: `scripts/binding_pins.mjs`" -#: src/native-libraries/upstream-pins.md:52 +#: src/native-libraries/upstream-pins.md:51 #, fuzzy msgid "" "# Provision or bump one pin to a specific version (default: latest stable)\n" @@ -12580,13 +12712,13 @@ msgstr "" "# Provisión o golpe de un pin a una versión específica (por defecto: último " "estable)" -#: src/native-libraries/upstream-pins.md:54 +#: src/native-libraries/upstream-pins.md:53 #, fuzzy msgid "# Provision every currently-unpinned binding at its latest stable\n" msgstr "" "# Provisión de cada vinculante actualmente sin soporte en su último estable" -#: src/native-libraries/upstream-pins.md:57 +#: src/native-libraries/upstream-pins.md:56 #, fuzzy msgid "" "# Offline gate (CI): pins present, lock-stepped, crates exist. Exit 1 on " @@ -12595,7 +12727,7 @@ msgstr "" "# Puerta fuera de línea (CI): los pines presentes, escalonados, cajas " "existen. Salida 1 en cualquier" -#: src/native-libraries/upstream-pins.md:61 +#: src/native-libraries/upstream-pins.md:60 #, fuzzy msgid "" "# Advisory: additionally flag pins whose upstream has a newer stable " @@ -12604,7 +12736,7 @@ msgstr "" "# Asesoramiento: además, marque los pines cuyo upstream tiene una nueva " "versión estable" -#: src/native-libraries/upstream-pins.md:65 +#: src/native-libraries/upstream-pins.md:64 #, fuzzy msgid "" "# Materialize the upstream repo at the pinned ref into gitignored upstream/" @@ -12613,7 +12745,7 @@ msgstr "" "# Materializar la repo aguas arriba en el ref en gitignored aguas arriba/" "" -#: src/native-libraries/upstream-pins.md:71 +#: src/native-libraries/upstream-pins.md:70 msgid "" "Never hand-edit `version` / `sha256` / `ref` — the tarball hash can't be " "recomputed at edit time. Use `--set`, which fetches the registry tarball, " @@ -12624,11 +12756,11 @@ msgstr "" "el registro de tarball, hashes it, registra el `gitHead` del editor, y los " "sellos `ported-at`/`date`." -#: src/native-libraries/upstream-pins.md:75 +#: src/native-libraries/upstream-pins.md:74 msgid "Cadence" msgstr "Cadence" -#: src/native-libraries/upstream-pins.md:77 +#: src/native-libraries/upstream-pins.md:76 msgid "" "The `--check` gate runs on every PR (offline). The weekly dependency-update " "job runs `--check --refresh`, so a newly-soaked upstream release surfaces as " @@ -13011,7 +13143,7 @@ msgid "**Deno**" msgstr "**Deno**" #: src/threading/overview.md:41 src/threading/overview.md:42 -#: src/api/reference.md:530 src/api/reference.md:3640 +#: src/api/reference.md:532 src/api/reference.md:3640 msgid "`Worker`" msgstr "`Worker`" @@ -14584,8 +14716,8 @@ msgid "" " score: u.score * 2,\n" " }))\n" "\n" -" console.log(`parallel-filter-combined active=${active.length} profiles=" -"${profiles.length}`)\n" +" console.log(`parallel-filter-combined active=${active.length} " +"profiles=${profiles.length}`)\n" "}\n" "```" msgstr "" @@ -14609,8 +14741,8 @@ msgstr "" " score: u.score * 2,\n" " }))\n" "\n" -" console.log(`parallel-filter-combined active=${active.length} profiles=" -"${profiles.length}`)\n" +" console.log(`parallel-filter-combined active=${active.length} " +"profiles=${profiles.length}`)\n" "}\n" "```" @@ -15124,8 +15256,8 @@ msgid "" " return { total, count: rawData.items.length }\n" " })\n" "\n" -" console.log(`spawn-api-then-process total=${processed.total} count=" -"${processed.count}`)\n" +" console.log(`spawn-api-then-process total=${processed.total} " +"count=${processed.count}`)\n" "}\n" "```" msgstr "" @@ -15142,8 +15274,8 @@ msgstr "" " return { total, count: rawData.items.length }\n" " })\n" "\n" -" console.log(`spawn-api-then-process total=${processed.total} count=" -"${processed.count}`)\n" +" console.log(`spawn-api-then-process total=${processed.total} " +"count=${processed.count}`)\n" "}\n" "```" @@ -15833,7 +15965,7 @@ msgstr "`
`. **iOS**, " -"**Android**, **Linux/GTK4**, **Windows**, **tvOS**, **visionOS**, and " -"**watchOS** link no-op stubs so cross-platform code compiles everywhere — " -"the table renders nothing and `tableGetSelectedRow` returns `-1`. For " -"production lists on platforms without a real impl, use `LazyVStack` (see " -"[Layout](layout.md))." +"+ `NSScrollView`) and **Android** (scrollable native widget rows); the " +"**Web** target uses an HTML `
`. **iOS**, **Linux/GTK4**, **Windows**, " +"**tvOS**, **visionOS**, and **watchOS** link no-op stubs so cross-platform " +"code compiles everywhere — the table renders nothing and " +"`tableGetSelectedRow` returns `-1`. For production lists on platforms " +"without a real impl, use `LazyVStack` (see [Layout](layout.md))." msgstr "" "**Compatibilidad de plataformas:** la implementación real reside en " "**macOS** (`NSTableView` + `NSScrollView`); el destino **Web** utiliza una " @@ -22424,11 +22613,11 @@ msgstr "" "plataformas sin implementación real, use `LazyVStack` (ver [Layout](layout." "md))." -#: src/ui/table.md:14 +#: src/ui/table.md:15 msgid "Creating a Table" msgstr "Crear una tabla" -#: src/ui/table.md:22 +#: src/ui/table.md:23 msgid "" "`Table(rowCount, colCount, renderCell)` creates a table. The render callback " "receives `(row, col)` and must return a `Widget` (typically `Text(...)`). " @@ -22441,11 +22630,18 @@ msgstr "" "celda, lo que permite que las celdas rendericen imágenes, stacks o " "composites, no solo cadenas de texto simples." -#: src/ui/table.md:28 +#: src/ui/table.md:29 +msgid "" +"Android renders all cells when the table is created or its row count is " +"updated. Headers and rows share column widths, with horizontal and vertical " +"scrolling when the content exceeds the available space." +msgstr "" + +#: src/ui/table.md:33 msgid "Column Headers" msgstr "Encabezados de columna" -#: src/ui/table.md:30 +#: src/ui/table.md:35 msgid "" "```ts\n" "const userTable = Table(users.length, 3, (row: number, col: number) => {\n" @@ -22473,11 +22669,11 @@ msgstr "" "tableSetColumnHeader(userTable, 2, \"Role\")\n" "```" -#: src/ui/table.md:43 +#: src/ui/table.md:48 msgid "Column Widths" msgstr "Anchos de columna" -#: src/ui/table.md:45 +#: src/ui/table.md:50 msgid "" "```ts\n" "tableSetColumnWidth(userTable, 0, 150) // Name column\n" @@ -22491,11 +22687,11 @@ msgstr "" "tableSetColumnWidth(userTable, 2, 100) // Role column\n" "```" -#: src/ui/table.md:51 +#: src/ui/table.md:56 msgid "Row Selection" msgstr "Selección de fila" -#: src/ui/table.md:53 +#: src/ui/table.md:58 msgid "" "```ts\n" "const selectedRow = State(-1)\n" @@ -22521,15 +22717,15 @@ msgstr "" "const current = tableGetSelectedRow(userTable)\n" "```" -#: src/ui/table.md:65 +#: src/ui/table.md:70 msgid "Dynamic Row Count" msgstr "Número de filas dinámico" -#: src/ui/table.md:67 +#: src/ui/table.md:72 msgid "Update the number of rows after creation:" msgstr "Actualizar el número de filas tras la creación:" -#: src/ui/table.md:75 +#: src/ui/table.md:80 msgid "" "```ts\n" "const selectedName = State(\"None\")\n" @@ -22595,11 +22791,11 @@ msgstr "" "})\n" "```" -#: src/ui/table.md:107 +#: src/ui/table.md:112 msgid "Sort, filter, multi-select (issue #473)" msgstr "Ordenar, filtrar, selección múltiple (issue #473)" -#: src/ui/table.md:109 +#: src/ui/table.md:114 msgid "" "Since v0.5.636 the macOS `Table` exposes a column-sort callback, multi-row " "selection, and a passive filter-text slot the user wires to their own row-" @@ -22610,7 +22806,7 @@ msgstr "" "texto de filtro que el usuario conecta a su propia lógica de ocultación de " "filas." -#: src/ui/table.md:113 +#: src/ui/table.md:118 msgid "" "```typescript,no-test\n" "import {\n" @@ -22682,16 +22878,16 @@ msgstr "" "console.log(tableGetFilterText(table));\n" "```" -#: src/ui/table.md:147 +#: src/ui/table.md:152 msgid "" -"These are real impls on macOS via `NSTableView.sortDescriptors` and " -"`selectedRowIndexes`; other platforms link safe-default stubs." +"These are implemented on macOS via `NSTableView.sortDescriptors` and " +"`selectedRowIndexes`, and on Android. On Android, tapping a header toggles " +"its sort direction and invokes the callback; multi-selection toggles rows on " +"tap. The filter slot is passive on both platforms. Other platforms link safe-" +"default stubs." msgstr "" -"Son implementaciones reales en macOS mediante `NSTableView.sortDescriptors` " -"y `selectedRowIndexes`; otras plataformas vinculan stubs con valores " -"predeterminados seguros." -#: src/ui/table.md:154 +#: src/ui/table.md:162 msgid "[Events](events.md) — Event handling" msgstr "[Eventos](events.md) — Manejo de eventos" @@ -23319,15 +23515,17 @@ msgstr "" #: src/ui/multi-window.md:118 msgid "" -"**macOS materials:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, `\"menu" -"\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, `\"windowBackground\"`, `" -"\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, `\"contentBackground\"`, `" -"\"underWindowBackground\"`, `\"underPageBackground\"`" +"**macOS materials:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, " +"`\"menu\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, " +"`\"windowBackground\"`, `\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, " +"`\"contentBackground\"`, `\"underWindowBackground\"`, " +"`\"underPageBackground\"`" msgstr "" -"**Materiales de macOS:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, `" -"\"menu\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, `\"windowBackground" -"\"`, `\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, `\"contentBackground" -"\"`, `\"underWindowBackground\"`, `\"underPageBackground\"`" +"**Materiales de macOS:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, " +"`\"menu\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, " +"`\"windowBackground\"`, `\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, " +"`\"contentBackground\"`, `\"underWindowBackground\"`, " +"`\"underPageBackground\"`" #: src/ui/multi-window.md:125 msgid "`NSVisualEffectView` with the specified material" @@ -24323,13 +24521,13 @@ msgid "" "\n" "const auth = WebView({\n" " url: \"https://accounts.google.com/o/oauth2/auth?client_id=..." -"&redirect_uri=https://myapp.com/oauth/callback&response_type=code&scope=email" -"\",\n" +"&redirect_uri=https://myapp.com/oauth/" +"callback&response_type=code&scope=email\",\n" " // Hard host-level allowlist — blocked at the native delegate\n" " // without round-tripping into TS. Exact match or subdomain match\n" " // (so \"google.com\" allows \"accounts.google.com\").\n" -" allowedDomains: [\"accounts.google.com\", \"google.com\", \"myapp.com" -"\"],\n" +" allowedDomains: [\"accounts.google.com\", \"google.com\", \"myapp." +"com\"],\n" " onShouldNavigate: (url) => {\n" " if (url.startsWith(\"https://myapp.com/oauth/callback?\")) {\n" " const code = new URL(url).searchParams.get(\"code\") ?? \"\"\n" @@ -24352,13 +24550,13 @@ msgstr "" "\n" "const auth = WebView({\n" " url: \"https://accounts.google.com/o/oauth2/auth?client_id=..." -"&redirect_uri=https://myapp.com/oauth/callback&response_type=code&scope=email" -"\",\n" +"&redirect_uri=https://myapp.com/oauth/" +"callback&response_type=code&scope=email\",\n" " // Hard host-level allowlist — blocked at the native delegate\n" " // without round-tripping into TS. Exact match or subdomain match\n" " // (so \"google.com\" allows \"accounts.google.com\").\n" -" allowedDomains: [\"accounts.google.com\", \"google.com\", \"myapp.com" -"\"],\n" +" allowedDomains: [\"accounts.google.com\", \"google.com\", \"myapp." +"com\"],\n" " onShouldNavigate: (url) => {\n" " if (url.startsWith(\"https://myapp.com/oauth/callback?\")) {\n" " const code = new URL(url).searchParams.get(\"code\") ?? \"\"\n" @@ -24932,10 +25130,11 @@ msgid "" "avoids)." msgstr "" "En el target web, el iframe embebido puede usar `window.parent.postMessage` " -"para enviar mensajes, y el host puede usar `window.addEventListener(\"message" -"\", ...)` para recibirlos. Este es un patrón **exclusivo del navegador** — " -"los targets nativos no exponen `postMessage` (ese es el camino de Tauri / " -"Electron que el WebView de Perry evita deliberadamente)." +"para enviar mensajes, y el host puede usar `window." +"addEventListener(\"message\", ...)` para recibirlos. Este es un patrón " +"**exclusivo del navegador** — los targets nativos no exponen `postMessage` " +"(ese es el camino de Tauri / Electron que el WebView de Perry evita " +"deliberadamente)." #: src/ui/webview.md:215 msgid "The portable contract that works on every target:" @@ -25095,8 +25294,8 @@ msgstr "" #: src/tui/overview.md:18 msgid "" -"The smallest interactive `perry/tui` program — a counter that increments on `" -"+`, decrements on `-`, and quits on `q`:" +"The smallest interactive `perry/tui` program — a counter that increments on " +"`+`, decrements on `-`, and quits on `q`:" msgstr "" "El programa `perry/tui` interactivo más pequeño — un contador que incrementa " "con `+`, decrementa con `-` y sale con `q`:" @@ -25978,8 +26177,8 @@ msgid "" msgstr "" "Las dependencias se comparan por identidad de bits usando un hash FNV-1a de " "los valores NaN-boxed de las deps. Un array vacío `[]` produce un hash " -"estable distinto de cero, dando el comportamiento de React \"ejecutar una vez" -"\"; pasar ningún array ejecuta el efecto en cada renderizado." +"estable distinto de cero, dando el comportamiento de React \"ejecutar una " +"vez\"; pasar ningún array ejecuta el efecto en cada renderizado." #: src/tui/hooks.md:66 msgid "" @@ -26189,8 +26388,8 @@ msgid "" "them to your `useInput` handler." msgstr "" "Tab y Shift-Tab ciclan el foco automáticamente — sin código repetitivo. El " -"drenado de entrada del bucle de ejecución gestiona las secuencias de bytes `" -"\\x09` / `\\x1b[Z` antes de reenviarlas a tu handler de `useInput`." +"drenado de entrada del bucle de ejecución gestiona las secuencias de bytes " +"`\\x09` / `\\x1b[Z` antes de reenviarlas a tu handler de `useInput`." #: src/tui/hooks.md:137 msgid "For imperative focus control, pair with `useFocusManager()`:" @@ -26252,8 +26451,8 @@ msgstr "" #: src/tui/hooks.md:161 msgid "" "The `s` argument is the raw byte chunk as a string. ANSI escape sequences " -"like arrow keys arrive as a single chunk (`\\x1b[A`, `\\x1b[B`, `\\x1b[C`, `" -"\\x1b[D`); printable characters as one byte; control codes (Ctrl+C, Tab, " +"like arrow keys arrive as a single chunk (`\\x1b[A`, `\\x1b[B`, `\\x1b[C`, " +"`\\x1b[D`); printable characters as one byte; control codes (Ctrl+C, Tab, " "Enter, Backspace) as their literal byte." msgstr "" "El argumento `s` es el fragmento de bytes en bruto como string. Las " @@ -26898,7 +27097,7 @@ msgstr "Flag de destino" #: src/platforms/overview.md:7 src/platforms/macos.md:20 #: src/platforms/ios.md:46 src/platforms/tvos.md:46 -#: src/platforms/watchos.md:133 src/platforms/android.md:20 +#: src/platforms/watchos.md:133 src/platforms/android.md:25 #: src/platforms/wearos.md:95 src/platforms/windows.md:45 #: src/platforms/linux.md:33 msgid "UI Toolkit" @@ -27261,7 +27460,7 @@ msgid "Perry maps UI widgets to AppKit controls:" msgstr "Perry mapea los widgets de UI a controles de AppKit:" #: src/platforms/macos.md:24 src/platforms/ios.md:50 src/platforms/tvos.md:50 -#: src/platforms/watchos.md:137 src/platforms/android.md:24 +#: src/platforms/watchos.md:137 src/platforms/android.md:29 #: src/platforms/windows.md:49 src/platforms/linux.md:37 #: src/platforms/wasm.md:55 msgid "Perry Widget" @@ -27292,7 +27491,7 @@ msgid "NSPopUpButton" msgstr "NSPopUpButton" #: src/platforms/macos.md:33 src/platforms/ios.md:59 src/platforms/tvos.md:58 -#: src/platforms/watchos.md:148 src/platforms/android.md:33 +#: src/platforms/watchos.md:148 src/platforms/android.md:38 #: src/platforms/windows.md:59 src/platforms/linux.md:47 #: src/widgets/components.md:80 msgid "Image" @@ -27875,7 +28074,7 @@ msgid "See [Widgets (WidgetKit)](../widgets/overview.md) for details." msgstr "" "Consulta [Widgets (WidgetKit)](../widgets/overview.md) para más detalles." -#: src/platforms/ios.md:162 src/platforms/android.md:51 +#: src/platforms/ios.md:162 src/platforms/android.md:56 msgid "Splash Screen" msgstr "Pantalla de inicio (Splash Screen)" @@ -27897,7 +28096,7 @@ msgstr "" "La imagen se centra en 128x128pt con `scaleAspectFit`. Puedes proporcionar " "un storyboard personalizado para tener control total:" -#: src/platforms/ios.md:189 src/platforms/android.md:83 +#: src/platforms/ios.md:189 src/platforms/android.md:88 msgid "" "See [Project Configuration](../getting-started/project-config.md#splash) for " "the full config reference." @@ -27979,7 +28178,7 @@ msgstr "" "inicio de iOS" #: src/platforms/ios.md:210 src/platforms/tvos.md:184 -#: src/platforms/watchos.md:321 src/platforms/android.md:95 +#: src/platforms/watchos.md:321 src/platforms/android.md:100 #: src/platforms/windows.md:146 src/platforms/linux.md:86 #: src/platforms/wasm.md:193 msgid "[Platform Overview](overview.md) — All platforms" @@ -27987,7 +28186,7 @@ msgstr "" "[Descripción general de plataformas](overview.md) — Todas las plataformas" #: src/platforms/ios.md:211 src/platforms/watchos.md:322 -#: src/platforms/android.md:96 src/platforms/windows.md:147 +#: src/platforms/android.md:101 src/platforms/windows.md:147 #: src/platforms/linux.md:87 src/platforms/wasm.md:194 msgid "[UI Overview](../ui/overview.md) — UI system" msgstr "[Descripción general de UI](../ui/overview.md) — Sistema de UI" @@ -28801,7 +29000,7 @@ msgid "Build environment variables" msgstr "Construir variables de entorno" #: src/platforms/watchos.md:82 src/container/overview.md:112 -#: src/cli/flags.md:397 src/cli/flags.md:431 src/cli/perry-toml.md:518 +#: src/cli/flags.md:399 src/cli/flags.md:435 src/cli/perry-toml.md:518 #: src/cli/perry-toml.md:530 src/cli/perry-toml.md:540 msgid "Variable" msgstr "Variable" @@ -28997,7 +29196,7 @@ msgstr "List" msgid "Maps to List on watchOS" msgstr "Se mapea a List en watchOS" -#: src/platforms/watchos.md:153 src/platforms/android.md:39 +#: src/platforms/watchos.md:153 src/platforms/android.md:44 #: src/platforms/linux.md:53 msgid "NavigationStack" msgstr "NavigationStack" @@ -29455,7 +29654,7 @@ msgstr "**arm64_32 se requiere _además_ cuando `MinimumOSVersion < 27.0`.**" msgid "So there are exactly two valid shapes:" msgstr "Así que hay exactamente dos formas válidas:" -#: src/platforms/watchos-app-store.md:17 src/contributing/building.md:27 +#: src/platforms/watchos-app-store.md:17 src/contributing/building.md:29 msgid "Build" msgstr "Compilar" @@ -29562,8 +29761,8 @@ msgstr "" "App Store Connect no tiene una plataforma independiente \"watchOS\" — mira " "los barcos de software **dentro de un registro de aplicaciones iOS**. Cargar " "un reloj `.app` falla en Transporter con `Unknown platform alias: watchOS`. " -"La aplicación de reloj debe estar anidada en un contenedor mínimo iOS \"tubo" -"\":" +"La aplicación de reloj debe estar anidada en un contenedor mínimo iOS " +"\"tubo\":" #: src/platforms/watchos-app-store.md:80 msgid "" @@ -29740,91 +29939,99 @@ msgstr "SDK de Android" msgid "Rust Android targets:" msgstr "Destinos Rust para Android:" -#: src/platforms/android.md:22 +#: src/platforms/android.md:20 +msgid "" +"Local Android and Wear OS runs extract the Gradle project and Kotlin/Java " +"bridge from the Perry executable. Release installs do not need a Perry " +"source checkout or `PERRY_WORKSPACE_ROOT` to obtain this template. The local " +"build still requires the Android SDK, Gradle, and Java toolchain." +msgstr "" + +#: src/platforms/android.md:27 msgid "Perry maps UI widgets to Android views via JNI:" msgstr "Perry mapea los widgets de UI a vistas de Android mediante JNI:" -#: src/platforms/android.md:24 +#: src/platforms/android.md:29 msgid "Android Class" msgstr "Clase de Android" -#: src/platforms/android.md:26 +#: src/platforms/android.md:31 msgid "TextView" msgstr "TextView" -#: src/platforms/android.md:28 +#: src/platforms/android.md:33 msgid "EditText" msgstr "EditText" -#: src/platforms/android.md:29 +#: src/platforms/android.md:34 msgid "EditText (ES_PASSWORD)" msgstr "EditText (ES_PASSWORD)" -#: src/platforms/android.md:30 +#: src/platforms/android.md:35 msgid "Switch" msgstr "Switch" -#: src/platforms/android.md:31 +#: src/platforms/android.md:36 msgid "SeekBar" msgstr "SeekBar" -#: src/platforms/android.md:32 +#: src/platforms/android.md:37 msgid "Spinner + ArrayAdapter" msgstr "Spinner + ArrayAdapter" -#: src/platforms/android.md:33 +#: src/platforms/android.md:38 msgid "ImageView" msgstr "ImageView" -#: src/platforms/android.md:34 +#: src/platforms/android.md:39 msgid "LinearLayout (vertical)" msgstr "LinearLayout (vertical)" -#: src/platforms/android.md:35 +#: src/platforms/android.md:40 msgid "LinearLayout (horizontal)" msgstr "LinearLayout (horizontal)" -#: src/platforms/android.md:36 src/platforms/android.md:39 +#: src/platforms/android.md:41 src/platforms/android.md:44 msgid "FrameLayout" msgstr "FrameLayout" -#: src/platforms/android.md:38 +#: src/platforms/android.md:43 msgid "Canvas + Bitmap" msgstr "Canvas + Bitmap" -#: src/platforms/android.md:41 +#: src/platforms/android.md:46 msgid "Android-Specific APIs" msgstr "APIs específicas de Android" -#: src/platforms/android.md:43 +#: src/platforms/android.md:48 msgid "**Dark mode**: `Configuration.uiMode` detection" msgstr "**Modo oscuro**: Detección mediante `Configuration.uiMode`" -#: src/platforms/android.md:44 +#: src/platforms/android.md:49 msgid "**Preferences**: SharedPreferences" msgstr "**Preferencias**: SharedPreferences" -#: src/platforms/android.md:45 +#: src/platforms/android.md:50 msgid "**Keychain**: Android Keystore" msgstr "**Llavero**: Android Keystore" -#: src/platforms/android.md:46 +#: src/platforms/android.md:51 msgid "**Notifications**: NotificationManager" msgstr "**Notificaciones**: NotificationManager" -#: src/platforms/android.md:47 +#: src/platforms/android.md:52 msgid "**Open URL**: `Intent.ACTION_VIEW`" msgstr "**Abrir URL**: `Intent.ACTION_VIEW`" -#: src/platforms/android.md:48 +#: src/platforms/android.md:53 msgid "**Alerts**: `PerryBridge.showAlert`" msgstr "**Alertas**: `PerryBridge.showAlert`" -#: src/platforms/android.md:49 +#: src/platforms/android.md:54 msgid "**Sheets**: Dialog (modal)" msgstr "**Hojas**: Dialog (modal)" -#: src/platforms/android.md:53 +#: src/platforms/android.md:58 msgid "" "Perry's Android template includes a splash theme (`Theme.Perry.Splash`) that " "displays a `windowBackground` drawable during cold start. Configure it via " @@ -29834,7 +30041,7 @@ msgstr "" "(`Theme.Perry.Splash`) que muestra un drawable `windowBackground` durante el " "arranque en frío. Configúralo mediante `perry.splash` en `package.json`:" -#: src/platforms/android.md:66 +#: src/platforms/android.md:71 msgid "" "The image is centered via a `layer-list` drawable with a solid background " "color. The activity switches to the normal theme in `onCreate` before " @@ -29845,35 +30052,35 @@ msgstr "" "layout, por lo que la pantalla de inicio desaparece tan pronto como la app " "está lista." -#: src/platforms/android.md:68 +#: src/platforms/android.md:73 msgid "For full control, provide custom drawable and theme XML files:" msgstr "" "Para un control total, proporciona archivos XML personalizados de drawable y " "tema:" -#: src/platforms/android.md:85 +#: src/platforms/android.md:90 msgid "Differences from Desktop" msgstr "Diferencias con el escritorio" -#: src/platforms/android.md:87 +#: src/platforms/android.md:92 msgid "**Touch-only**: No hover events, no right-click context menus" msgstr "" "**Solo táctil**: Sin eventos de hover, sin menús contextuales al hacer clic " "derecho" -#: src/platforms/android.md:88 +#: src/platforms/android.md:93 msgid "**Single window**: Multi-window maps to Dialog views" msgstr "**Ventana única**: Las ventanas múltiples se asignan a vistas Dialog" -#: src/platforms/android.md:89 +#: src/platforms/android.md:94 msgid "**Toolbar**: Horizontal LinearLayout" msgstr "**Barra de herramientas**: LinearLayout horizontal" -#: src/platforms/android.md:90 +#: src/platforms/android.md:95 msgid "**Font**: Typeface-based font family support" msgstr "**Fuente**: Soporte de familia de fuentes basado en Typeface" -#: src/platforms/android.md:94 +#: src/platforms/android.md:99 msgid "[Wear OS](wearos.md) — full watch apps on the same Android backend" msgstr "" "[Wear OS](wearos.md) — aplicaciones de reloj completo en el mismo motor " @@ -31069,13 +31276,13 @@ msgstr "" #: src/platforms/windows.md:19 msgid "" -"`perry setup windows` downloads ~700 MB (unpacks to ~1.5 GB) at `" -"%LOCALAPPDATA%\\perry\\windows-sdk` after prompting you to accept the " +"`perry setup windows` downloads ~700 MB (unpacks to ~1.5 GB) at " +"`%LOCALAPPDATA%\\perry\\windows-sdk` after prompting you to accept the " "Microsoft redistributable license. Pass `--accept-license` to skip the " "prompt in CI. Partial downloads resume safely on re-run." msgstr "" -"`perry setup windows` descarga ~700 MB (desempaqueta a ~1,5 GB) en `" -"%LOCALAPPDATA%\\perry\\windows-sdk` tras pedirte que aceptes la licencia " +"`perry setup windows` descarga ~700 MB (desempaqueta a ~1,5 GB) en " +"`%LOCALAPPDATA%\\perry\\windows-sdk` tras pedirte que aceptes la licencia " "redistribuible de Microsoft. Usa `--accept-license` para omitir el aviso en " "CI. Las descargas parciales se reanudan de forma segura al volver a ejecutar." @@ -31285,14 +31492,15 @@ msgstr "`LNK1181: cannot open input file 'user32.lib'`" #: src/platforms/windows.md:115 msgid "" "The linker couldn't find the Windows SDK libraries. Perry probes the " -"registry (`KitsRoot10`) and the standard `Windows Kits\\10\\Lib\\\\um" -"\\x64` install paths; when the probe fails it prints a warning listing the " -"paths it tried. Fixes, in order of preference:" +"registry (`KitsRoot10`) and the standard `Windows " +"Kits\\10\\Lib\\\\um\\x64` install paths; when the probe fails it prints " +"a warning listing the paths it tried. Fixes, in order of preference:" msgstr "" "El linker no pudo encontrar las bibliotecas Windows SDK. Perry sondea el " -"registro (`KitsRoot10`) y las rutas de instalación estándar `Windows Kits" -"\\10\\Lib\\\\um\\x64`; cuando la sonda falla, imprime una advertencia " -"en la que se enumeran las rutas que intentó. Fija, por orden de preferencia:" +"registro (`KitsRoot10`) y las rutas de instalación estándar `Windows " +"Kits\\10\\Lib\\\\um\\x64`; cuando la sonda falla, imprime una " +"advertencia en la que se enumeran las rutas que intentó. Fija, por orden de " +"preferencia:" #: src/platforms/windows.md:117 msgid "" @@ -31816,10 +32024,10 @@ msgid "" "`GetDeviceCaps(LOGPIXELSY)` (Win2000+, dead reliable)." msgstr "" "Retrocede al siguiente nivel en caso de fallo. " -"`set_process_dpi_awareness_compat` termina con `SetProcessDPIAware()` (Vista" -"+, importada de forma directa porque cada versión de Windows compatible la " -"tiene). `get_system_dpi_compat` termina con `GetDeviceCaps(LOGPIXELSY)` " -"(Win2000+, completamente fiable)." +"`set_process_dpi_awareness_compat` termina con `SetProcessDPIAware()` " +"(Vista+, importada de forma directa porque cada versión de Windows " +"compatible la tiene). `get_system_dpi_compat` termina con " +"`GetDeviceCaps(LOGPIXELSY)` (Win2000+, completamente fiable)." #: src/platforms/windows-7.md:88 msgid "" @@ -32964,142 +33172,138 @@ msgstr "" "**bollo:sqlite** / **nodo:sqlite** / **mejor-sqlite3** — SQLite, respaldado " "por el motor nativo de Perry" -#: src/stdlib/overview.md:40 -msgid "**mongodb** — MongoDB client" -msgstr "**mongodb** — cliente MongoDB" - -#: src/stdlib/overview.md:43 +#: src/stdlib/overview.md:42 msgid "**bcrypt** — Password hashing" msgstr "**bcrypt** — Hashing de contraseñas" -#: src/stdlib/overview.md:44 +#: src/stdlib/overview.md:43 msgid "**argon2** — Password hashing (Argon2)" msgstr "**argon2** — Hashing de contraseñas (Argon2)" -#: src/stdlib/overview.md:45 +#: src/stdlib/overview.md:44 msgid "**jsonwebtoken** — JWT signing/verification" msgstr "**jsonwebtoken** — Firma/verificación de JWT" -#: src/stdlib/overview.md:46 +#: src/stdlib/overview.md:45 msgid "**crypto** — Node.js crypto module" msgstr "**crypto** — Módulo crypto de Node.js" -#: src/stdlib/overview.md:47 +#: src/stdlib/overview.md:46 msgid "**ethers** — Ethereum library" msgstr "**ethers** — Biblioteca Ethereum" -#: src/stdlib/overview.md:50 +#: src/stdlib/overview.md:49 msgid "**lodash** — Utility functions" msgstr "**lodash** — Funciones de utilidad" -#: src/stdlib/overview.md:51 +#: src/stdlib/overview.md:50 msgid "**dayjs** / **moment** — Date manipulation" msgstr "**dayjs** / **moment** — Manipulación de fechas" -#: src/stdlib/overview.md:52 +#: src/stdlib/overview.md:51 msgid "**uuid** — UUID generation" msgstr "**uuid** — Generación de UUID" -#: src/stdlib/overview.md:53 +#: src/stdlib/overview.md:52 msgid "**nanoid** — ID generation" msgstr "**nanoid** — Generación de IDs" -#: src/stdlib/overview.md:54 +#: src/stdlib/overview.md:53 msgid "**validator** — String validation" msgstr "**validator** — Validación de cadenas" -#: src/stdlib/overview.md:57 +#: src/stdlib/overview.md:56 msgid "**sharp** — Image processing" msgstr "**sharp** — Procesamiento de imágenes" -#: src/stdlib/overview.md:58 +#: src/stdlib/overview.md:57 msgid "**cheerio** — HTML parsing" msgstr "**cheerio** — Análisis de HTML" -#: src/stdlib/overview.md:59 +#: src/stdlib/overview.md:58 msgid "**nodemailer** — Email sending" msgstr "**nodemailer** — Envío de correos electrónicos" -#: src/stdlib/overview.md:60 +#: src/stdlib/overview.md:59 msgid "**zlib** — Compression" msgstr "**zlib** — Compresión" -#: src/stdlib/overview.md:61 +#: src/stdlib/overview.md:60 msgid "**cron** — Job scheduling" msgstr "**cron** — Programación de tareas" -#: src/stdlib/overview.md:62 +#: src/stdlib/overview.md:61 msgid "**worker_threads** — Background workers" msgstr "**worker_threads** — Workers en segundo plano" -#: src/stdlib/overview.md:63 +#: src/stdlib/overview.md:62 msgid "**exponential-backoff** — Retry logic" msgstr "**exponential-backoff** — Lógica de reintentos" -#: src/stdlib/overview.md:64 +#: src/stdlib/overview.md:63 msgid "**async_hooks** — AsyncLocalStorage" msgstr "**async_hooks** — AsyncLocalStorage" -#: src/stdlib/overview.md:65 +#: src/stdlib/overview.md:64 msgid "**perry/container** — OCI container management" msgstr "**perry/container** — Gestión de contenedores OCI" -#: src/stdlib/overview.md:66 +#: src/stdlib/overview.md:65 msgid "**perry/compose** — Multi-container orchestration" msgstr "**perry/compose** — Orquestación de múltiples contenedores" -#: src/stdlib/overview.md:68 +#: src/stdlib/overview.md:67 msgid "Node.js Built-ins" msgstr "Built-ins de Node.js" -#: src/stdlib/overview.md:69 +#: src/stdlib/overview.md:68 msgid "**fs** — File system" msgstr "**fs** — Sistema de archivos" -#: src/stdlib/overview.md:70 +#: src/stdlib/overview.md:69 msgid "**path** — Path manipulation" msgstr "**path** — Manipulación de rutas" -#: src/stdlib/overview.md:71 +#: src/stdlib/overview.md:70 msgid "**child_process** — Process spawning" msgstr "**child_process** — Creación de procesos" -#: src/stdlib/overview.md:72 +#: src/stdlib/overview.md:71 msgid "**crypto** — Cryptographic functions" msgstr "**crypto** — Funciones criptográficas" -#: src/stdlib/overview.md:76 +#: src/stdlib/overview.md:75 msgid "Perry automatically detects which stdlib features your code uses:" msgstr "" "Perry detecta automáticamente qué características de la stdlib utiliza tu " "código:" -#: src/stdlib/overview.md:78 src/system/preferences.md:8 +#: src/stdlib/overview.md:77 src/system/preferences.md:8 #: src/system/keychain.md:8 msgid "Usage" msgstr "Uso" -#: src/stdlib/overview.md:80 +#: src/stdlib/overview.md:79 msgid "No stdlib imports" msgstr "Sin imports de stdlib" -#: src/stdlib/overview.md:81 +#: src/stdlib/overview.md:80 msgid "fs + path only" msgstr "Solo fs + path" -#: src/stdlib/overview.md:82 +#: src/stdlib/overview.md:81 msgid "Full stdlib" msgstr "stdlib completa" -#: src/stdlib/overview.md:84 +#: src/stdlib/overview.md:83 msgid "The compiler links only the required runtime components." msgstr "El compiler enlaza únicamente los componentes del runtime necesarios." -#: src/stdlib/overview.md:86 src/stdlib/other.md:314 +#: src/stdlib/overview.md:85 src/stdlib/other.md:314 msgid "External native bindings" msgstr "Bindings nativos externos" -#: src/stdlib/overview.md:88 +#: src/stdlib/overview.md:87 msgid "" "Two packages live in their own GitHub repos with their own semver but plug " "into the same well-known registry:" @@ -33107,7 +33311,7 @@ msgstr "" "Dos paquetes viven en sus propios repositorios de GitHub con su propio " "semver, pero se conectan al mismo registro conocido:" -#: src/stdlib/overview.md:91 +#: src/stdlib/overview.md:90 msgid "" "**`@perryts/tursodb`** — Turso (libSQL fork) database client. [PerryTS/" "tursodb-bindings](https://github.com/PerryTS/tursodb-bindings)." @@ -33115,7 +33319,7 @@ msgstr "" "**`@perryts/tursodb`** — Cliente de base de datos Turso (fork de libSQL). " "[PerryTS/tursodb-bindings](https://github.com/PerryTS/tursodb-bindings)." -#: src/stdlib/overview.md:93 +#: src/stdlib/overview.md:92 msgid "" "**`@perryts/iroh`** — Iroh peer-to-peer networking. [PerryTS/iroh-bindings]" "(https://github.com/PerryTS/iroh-bindings)." @@ -33123,34 +33327,34 @@ msgstr "" "**`@perryts/iroh`** — Redes peer-to-peer con Iroh. [PerryTS/iroh-bindings]" "(https://github.com/PerryTS/iroh-bindings)." -#: src/stdlib/overview.md:96 +#: src/stdlib/overview.md:95 msgid "Pure-TypeScript drivers compiled via `compilePackages` (no Rust):" msgstr "" "Drivers en TypeScript puro compilados vía `compilePackages` (sin Rust):" -#: src/stdlib/overview.md:98 +#: src/stdlib/overview.md:97 msgid "**`@perryts/postgres`** — pg-compatible wire-protocol driver." msgstr "" "**`@perryts/postgres`** — Driver de protocolo de wire compatible con pg." -#: src/stdlib/overview.md:99 +#: src/stdlib/overview.md:98 msgid "**`@perryts/mysql`** — mysql2-compatible wire-protocol driver." msgstr "" "**`@perryts/mysql`** — Driver de protocolo de wire compatible con mysql2." -#: src/stdlib/overview.md:100 +#: src/stdlib/overview.md:99 msgid "**`@perryts/mongodb`** — mongodb-compatible wire-protocol driver." msgstr "" "**`@perryts/mongodb`** — Driver de protocolo de wire compatible con mongodb." -#: src/stdlib/overview.md:101 +#: src/stdlib/overview.md:100 msgid "" "**`@perryts/redis`** — Redis / Valkey RESP2 + RESP3 wire-protocol driver." msgstr "" "**`@perryts/redis`** — Driver de protocolo de wire RESP2 + RESP3 para " "Redis / Valkey." -#: src/stdlib/overview.md:103 +#: src/stdlib/overview.md:102 msgid "" "Each of these also runs unmodified on Node.js / Bun. See [Native Bindings — " "Overview](../native-libraries/overview.md) for the contract they follow." @@ -33159,11 +33363,11 @@ msgstr "" "[Native Bindings — Overview](../native-libraries/overview.md) para conocer " "el contrato que siguen." -#: src/stdlib/overview.md:107 +#: src/stdlib/overview.md:106 msgid "compilePackages" msgstr "compilePackages" -#: src/stdlib/overview.md:109 +#: src/stdlib/overview.md:108 msgid "" "For npm packages not natively supported, you can compile pure TypeScript/" "JavaScript packages natively:" @@ -33171,7 +33375,7 @@ msgstr "" "Para paquetes npm que no tienen soporte nativo, puedes compilar paquetes " "TypeScript/JavaScript puros de forma nativa:" -#: src/stdlib/overview.md:119 +#: src/stdlib/overview.md:118 msgid "" "See [Project Configuration](../getting-started/project-config.md) for " "details." @@ -33179,11 +33383,11 @@ msgstr "" "Ver [Configuración del Proyecto](../getting-started/project-config.md) para " "más detalles." -#: src/stdlib/overview.md:121 +#: src/stdlib/overview.md:120 msgid "JavaScript Runtime Fallback" msgstr "Fallback al Runtime JavaScript" -#: src/stdlib/overview.md:123 +#: src/stdlib/overview.md:122 msgid "" "For packages that can't be compiled natively (native addons, dynamic code, " "etc.), Perry includes a QuickJS-based JavaScript runtime as a fallback. The " @@ -33194,7 +33398,7 @@ msgstr "" "QuickJS como alternativa. La superficie exacta de la API es solo interna por " "ahora; el import a continuación es ilustrativo:" -#: src/stdlib/overview.md:125 +#: src/stdlib/overview.md:124 msgid "" "```text\n" "import { jsEval } from \"perry/jsruntime\"; // illustrative — not yet a " @@ -33206,31 +33410,31 @@ msgstr "" "public export\n" "```" -#: src/stdlib/overview.md:131 +#: src/stdlib/overview.md:130 msgid "[File System](fs.md)" msgstr "[Sistema de Archivos](fs.md)" -#: src/stdlib/overview.md:132 src/stdlib/fs.md:100 +#: src/stdlib/overview.md:131 src/stdlib/fs.md:100 msgid "[HTTP & Networking](http.md)" msgstr "[HTTP y Redes](http.md)" -#: src/stdlib/overview.md:133 src/stdlib/http.md:410 +#: src/stdlib/overview.md:132 src/stdlib/http.md:410 msgid "[Databases](database.md)" msgstr "[Bases de Datos](database.md)" -#: src/stdlib/overview.md:134 src/stdlib/database.md:109 +#: src/stdlib/overview.md:133 src/stdlib/database.md:114 msgid "[Cryptography](crypto.md)" msgstr "[Criptografía](crypto.md)" -#: src/stdlib/overview.md:135 +#: src/stdlib/overview.md:134 msgid "[Containers](container.md)" msgstr "[Contenedores](container.md)" -#: src/stdlib/overview.md:136 src/stdlib/crypto.md:89 +#: src/stdlib/overview.md:135 src/stdlib/crypto.md:89 msgid "[Utilities](utilities.md)" msgstr "[Utilidades](utilities.md)" -#: src/stdlib/overview.md:137 src/stdlib/utilities.md:98 +#: src/stdlib/overview.md:136 src/stdlib/utilities.md:98 msgid "[Other Modules](other.md)" msgstr "[Otros Módulos](other.md)" @@ -33438,7 +33642,7 @@ msgstr "" "Pasa rutas de archivo entre límites de hilo y reabre los archivos dentro del " "worker." -#: src/stdlib/fs.md:101 src/stdlib/http.md:411 src/stdlib/database.md:110 +#: src/stdlib/fs.md:101 src/stdlib/http.md:411 src/stdlib/database.md:115 #: src/stdlib/crypto.md:90 src/stdlib/utilities.md:99 src/stdlib/other.md:335 msgid "[Overview](overview.md) — All stdlib modules" msgstr "[Descripción General](overview.md) — Todos los módulos de la stdlib" @@ -33454,13 +33658,14 @@ msgid "Node.js compatibility — `node:http` / `node:https` / `node:http2`" msgstr "Compatibilidad con Node.js — `node:http` / `node:https` / `node:http2`" #: src/stdlib/http.md:7 +#, fuzzy msgid "" "Perry exposes a faithful subset of Node.js's stdlib HTTP server modules on " -"top of hyper + rustls + tokio-tungstenite. The whole shape — handler " -"signature, IncomingMessage / ServerResponse properties + methods, TLS opts, " -"ALPN-negotiated HTTP/2, WebSocket upgrade dispatch — works unmodified, so " -"unmodified Node servers (Express / Koa / Polka / hono via `@hono/node-" -"server` / etc.) compile and run natively (issue #577)." +"top of turnloop (Perry's event loop), rustls and turnloop-websocket. The " +"whole shape — handler signature, IncomingMessage / ServerResponse properties " +"+ methods, TLS opts, ALPN-negotiated HTTP/2, WebSocket upgrade dispatch — " +"works unmodified, so unmodified Node servers (Express / Koa / Polka / hono " +"via `@hono/node-server` / etc.) compile and run natively (issue #577)." msgstr "" "Perry expone un subconjunto fiel de los módulos de servidor HTTP de la " "stdlib de Node.js sobre hyper + rustls + tokio-tungstenite. Toda la interfaz " @@ -34033,8 +34238,8 @@ msgid "" " const data = await response.json()\n" "\n" " // POST request\n" -" const result = await fetch(\"https://jsonplaceholder.typicode.com/posts" -"\", {\n" +" const result = await fetch(\"https://jsonplaceholder.typicode.com/" +"posts\", {\n" " method: \"POST\",\n" " headers: { \"Content-Type\": \"application/json\" },\n" " body: JSON.stringify({ title: \"hello\", body: \"world\", userId: " @@ -34053,8 +34258,8 @@ msgstr "" " const data = await response.json()\n" "\n" " // POST request\n" -" const result = await fetch(\"https://jsonplaceholder.typicode.com/posts" -"\", {\n" +" const result = await fetch(\"https://jsonplaceholder.typicode.com/" +"posts\", {\n" " method: \"POST\",\n" " headers: { \"Content-Type\": \"application/json\" },\n" " body: JSON.stringify({ title: \"hello\", body: \"world\", userId: " @@ -34165,11 +34370,11 @@ msgstr "" #: src/stdlib/http.md:333 msgid "" "For manual routing, create `new WebSocketServer({ noServer: true })` and " -"call `wss.handleUpgrade(req, socket, head, (ws, req) => wss.emit(\"connection" -"\", ws, req))` from the HTTP server's `upgrade` listener. The callback runs " -"once; it controls whether the connection event is emitted. The native HTTP " -"transport performs the handshake before dispatching `upgrade`, as described " -"above." +"call `wss.handleUpgrade(req, socket, head, (ws, req) => wss." +"emit(\"connection\", ws, req))` from the HTTP server's `upgrade` listener. " +"The callback runs once; it controls whether the connection event is emitted. " +"The native HTTP transport performs the handshake before dispatching " +"`upgrade`, as described above." msgstr "" #: src/stdlib/http.md:339 @@ -34551,6 +34756,14 @@ msgstr "MongoDB" #: src/stdlib/database.md:72 msgid "" +"`mongodb` has no native binding: `import { MongoClient } from \"mongodb\"` " +"compiles the real npm `mongodb` driver (and `bson`) from source, so the " +"whole driver API — cursors, `bulkWrite`, sessions and transactions, change " +"streams — behaves as it does on Node." +msgstr "" + +#: src/stdlib/database.md:77 +msgid "" "```typescript\n" "import { MongoClient } from \"mongodb\"\n" "\n" @@ -34561,8 +34774,8 @@ msgid "" " const db = client.db(\"mydb\")\n" " const users = db.collection(\"users\")\n" "\n" -" await users.insertOne({ name: \"Perry\", email: \"perry@example.com" -"\" })\n" +" await users.insertOne({ name: \"Perry\", email: \"perry@example." +"com\" })\n" " const user = await users.findOne({ name: \"Perry\" })\n" " console.log(user)\n" "\n" @@ -34580,8 +34793,8 @@ msgstr "" " const db = client.db(\"mydb\")\n" " const users = db.collection(\"users\")\n" "\n" -" await users.insertOne({ name: \"Perry\", email: \"perry@example.com" -"\" })\n" +" await users.insertOne({ name: \"Perry\", email: \"perry@example." +"com\" })\n" " const user = await users.findOne({ name: \"Perry\" })\n" " console.log(user)\n" "\n" @@ -34589,11 +34802,11 @@ msgstr "" "}\n" "```" -#: src/stdlib/database.md:90 +#: src/stdlib/database.md:95 msgid "Redis" msgstr "Redis" -#: src/stdlib/database.md:92 +#: src/stdlib/database.md:97 msgid "" "```typescript\n" "import Redis from \"ioredis\"\n" @@ -34736,8 +34949,8 @@ msgid "" "\n" "function cryptoExample(): void {\n" " // Hash\n" -" const hash = crypto.createHash(\"sha256\").update(\"data\").digest(\"hex" -"\")\n" +" const hash = crypto.createHash(\"sha256\").update(\"data\")." +"digest(\"hex\")\n" "\n" " // HMAC\n" " const hmac = crypto.createHmac(\"sha256\", \"secret\").update(\"data\")." @@ -34746,8 +34959,8 @@ msgid "" " // Random bytes\n" " const bytes = crypto.randomBytes(32)\n" "\n" -" console.log(`hash_len=${hash.length} hmac_len=${hmac.length} bytes_len=" -"${bytes.length}`)\n" +" console.log(`hash_len=${hash.length} hmac_len=${hmac.length} " +"bytes_len=${bytes.length}`)\n" "}\n" "```" msgstr "" @@ -34756,8 +34969,8 @@ msgstr "" "\n" "function cryptoExample(): void {\n" " // Hash\n" -" const hash = crypto.createHash(\"sha256\").update(\"data\").digest(\"hex" -"\")\n" +" const hash = crypto.createHash(\"sha256\").update(\"data\")." +"digest(\"hex\")\n" "\n" " // HMAC\n" " const hmac = crypto.createHmac(\"sha256\", \"secret\").update(\"data\")." @@ -34766,8 +34979,8 @@ msgstr "" " // Random bytes\n" " const bytes = crypto.randomBytes(32)\n" "\n" -" console.log(`hash_len=${hash.length} hmac_len=${hmac.length} bytes_len=" -"${bytes.length}`)\n" +" console.log(`hash_len=${hash.length} hmac_len=${hmac.length} " +"bytes_len=${bytes.length}`)\n" "}\n" "```" @@ -35028,9 +35241,9 @@ msgstr "" #: src/stdlib/utilities.md:13 #, fuzzy msgid "" -"Use named imports: the default-import receiver form (`import _ from \"lodash" -"\"; _.chunk(...)`) is not routed to these native signatures because it would " -"pass the module object as an extra receiver argument." +"Use named imports: the default-import receiver form (`import _ from " +"\"lodash\"; _.chunk(...)`) is not routed to these native signatures because " +"it would pass the module object as an extra receiver argument." msgstr "" "Use importaciones con nombre: el formulario receptor de importación por " "defecto (`import _ from \"lodash\"; _.chunk(...)`) no se enruta a estas " @@ -36213,61 +36426,62 @@ msgid "[`module`](#module)" msgstr "[`module`](#module)" #: src/api/reference.md:57 -msgid "[`mongodb`](#mongodb)" -msgstr "[`mongodb`](#mongodb)" - -#: src/api/reference.md:58 msgid "[`net`](#net)" msgstr "[`net`](#net)" -#: src/api/reference.md:59 +#: src/api/reference.md:58 msgid "[`node-fetch`](#node-fetch)" msgstr "[`node-fetch`](#node-fetch)" -#: src/api/reference.md:60 +#: src/api/reference.md:59 msgid "[`node-pty`](#node-pty)" msgstr "[`node-pty`](#node-pty)" -#: src/api/reference.md:61 +#: src/api/reference.md:60 msgid "[`nodemailer`](#nodemailer)" msgstr "[`nodemailer`](#nodemailer)" -#: src/api/reference.md:62 +#: src/api/reference.md:61 msgid "[`os`](#os)" msgstr "[`os`](#os)" -#: src/api/reference.md:63 +#: src/api/reference.md:62 msgid "[`path`](#path)" msgstr "[`path`](#path)" -#: src/api/reference.md:64 +#: src/api/reference.md:63 msgid "[`path/posix`](#pathposix)" msgstr "[`path/posix`](#pathposix)" -#: src/api/reference.md:65 +#: src/api/reference.md:64 msgid "[`path/win32`](#pathwin32)" msgstr "[`path/win32`](#pathwin32)" -#: src/api/reference.md:66 +#: src/api/reference.md:65 msgid "[`perf_hooks`](#perf_hooks)" msgstr "[`perf_hooks`](#perf_hooks)" -#: src/api/reference.md:67 +#: src/api/reference.md:66 msgid "[`perry`](#perry)" msgstr "[`perry`](#perry)" -#: src/api/reference.md:68 +#: src/api/reference.md:67 msgid "[`perry/ads`](#perryads)" msgstr "[`perry/ads`](#perryads)" -#: src/api/reference.md:69 +#: src/api/reference.md:68 msgid "[`perry/audio`](#perryaudio)" msgstr "[`perry/audio`](#perryaudio)" -#: src/api/reference.md:70 +#: src/api/reference.md:69 msgid "[`perry/background`](#perrybackground)" msgstr "[`perry/background`](#perrybackground)" +#: src/api/reference.md:70 +#, fuzzy +msgid "[`perry/component`](#perrycomponent)" +msgstr "[`perry/compose`](#perrycompose)" + #: src/api/reference.md:71 msgid "[`perry/compose`](#perrycompose)" msgstr "[`perry/compose`](#perrycompose)" @@ -36478,25 +36692,25 @@ msgstr "`@lydell/node-pty`" #: src/api/reference.md:188 src/api/reference.md:194 src/api/reference.md:204 #: src/api/reference.md:216 src/api/reference.md:228 src/api/reference.md:262 #: src/api/reference.md:296 src/api/reference.md:324 src/api/reference.md:331 -#: src/api/reference.md:355 src/api/reference.md:377 src/api/reference.md:424 -#: src/api/reference.md:434 src/api/reference.md:454 src/api/reference.md:465 -#: src/api/reference.md:489 src/api/reference.md:511 src/api/reference.md:532 -#: src/api/reference.md:557 src/api/reference.md:838 src/api/reference.md:915 -#: src/api/reference.md:964 src/api/reference.md:983 src/api/reference.md:1092 -#: src/api/reference.md:1170 src/api/reference.md:1194 -#: src/api/reference.md:1210 src/api/reference.md:1262 -#: src/api/reference.md:1268 src/api/reference.md:1293 -#: src/api/reference.md:1398 src/api/reference.md:1457 -#: src/api/reference.md:1656 src/api/reference.md:1680 -#: src/api/reference.md:1732 src/api/reference.md:1763 -#: src/api/reference.md:1779 src/api/reference.md:1818 -#: src/api/reference.md:1857 src/api/reference.md:1884 -#: src/api/reference.md:2016 src/api/reference.md:2022 -#: src/api/reference.md:2032 src/api/reference.md:2040 -#: src/api/reference.md:2072 src/api/reference.md:2098 -#: src/api/reference.md:2124 src/api/reference.md:2160 -#: src/api/reference.md:2178 src/api/reference.md:2189 -#: src/api/reference.md:2201 src/api/reference.md:2230 +#: src/api/reference.md:355 src/api/reference.md:377 src/api/reference.md:426 +#: src/api/reference.md:436 src/api/reference.md:456 src/api/reference.md:467 +#: src/api/reference.md:491 src/api/reference.md:513 src/api/reference.md:534 +#: src/api/reference.md:559 src/api/reference.md:840 src/api/reference.md:917 +#: src/api/reference.md:966 src/api/reference.md:985 src/api/reference.md:1094 +#: src/api/reference.md:1172 src/api/reference.md:1196 +#: src/api/reference.md:1212 src/api/reference.md:1264 +#: src/api/reference.md:1270 src/api/reference.md:1295 +#: src/api/reference.md:1400 src/api/reference.md:1459 +#: src/api/reference.md:1658 src/api/reference.md:1682 +#: src/api/reference.md:1734 src/api/reference.md:1765 +#: src/api/reference.md:1781 src/api/reference.md:1820 +#: src/api/reference.md:1867 src/api/reference.md:2001 +#: src/api/reference.md:2007 src/api/reference.md:2017 +#: src/api/reference.md:2025 src/api/reference.md:2057 +#: src/api/reference.md:2083 src/api/reference.md:2109 +#: src/api/reference.md:2145 src/api/reference.md:2163 +#: src/api/reference.md:2174 src/api/reference.md:2186 +#: src/api/reference.md:2215 src/api/reference.md:2223 #: src/api/reference.md:2238 src/api/reference.md:2252 #: src/api/reference.md:2280 src/api/reference.md:2294 #: src/api/reference.md:2302 src/api/reference.md:2315 @@ -36524,26 +36738,26 @@ msgstr "`@lydell/node-pty`" msgid "Methods" msgstr "Métodos" -#: src/api/reference.md:128 src/api/reference.md:397 src/api/reference.md:426 -#: src/api/reference.md:519 src/api/reference.md:2024 src/api/reference.md:2450 +#: src/api/reference.md:128 src/api/reference.md:399 src/api/reference.md:428 +#: src/api/reference.md:521 src/api/reference.md:2009 src/api/reference.md:2450 msgid "`spawn` — module" msgstr "`spawn` — módulo" #: src/api/reference.md:130 src/api/reference.md:251 src/api/reference.md:285 -#: src/api/reference.md:317 src/api/reference.md:364 src/api/reference.md:409 -#: src/api/reference.md:428 src/api/reference.md:446 src/api/reference.md:482 -#: src/api/reference.md:522 src/api/reference.md:539 src/api/reference.md:586 -#: src/api/reference.md:902 src/api/reference.md:953 src/api/reference.md:973 -#: src/api/reference.md:1027 src/api/reference.md:1136 -#: src/api/reference.md:1186 src/api/reference.md:1243 -#: src/api/reference.md:1276 src/api/reference.md:1391 -#: src/api/reference.md:1436 src/api/reference.md:1641 -#: src/api/reference.md:1666 src/api/reference.md:1722 -#: src/api/reference.md:1751 src/api/reference.md:1773 -#: src/api/reference.md:1844 src/api/reference.md:2026 -#: src/api/reference.md:2063 src/api/reference.md:2088 -#: src/api/reference.md:2114 src/api/reference.md:2140 -#: src/api/reference.md:2170 src/api/reference.md:2183 +#: src/api/reference.md:317 src/api/reference.md:364 src/api/reference.md:411 +#: src/api/reference.md:430 src/api/reference.md:448 src/api/reference.md:484 +#: src/api/reference.md:524 src/api/reference.md:541 src/api/reference.md:588 +#: src/api/reference.md:904 src/api/reference.md:955 src/api/reference.md:975 +#: src/api/reference.md:1029 src/api/reference.md:1138 +#: src/api/reference.md:1188 src/api/reference.md:1245 +#: src/api/reference.md:1278 src/api/reference.md:1393 +#: src/api/reference.md:1438 src/api/reference.md:1643 +#: src/api/reference.md:1668 src/api/reference.md:1724 +#: src/api/reference.md:1753 src/api/reference.md:1775 +#: src/api/reference.md:1846 src/api/reference.md:2011 +#: src/api/reference.md:2048 src/api/reference.md:2073 +#: src/api/reference.md:2099 src/api/reference.md:2125 +#: src/api/reference.md:2155 src/api/reference.md:2168 #: src/api/reference.md:2365 src/api/reference.md:2685 #: src/api/reference.md:2769 src/api/reference.md:2812 #: src/api/reference.md:2830 src/api/reference.md:2893 @@ -36560,16 +36774,16 @@ msgstr "`spawn` — módulo" msgid "Properties" msgstr "Propiedades" -#: src/api/reference.md:132 src/api/reference.md:320 src/api/reference.md:430 -#: src/api/reference.md:524 src/api/reference.md:543 src/api/reference.md:823 -#: src/api/reference.md:955 src/api/reference.md:975 src/api/reference.md:1083 -#: src/api/reference.md:1162 src/api/reference.md:1247 -#: src/api/reference.md:1439 src/api/reference.md:1669 -#: src/api/reference.md:1755 src/api/reference.md:1775 -#: src/api/reference.md:1852 src/api/reference.md:2028 -#: src/api/reference.md:2067 src/api/reference.md:2090 -#: src/api/reference.md:2116 src/api/reference.md:2142 -#: src/api/reference.md:2173 src/api/reference.md:2814 +#: src/api/reference.md:132 src/api/reference.md:320 src/api/reference.md:432 +#: src/api/reference.md:526 src/api/reference.md:545 src/api/reference.md:825 +#: src/api/reference.md:957 src/api/reference.md:977 src/api/reference.md:1085 +#: src/api/reference.md:1164 src/api/reference.md:1249 +#: src/api/reference.md:1441 src/api/reference.md:1671 +#: src/api/reference.md:1757 src/api/reference.md:1777 +#: src/api/reference.md:1854 src/api/reference.md:2013 +#: src/api/reference.md:2052 src/api/reference.md:2075 +#: src/api/reference.md:2101 src/api/reference.md:2127 +#: src/api/reference.md:2158 src/api/reference.md:2814 #: src/api/reference.md:2832 src/api/reference.md:2898 #: src/api/reference.md:2912 src/api/reference.md:3102 #: src/api/reference.md:3137 src/api/reference.md:3208 @@ -36593,11 +36807,11 @@ msgstr "`getEventsSince` — módulo" #: src/api/reference.md:140 src/api/reference.md:148 src/api/reference.md:154 #: src/api/reference.md:160 src/api/reference.md:166 src/api/reference.md:172 #: src/api/reference.md:178 src/api/reference.md:184 src/api/reference.md:190 -#: src/api/reference.md:969 +#: src/api/reference.md:971 msgid "`subscribe` — module" msgstr "`subscribe` — módulo" -#: src/api/reference.md:141 src/api/reference.md:971 +#: src/api/reference.md:141 src/api/reference.md:973 msgid "`unsubscribe` — module" msgstr "`unsubscribe` — módulo" @@ -36690,11 +36904,11 @@ msgid "`use` — instance" msgstr "`use` — instancia" #: src/api/reference.md:218 src/api/reference.md:327 src/api/reference.md:390 -#: src/api/reference.md:879 +#: src/api/reference.md:881 msgid "`hash` — module" msgstr "`hash` — módulo" -#: src/api/reference.md:219 src/api/reference.md:900 +#: src/api/reference.md:219 src/api/reference.md:902 msgid "`verify` — module" msgstr "`verify` — módulo" @@ -36719,7 +36933,7 @@ msgid "`deepStrictEqual` — module" msgstr "`deepStrictEqual` — módulo" #: src/api/reference.md:232 src/api/reference.md:266 src/api/reference.md:336 -#: src/api/reference.md:1264 src/api/reference.md:2018 +#: src/api/reference.md:1266 src/api/reference.md:2003 #: src/api/reference.md:2922 src/api/reference.md:3026 #: src/api/reference.md:3219 msgid "`default` — module" @@ -36857,7 +37071,7 @@ msgstr "`executionAsyncId` — módulo" msgid "`executionAsyncResource` — module" msgstr "`executionAsyncResource` — módulo" -#: src/api/reference.md:309 src/api/reference.md:1180 +#: src/api/reference.md:309 src/api/reference.md:1182 msgid "`exit` — instance" msgstr "`exit` — instancia" @@ -36865,7 +37079,7 @@ msgstr "`exit` — instancia" msgid "`getStore` — instance" msgstr "`getStore` — instancia" -#: src/api/reference.md:311 src/api/reference.md:344 src/api/reference.md:1184 +#: src/api/reference.md:311 src/api/reference.md:344 src/api/reference.md:1186 #: src/api/reference.md:2990 msgid "`run` — instance" msgstr "`run` — instancia" @@ -36898,9 +37112,8 @@ msgstr "`compare` — módulo" msgid "`all` — instance" msgstr "`all` — instancia" -#: src/api/reference.md:334 src/api/reference.md:1859 src/api/reference.md:2840 -#: src/api/reference.md:2867 src/api/reference.md:2966 -#: src/api/reference.md:3696 +#: src/api/reference.md:334 src/api/reference.md:2840 src/api/reference.md:2867 +#: src/api/reference.md:2966 src/api/reference.md:3696 msgid "`close` — instance" msgstr "`close` — instancia" @@ -36944,7 +37157,7 @@ msgstr "`transaction` — instancia" msgid "`buffer`" msgstr "`buffer`" -#: src/api/reference.md:351 src/api/reference.md:1256 src/api/reference.md:2010 +#: src/api/reference.md:351 src/api/reference.md:1258 src/api/reference.md:1995 msgid "`Blob`" msgstr "`Blob`" @@ -36984,10 +37197,10 @@ msgstr "`transcode` — módulo" msgid "`INSPECT_MAX_BYTES`" msgstr "`INSPECT_MAX_BYTES`" -#: src/api/reference.md:367 src/api/reference.md:584 src/api/reference.md:905 -#: src/api/reference.md:1393 src/api/reference.md:1438 -#: src/api/reference.md:1668 src/api/reference.md:1851 -#: src/api/reference.md:2066 src/api/reference.md:2172 +#: src/api/reference.md:367 src/api/reference.md:586 src/api/reference.md:907 +#: src/api/reference.md:1395 src/api/reference.md:1440 +#: src/api/reference.md:1670 src/api/reference.md:1853 +#: src/api/reference.md:2051 src/api/reference.md:2157 #: src/api/reference.md:3002 src/api/reference.md:3612 #: src/api/reference.md:3786 msgid "`constants`" @@ -37034,8 +37247,8 @@ msgstr "`range` — módulo" msgid "`build` — module" msgstr "`bind` — módulo" -#: src/api/reference.md:384 src/api/reference.md:1658 src/api/reference.md:1861 -#: src/api/reference.md:1911 src/api/reference.md:3305 +#: src/api/reference.md:384 src/api/reference.md:1660 src/api/reference.md:1894 +#: src/api/reference.md:3305 msgid "`connect` — module" msgstr "`connect` — módulo" @@ -37092,3401 +37305,3415 @@ msgstr "`start` — instancia _(clase: `GCProfiler`)_" msgid "`serve` — module" msgstr "`Server` — módulo" +#: src/api/reference.md:397 +#, fuzzy +msgid "`sleep` — module" +msgstr "`seek` — módulo" + #: src/api/reference.md:398 +#, fuzzy +msgid "`sleepSync` — module" +msgstr "`execSync` — módulo" + +#: src/api/reference.md:400 msgid "`stringWidth` — module" msgstr "`stringWidth` — módulo" -#: src/api/reference.md:399 +#: src/api/reference.md:401 #, fuzzy msgid "`stripANSI` — module" msgstr "`strict` — módulo" -#: src/api/reference.md:400 +#: src/api/reference.md:402 #, fuzzy msgid "`transform` — instance _(class: `Transpiler`)_" msgstr "`start` — instancia _(clase: `GCProfiler`)_" -#: src/api/reference.md:401 +#: src/api/reference.md:403 #, fuzzy msgid "`transformSync` — instance _(class: `Transpiler`)_" msgstr "`transaction` — instancia _(clase: `Database`)_" -#: src/api/reference.md:402 +#: src/api/reference.md:404 msgid "`unsupported` — module" msgstr "`unsupported` — módulo" -#: src/api/reference.md:403 +#: src/api/reference.md:405 #, fuzzy msgid "`which` — module" msgstr "`watch` — módulo" -#: src/api/reference.md:404 +#: src/api/reference.md:406 #, fuzzy msgid "`wrapAnsi` — module" msgstr "`warn` — módulo" -#: src/api/reference.md:405 src/api/reference.md:1384 +#: src/api/reference.md:407 src/api/reference.md:1386 msgid "`write` — module" msgstr "`write` — módulo" -#: src/api/reference.md:406 src/api/reference.md:3780 +#: src/api/reference.md:408 src/api/reference.md:3780 msgid "`zstdDecompress` — module" msgstr "`zstdDecompress` — módulo" -#: src/api/reference.md:407 src/api/reference.md:3781 +#: src/api/reference.md:409 src/api/reference.md:3781 msgid "`zstdDecompressSync` — module" msgstr "`zstdDecompressSync` — módulo" -#: src/api/reference.md:411 +#: src/api/reference.md:413 #, fuzzy msgid "`JSONL`" msgstr "JSON" -#: src/api/reference.md:412 +#: src/api/reference.md:414 msgid "`TOML`" msgstr "" -#: src/api/reference.md:413 +#: src/api/reference.md:415 msgid "`YAML`" msgstr "" -#: src/api/reference.md:414 +#: src/api/reference.md:416 msgid "`ant`" msgstr "" -#: src/api/reference.md:415 src/api/reference.md:2185 +#: src/api/reference.md:417 src/api/reference.md:2170 msgid "`isStandaloneExecutable`" msgstr "`isStandaloneExecutable`" -#: src/api/reference.md:416 +#: src/api/reference.md:418 #, fuzzy msgid "`semver`" msgstr "`server`" -#: src/api/reference.md:417 src/api/reference.md:2796 +#: src/api/reference.md:419 src/api/reference.md:2796 msgid "`stderr`" msgstr "`stderr`" -#: src/api/reference.md:418 src/api/reference.md:2797 +#: src/api/reference.md:420 src/api/reference.md:2797 msgid "`stdin`" msgstr "`stdin`" -#: src/api/reference.md:419 src/api/reference.md:2798 +#: src/api/reference.md:421 src/api/reference.md:2798 msgid "`stdout`" msgstr "`stdout`" -#: src/api/reference.md:420 src/api/reference.md:2800 src/api/reference.md:2816 +#: src/api/reference.md:422 src/api/reference.md:2800 src/api/reference.md:2816 #: src/updater/overview.md:109 src/cli/perry-toml.md:120 msgid "`version`" msgstr "`version`" -#: src/api/reference.md:422 +#: src/api/reference.md:424 #, fuzzy msgid "`bun-pty`" msgstr "`node-pty`" -#: src/api/reference.md:432 +#: src/api/reference.md:434 msgid "`bun:ffi`" msgstr "`bun:ffi`" -#: src/api/reference.md:436 +#: src/api/reference.md:438 msgid "`CFunction` — module" msgstr "`CFunction` — módulo" -#: src/api/reference.md:437 +#: src/api/reference.md:439 msgid "`CString` — module" msgstr "`CString` — módulo" -#: src/api/reference.md:438 +#: src/api/reference.md:440 msgid "`JSCallback` — module" msgstr "`JSCallback` — módulo" -#: src/api/reference.md:439 src/api/reference.md:1270 src/api/reference.md:2732 +#: src/api/reference.md:441 src/api/reference.md:1272 src/api/reference.md:2732 msgid "`dlopen` — module" msgstr "`dlopen` — módulo" -#: src/api/reference.md:440 +#: src/api/reference.md:442 msgid "`linkSymbols` — module" msgstr "`linkSymbols` — módulo" -#: src/api/reference.md:441 +#: src/api/reference.md:443 msgid "`ptr` — module" msgstr "`ptr` — módulo" -#: src/api/reference.md:442 src/api/reference.md:1272 +#: src/api/reference.md:444 src/api/reference.md:1274 msgid "`toArrayBuffer` — module" msgstr "`toArrayBuffer` — módulo" -#: src/api/reference.md:443 src/api/reference.md:1273 +#: src/api/reference.md:445 src/api/reference.md:1275 msgid "`toBuffer` — module" msgstr "`toBuffer` — módulo" -#: src/api/reference.md:444 +#: src/api/reference.md:446 msgid "`viewSource` — module" msgstr "`viewSource` — módulo" -#: src/api/reference.md:448 +#: src/api/reference.md:450 msgid "`FFIType`" msgstr "`FFIType`" -#: src/api/reference.md:449 +#: src/api/reference.md:451 msgid "`read`" msgstr "`read`" -#: src/api/reference.md:450 src/api/reference.md:1278 +#: src/api/reference.md:452 src/api/reference.md:1280 msgid "`suffix`" msgstr "`suffix`" -#: src/api/reference.md:452 +#: src/api/reference.md:454 #, fuzzy msgid "`bun:jsc`" msgstr "`bun`" -#: src/api/reference.md:456 +#: src/api/reference.md:458 #, fuzzy msgid "`heapStats` — module" msgstr "`State` — módulo" -#: src/api/reference.md:458 +#: src/api/reference.md:460 msgid "`bun:sqlite`" msgstr "`bun:sqlite`" -#: src/api/reference.md:462 +#: src/api/reference.md:464 msgid "`Database`" msgstr "`Database`" -#: src/api/reference.md:463 +#: src/api/reference.md:465 msgid "`Statement`" msgstr "`Statement`" -#: src/api/reference.md:467 +#: src/api/reference.md:469 msgid "`Database` — module" msgstr "`Database` — módulo" -#: src/api/reference.md:468 +#: src/api/reference.md:470 msgid "`all` — instance _(class: `Statement`)_" msgstr "`all` — instancia _(clase: `Statement`)_" -#: src/api/reference.md:469 +#: src/api/reference.md:471 msgid "`close` — instance _(class: `Database`)_" msgstr "`close` — instancia _(clase: `Database`)_" -#: src/api/reference.md:470 +#: src/api/reference.md:472 msgid "`finalize` — instance _(class: `Statement`)_" msgstr "`finalize` — instancia _(clase: `Statement`)_" -#: src/api/reference.md:471 +#: src/api/reference.md:473 msgid "`get` — instance _(class: `Statement`)_" msgstr "`get` — instancia _(clase: `Statement`)_" -#: src/api/reference.md:472 +#: src/api/reference.md:474 msgid "`loadExtension` — instance _(class: `Database`)_" msgstr "`loadExtension` — instancia _(clase: `Database`)_" -#: src/api/reference.md:473 +#: src/api/reference.md:475 msgid "`prepare` — instance _(class: `Database`)_" msgstr "`prepare` — instancia _(clase: `Database`)_" -#: src/api/reference.md:474 +#: src/api/reference.md:476 msgid "`query` — instance _(class: `Database`)_" msgstr "`query` — instancia _(clase: `Database`)_" -#: src/api/reference.md:475 +#: src/api/reference.md:477 msgid "`run` — instance _(class: `Database`)_" msgstr "`run` — instancia _(clase: `Database`)_" -#: src/api/reference.md:476 +#: src/api/reference.md:478 msgid "`run` — instance _(class: `Statement`)_" msgstr "`run` — instancia _(clase: `Statement`)_" -#: src/api/reference.md:477 +#: src/api/reference.md:479 msgid "`safeIntegers` — instance _(class: `Statement`)_" msgstr "`safeIntegers` — instancia _(clase: `Statement`)_" -#: src/api/reference.md:478 +#: src/api/reference.md:480 msgid "`serialize` — instance _(class: `Database`)_" msgstr "`serialize` — instancia _(clase: `Database`)_" -#: src/api/reference.md:479 +#: src/api/reference.md:481 msgid "`transaction` — instance _(class: `Database`)_" msgstr "`transaction` — instancia _(clase: `Database`)_" -#: src/api/reference.md:480 +#: src/api/reference.md:482 msgid "`values` — instance _(class: `Statement`)_" msgstr "`values` — instancia _(clase: `Statement`)_" -#: src/api/reference.md:484 +#: src/api/reference.md:486 msgid "`filename`" msgstr "`filename`" -#: src/api/reference.md:485 +#: src/api/reference.md:487 msgid "`inTransaction`" msgstr "`inTransaction`" -#: src/api/reference.md:491 +#: src/api/reference.md:493 msgid "`attr` — instance" msgstr "`attr` — instancia" -#: src/api/reference.md:492 +#: src/api/reference.md:494 msgid "`children` — instance" msgstr "`children` — instancia" -#: src/api/reference.md:493 +#: src/api/reference.md:495 msgid "`eq` — instance" msgstr "`eq` — instancia" -#: src/api/reference.md:494 src/api/reference.md:1867 +#: src/api/reference.md:496 msgid "`find` — instance" msgstr "`find` — instancia" -#: src/api/reference.md:495 +#: src/api/reference.md:497 msgid "`first` — instance" msgstr "`first` — instancia" -#: src/api/reference.md:496 +#: src/api/reference.md:498 msgid "`hasClass` — instance" msgstr "`hasClass` — instancia" -#: src/api/reference.md:497 +#: src/api/reference.md:499 msgid "`html` — instance" msgstr "`html` — instancia" -#: src/api/reference.md:498 +#: src/api/reference.md:500 msgid "`last` — instance" msgstr "`last` — instancia" -#: src/api/reference.md:499 +#: src/api/reference.md:501 msgid "`length` — instance" msgstr "`length` — instancia" -#: src/api/reference.md:500 +#: src/api/reference.md:502 msgid "`load` — module" msgstr "`load` — módulo" -#: src/api/reference.md:501 +#: src/api/reference.md:503 msgid "`parent` — instance" msgstr "`parent` — instancia" -#: src/api/reference.md:502 +#: src/api/reference.md:504 msgid "`select` — instance" msgstr "`select` — instancia" -#: src/api/reference.md:503 +#: src/api/reference.md:505 msgid "`text` — instance" msgstr "`text` — instancia" -#: src/api/reference.md:505 +#: src/api/reference.md:507 msgid "`child_process`" msgstr "`child_process`" -#: src/api/reference.md:509 +#: src/api/reference.md:511 msgid "`ChildProcess`" msgstr "`ChildProcess`" -#: src/api/reference.md:513 +#: src/api/reference.md:515 msgid "`_forkChild` — module" msgstr "`_forkChild` — módulo" -#: src/api/reference.md:514 src/api/reference.md:2242 src/api/reference.md:2259 +#: src/api/reference.md:516 src/api/reference.md:2242 src/api/reference.md:2259 #: src/api/reference.md:2284 msgid "`exec` — module" msgstr "`exec` — módulo" -#: src/api/reference.md:515 +#: src/api/reference.md:517 msgid "`execFile` — module" msgstr "`execFile` — módulo" -#: src/api/reference.md:516 +#: src/api/reference.md:518 msgid "`execFileSync` — module" msgstr "`execFileSync` — módulo" -#: src/api/reference.md:517 +#: src/api/reference.md:519 msgid "`execSync` — module" msgstr "`execSync` — módulo" -#: src/api/reference.md:518 src/api/reference.md:535 +#: src/api/reference.md:520 src/api/reference.md:537 msgid "`fork` — module" msgstr "`fork` — módulo" -#: src/api/reference.md:520 +#: src/api/reference.md:522 msgid "`spawnSync` — module" msgstr "`spawnSync` — módulo" -#: src/api/reference.md:526 +#: src/api/reference.md:528 msgid "`cluster`" msgstr "`cluster`" -#: src/api/reference.md:534 +#: src/api/reference.md:536 msgid "`disconnect` — module" msgstr "`disconnect` — módulo" -#: src/api/reference.md:536 +#: src/api/reference.md:538 msgid "`setupMaster` — module" msgstr "`setupMaster` — módulo" -#: src/api/reference.md:537 +#: src/api/reference.md:539 msgid "`setupPrimary` — module" msgstr "`setupPrimary` — módulo" -#: src/api/reference.md:541 +#: src/api/reference.md:543 msgid "`SCHED_NONE`" msgstr "`SCHED_NONE`" -#: src/api/reference.md:542 +#: src/api/reference.md:544 msgid "`SCHED_RR`" msgstr "`SCHED_RR`" -#: src/api/reference.md:544 +#: src/api/reference.md:546 msgid "`isMaster`" msgstr "`isMaster`" -#: src/api/reference.md:545 +#: src/api/reference.md:547 msgid "`isPrimary`" msgstr "`isPrimary`" -#: src/api/reference.md:546 +#: src/api/reference.md:548 msgid "`isWorker`" msgstr "`isWorker`" -#: src/api/reference.md:547 +#: src/api/reference.md:549 msgid "`schedulingPolicy`" msgstr "`schedulingPolicy`" -#: src/api/reference.md:548 +#: src/api/reference.md:550 msgid "`settings`" msgstr "`settings`" -#: src/api/reference.md:549 +#: src/api/reference.md:551 msgid "`workers`" msgstr "`workers`" -#: src/api/reference.md:551 src/api/reference.md:1754 +#: src/api/reference.md:553 src/api/reference.md:1756 msgid "`console`" msgstr "`console`" -#: src/api/reference.md:555 +#: src/api/reference.md:557 msgid "`Console`" msgstr "`Console`" -#: src/api/reference.md:559 +#: src/api/reference.md:561 msgid "`assert` — module" msgstr "`assert` — módulo" -#: src/api/reference.md:560 +#: src/api/reference.md:562 msgid "`clear` — module" msgstr "`clear` — módulo" -#: src/api/reference.md:561 +#: src/api/reference.md:563 msgid "`context` — module" msgstr "`context` — módulo" -#: src/api/reference.md:562 +#: src/api/reference.md:564 msgid "`count` — module" msgstr "`count` — módulo" -#: src/api/reference.md:563 +#: src/api/reference.md:565 msgid "`countReset` — module" msgstr "`countReset` — módulo" -#: src/api/reference.md:564 +#: src/api/reference.md:566 msgid "`createTask` — module" msgstr "`createTask` — módulo" -#: src/api/reference.md:565 src/api/reference.md:3182 src/api/reference.md:3444 +#: src/api/reference.md:567 src/api/reference.md:3182 src/api/reference.md:3444 msgid "`debug` — module" msgstr "`debug` — módulo" -#: src/api/reference.md:566 +#: src/api/reference.md:568 msgid "`dir` — module" msgstr "`dir` — módulo" -#: src/api/reference.md:567 +#: src/api/reference.md:569 msgid "`dirxml` — module" msgstr "`dirxml` — módulo" -#: src/api/reference.md:568 +#: src/api/reference.md:570 msgid "`error` — module" msgstr "`error` — módulo" -#: src/api/reference.md:569 +#: src/api/reference.md:571 msgid "`group` — module" msgstr "`group` — módulo" -#: src/api/reference.md:570 +#: src/api/reference.md:572 msgid "`groupCollapsed` — module" msgstr "`groupCollapsed` — módulo" -#: src/api/reference.md:571 +#: src/api/reference.md:573 msgid "`groupEnd` — module" msgstr "`groupEnd` — módulo" -#: src/api/reference.md:572 +#: src/api/reference.md:574 msgid "`info` — module" msgstr "`info` — módulo" -#: src/api/reference.md:573 +#: src/api/reference.md:575 msgid "`log` — module" msgstr "`log` — módulo" -#: src/api/reference.md:574 +#: src/api/reference.md:576 msgid "`profile` — module" msgstr "`profile` — módulo" -#: src/api/reference.md:575 +#: src/api/reference.md:577 msgid "`profileEnd` — module" msgstr "`profileEnd` — módulo" -#: src/api/reference.md:576 +#: src/api/reference.md:578 msgid "`table` — module" msgstr "`table` — módulo" -#: src/api/reference.md:577 +#: src/api/reference.md:579 msgid "`time` — module" msgstr "`time` — módulo" -#: src/api/reference.md:578 +#: src/api/reference.md:580 msgid "`timeEnd` — module" msgstr "`timeEnd` — módulo" -#: src/api/reference.md:579 +#: src/api/reference.md:581 msgid "`timeLog` — module" msgstr "`timeLog` — módulo" -#: src/api/reference.md:580 +#: src/api/reference.md:582 msgid "`timeStamp` — module" msgstr "`timeStamp` — módulo" -#: src/api/reference.md:581 +#: src/api/reference.md:583 msgid "`trace` — module" msgstr "`trace` — módulo" -#: src/api/reference.md:582 +#: src/api/reference.md:584 msgid "`warn` — module" msgstr "`warn` — módulo" -#: src/api/reference.md:588 +#: src/api/reference.md:590 msgid "`COPYFILE_EXCL`" msgstr "`COPYFILE_EXCL`" -#: src/api/reference.md:589 +#: src/api/reference.md:591 msgid "`COPYFILE_FICLONE`" msgstr "`COPYFILE_FICLONE`" -#: src/api/reference.md:590 +#: src/api/reference.md:592 msgid "`COPYFILE_FICLONE_FORCE`" msgstr "`COPYFILE_FICLONE_FORCE`" -#: src/api/reference.md:591 +#: src/api/reference.md:593 msgid "`DH_CHECK_P_NOT_PRIME`" msgstr "`DH_CHECK_P_NOT_PRIME`" -#: src/api/reference.md:592 +#: src/api/reference.md:594 msgid "`DH_CHECK_P_NOT_SAFE_PRIME`" msgstr "`DH_CHECK_P_NOT_SAFE_PRIME`" -#: src/api/reference.md:593 +#: src/api/reference.md:595 msgid "`DH_NOT_SUITABLE_GENERATOR`" msgstr "`DH_NOT_SUITABLE_GENERATOR`" -#: src/api/reference.md:594 +#: src/api/reference.md:596 msgid "`DH_UNABLE_TO_CHECK_GENERATOR`" msgstr "`DH_UNABLE_TO_CHECK_GENERATOR`" -#: src/api/reference.md:595 +#: src/api/reference.md:597 msgid "`E2BIG`" msgstr "`E2BIG`" -#: src/api/reference.md:596 +#: src/api/reference.md:598 msgid "`EACCES`" msgstr "`EACCES`" -#: src/api/reference.md:597 +#: src/api/reference.md:599 msgid "`EADDRINUSE`" msgstr "`EADDRINUSE`" -#: src/api/reference.md:598 +#: src/api/reference.md:600 msgid "`EADDRNOTAVAIL`" msgstr "`EADDRNOTAVAIL`" -#: src/api/reference.md:599 +#: src/api/reference.md:601 msgid "`EAFNOSUPPORT`" msgstr "`EAFNOSUPPORT`" -#: src/api/reference.md:600 +#: src/api/reference.md:602 msgid "`EAGAIN`" msgstr "`EAGAIN`" -#: src/api/reference.md:601 +#: src/api/reference.md:603 msgid "`EALREADY`" msgstr "`EALREADY`" -#: src/api/reference.md:602 +#: src/api/reference.md:604 msgid "`EBADF`" msgstr "`EBADF`" -#: src/api/reference.md:603 +#: src/api/reference.md:605 msgid "`EBADMSG`" msgstr "`EBADMSG`" -#: src/api/reference.md:604 +#: src/api/reference.md:606 msgid "`EBUSY`" msgstr "`EBUSY`" -#: src/api/reference.md:605 +#: src/api/reference.md:607 msgid "`ECANCELED`" msgstr "`ECANCELED`" -#: src/api/reference.md:606 +#: src/api/reference.md:608 msgid "`ECHILD`" msgstr "`ECHILD`" -#: src/api/reference.md:607 +#: src/api/reference.md:609 msgid "`ECONNABORTED`" msgstr "`ECONNABORTED`" -#: src/api/reference.md:608 +#: src/api/reference.md:610 msgid "`ECONNREFUSED`" msgstr "`ECONNREFUSED`" -#: src/api/reference.md:609 +#: src/api/reference.md:611 msgid "`ECONNRESET`" msgstr "`ECONNRESET`" -#: src/api/reference.md:610 +#: src/api/reference.md:612 msgid "`EDEADLK`" msgstr "`EDEADLK`" -#: src/api/reference.md:611 +#: src/api/reference.md:613 msgid "`EDESTADDRREQ`" msgstr "`EDESTADDRREQ`" -#: src/api/reference.md:612 +#: src/api/reference.md:614 msgid "`EDOM`" msgstr "`EDOM`" -#: src/api/reference.md:613 +#: src/api/reference.md:615 msgid "`EDQUOT`" msgstr "`EDQUOT`" -#: src/api/reference.md:614 +#: src/api/reference.md:616 msgid "`EEXIST`" msgstr "`EEXIST`" -#: src/api/reference.md:615 +#: src/api/reference.md:617 msgid "`EFAULT`" msgstr "`EFAULT`" -#: src/api/reference.md:616 +#: src/api/reference.md:618 msgid "`EFBIG`" msgstr "`EFBIG`" -#: src/api/reference.md:617 +#: src/api/reference.md:619 msgid "`EHOSTUNREACH`" msgstr "`EHOSTUNREACH`" -#: src/api/reference.md:618 +#: src/api/reference.md:620 msgid "`EIDRM`" msgstr "`EIDRM`" -#: src/api/reference.md:619 +#: src/api/reference.md:621 msgid "`EILSEQ`" msgstr "`EILSEQ`" -#: src/api/reference.md:620 +#: src/api/reference.md:622 msgid "`EINPROGRESS`" msgstr "`EINPROGRESS`" -#: src/api/reference.md:621 +#: src/api/reference.md:623 msgid "`EINTR`" msgstr "`EINTR`" -#: src/api/reference.md:622 +#: src/api/reference.md:624 msgid "`EINVAL`" msgstr "`EINVAL`" -#: src/api/reference.md:623 +#: src/api/reference.md:625 msgid "`EIO`" msgstr "`EIO`" -#: src/api/reference.md:624 +#: src/api/reference.md:626 msgid "`EISCONN`" msgstr "`EISCONN`" -#: src/api/reference.md:625 +#: src/api/reference.md:627 msgid "`EISDIR`" msgstr "`EISDIR`" -#: src/api/reference.md:626 +#: src/api/reference.md:628 msgid "`ELOOP`" msgstr "`ELOOP`" -#: src/api/reference.md:627 +#: src/api/reference.md:629 msgid "`EMFILE`" msgstr "`EMFILE`" -#: src/api/reference.md:628 +#: src/api/reference.md:630 msgid "`EMLINK`" msgstr "`EMLINK`" -#: src/api/reference.md:629 +#: src/api/reference.md:631 msgid "`EMSGSIZE`" msgstr "`EMSGSIZE`" -#: src/api/reference.md:630 +#: src/api/reference.md:632 msgid "`EMULTIHOP`" msgstr "`EMULTIHOP`" -#: src/api/reference.md:631 +#: src/api/reference.md:633 msgid "`ENAMETOOLONG`" msgstr "`ENAMETOOLONG`" -#: src/api/reference.md:632 +#: src/api/reference.md:634 msgid "`ENETDOWN`" msgstr "`ENETDOWN`" -#: src/api/reference.md:633 +#: src/api/reference.md:635 msgid "`ENETRESET`" msgstr "`ENETRESET`" -#: src/api/reference.md:634 +#: src/api/reference.md:636 msgid "`ENETUNREACH`" msgstr "`ENETUNREACH`" -#: src/api/reference.md:635 +#: src/api/reference.md:637 msgid "`ENFILE`" msgstr "`ENFILE`" -#: src/api/reference.md:636 +#: src/api/reference.md:638 msgid "`ENGINE_METHOD_ALL`" msgstr "`ENGINE_METHOD_ALL`" -#: src/api/reference.md:637 +#: src/api/reference.md:639 msgid "`ENGINE_METHOD_CIPHERS`" msgstr "`ENGINE_METHOD_CIPHERS`" -#: src/api/reference.md:638 +#: src/api/reference.md:640 msgid "`ENGINE_METHOD_DH`" msgstr "`ENGINE_METHOD_DH`" -#: src/api/reference.md:639 +#: src/api/reference.md:641 msgid "`ENGINE_METHOD_DIGESTS`" msgstr "`ENGINE_METHOD_DIGESTS`" -#: src/api/reference.md:640 +#: src/api/reference.md:642 msgid "`ENGINE_METHOD_DSA`" msgstr "`ENGINE_METHOD_DSA`" -#: src/api/reference.md:641 +#: src/api/reference.md:643 msgid "`ENGINE_METHOD_EC`" msgstr "`ENGINE_METHOD_EC`" -#: src/api/reference.md:642 +#: src/api/reference.md:644 msgid "`ENGINE_METHOD_NONE`" msgstr "`ENGINE_METHOD_NONE`" -#: src/api/reference.md:643 +#: src/api/reference.md:645 msgid "`ENGINE_METHOD_PKEY_ASN1_METHS`" msgstr "`ENGINE_METHOD_PKEY_ASN1_METHS`" -#: src/api/reference.md:644 +#: src/api/reference.md:646 msgid "`ENGINE_METHOD_PKEY_METHS`" msgstr "`ENGINE_METHOD_PKEY_METHS`" -#: src/api/reference.md:645 +#: src/api/reference.md:647 msgid "`ENGINE_METHOD_RAND`" msgstr "`ENGINE_METHOD_RAND`" -#: src/api/reference.md:646 +#: src/api/reference.md:648 msgid "`ENGINE_METHOD_RSA`" msgstr "`ENGINE_METHOD_RSA`" -#: src/api/reference.md:647 +#: src/api/reference.md:649 msgid "`ENOBUFS`" msgstr "`ENOBUFS`" -#: src/api/reference.md:648 +#: src/api/reference.md:650 msgid "`ENODATA`" msgstr "`ENODATA`" -#: src/api/reference.md:649 +#: src/api/reference.md:651 msgid "`ENODEV`" msgstr "`ENODEV`" -#: src/api/reference.md:650 +#: src/api/reference.md:652 msgid "`ENOENT`" msgstr "`ENOENT`" -#: src/api/reference.md:651 +#: src/api/reference.md:653 msgid "`ENOEXEC`" msgstr "`ENOEXEC`" -#: src/api/reference.md:652 +#: src/api/reference.md:654 msgid "`ENOLCK`" msgstr "`ENOLCK`" -#: src/api/reference.md:653 +#: src/api/reference.md:655 msgid "`ENOLINK`" msgstr "`ENOLINK`" -#: src/api/reference.md:654 +#: src/api/reference.md:656 msgid "`ENOMEM`" msgstr "`ENOMEM`" -#: src/api/reference.md:655 +#: src/api/reference.md:657 msgid "`ENOMSG`" msgstr "`ENOMSG`" -#: src/api/reference.md:656 +#: src/api/reference.md:658 msgid "`ENOPROTOOPT`" msgstr "`ENOPROTOOPT`" -#: src/api/reference.md:657 +#: src/api/reference.md:659 msgid "`ENOSPC`" msgstr "`ENOSPC`" -#: src/api/reference.md:658 +#: src/api/reference.md:660 msgid "`ENOSR`" msgstr "`ENOSR`" -#: src/api/reference.md:659 +#: src/api/reference.md:661 msgid "`ENOSTR`" msgstr "`ENOSTR`" -#: src/api/reference.md:660 +#: src/api/reference.md:662 msgid "`ENOSYS`" msgstr "`ENOSYS`" -#: src/api/reference.md:661 +#: src/api/reference.md:663 msgid "`ENOTCONN`" msgstr "`ENOTCONN`" -#: src/api/reference.md:662 +#: src/api/reference.md:664 msgid "`ENOTDIR`" msgstr "`ENOTDIR`" -#: src/api/reference.md:663 +#: src/api/reference.md:665 msgid "`ENOTEMPTY`" msgstr "`ENOTEMPTY`" -#: src/api/reference.md:664 +#: src/api/reference.md:666 msgid "`ENOTSOCK`" msgstr "`ENOTSOCK`" -#: src/api/reference.md:665 +#: src/api/reference.md:667 msgid "`ENOTSUP`" msgstr "`ENOTSUP`" -#: src/api/reference.md:666 +#: src/api/reference.md:668 msgid "`ENOTTY`" msgstr "`ENOTTY`" -#: src/api/reference.md:667 +#: src/api/reference.md:669 msgid "`ENXIO`" msgstr "`ENXIO`" -#: src/api/reference.md:668 +#: src/api/reference.md:670 msgid "`EOPNOTSUPP`" msgstr "`EOPNOTSUPP`" -#: src/api/reference.md:669 +#: src/api/reference.md:671 msgid "`EOVERFLOW`" msgstr "`EOVERFLOW`" -#: src/api/reference.md:670 +#: src/api/reference.md:672 msgid "`EPERM`" msgstr "`EPERM`" -#: src/api/reference.md:671 +#: src/api/reference.md:673 msgid "`EPIPE`" msgstr "`EPIPE`" -#: src/api/reference.md:672 +#: src/api/reference.md:674 msgid "`EPROTO`" msgstr "`EPROTO`" -#: src/api/reference.md:673 +#: src/api/reference.md:675 msgid "`EPROTONOSUPPORT`" msgstr "`EPROTONOSUPPORT`" -#: src/api/reference.md:674 +#: src/api/reference.md:676 msgid "`EPROTOTYPE`" msgstr "`EPROTOTYPE`" -#: src/api/reference.md:675 +#: src/api/reference.md:677 msgid "`ERANGE`" msgstr "`ERANGE`" -#: src/api/reference.md:676 +#: src/api/reference.md:678 msgid "`EROFS`" msgstr "`EROFS`" -#: src/api/reference.md:677 +#: src/api/reference.md:679 msgid "`ESPIPE`" msgstr "`ESPIPE`" -#: src/api/reference.md:678 +#: src/api/reference.md:680 msgid "`ESRCH`" msgstr "`ESRCH`" -#: src/api/reference.md:679 +#: src/api/reference.md:681 msgid "`ESTALE`" msgstr "`ESTALE`" -#: src/api/reference.md:680 +#: src/api/reference.md:682 msgid "`ETIME`" msgstr "`ETIME`" -#: src/api/reference.md:681 +#: src/api/reference.md:683 msgid "`ETIMEDOUT`" msgstr "`ETIMEDOUT`" -#: src/api/reference.md:682 +#: src/api/reference.md:684 msgid "`ETXTBSY`" msgstr "`ETXTBSY`" -#: src/api/reference.md:683 +#: src/api/reference.md:685 msgid "`EWOULDBLOCK`" msgstr "`EWOULDBLOCK`" -#: src/api/reference.md:684 +#: src/api/reference.md:686 msgid "`EXDEV`" msgstr "`EXDEV`" -#: src/api/reference.md:685 +#: src/api/reference.md:687 msgid "`F_OK`" msgstr "`F_OK`" -#: src/api/reference.md:686 +#: src/api/reference.md:688 msgid "`OPENSSL_VERSION_NUMBER`" msgstr "`OPENSSL_VERSION_NUMBER`" -#: src/api/reference.md:687 +#: src/api/reference.md:689 msgid "`O_APPEND`" msgstr "`O_APPEND`" -#: src/api/reference.md:688 +#: src/api/reference.md:690 msgid "`O_CREAT`" msgstr "`O_CREAT`" -#: src/api/reference.md:689 +#: src/api/reference.md:691 msgid "`O_DIRECT`" msgstr "`O_DIRECT`" -#: src/api/reference.md:690 +#: src/api/reference.md:692 msgid "`O_DIRECTORY`" msgstr "`O_DIRECTORY`" -#: src/api/reference.md:691 +#: src/api/reference.md:693 msgid "`O_DSYNC`" msgstr "`O_DSYNC`" -#: src/api/reference.md:692 +#: src/api/reference.md:694 msgid "`O_EXCL`" msgstr "`O_EXCL`" -#: src/api/reference.md:693 +#: src/api/reference.md:695 msgid "`O_NOATIME`" msgstr "`O_NOATIME`" -#: src/api/reference.md:694 +#: src/api/reference.md:696 msgid "`O_NOCTTY`" msgstr "`O_NOCTTY`" -#: src/api/reference.md:695 +#: src/api/reference.md:697 msgid "`O_NOFOLLOW`" msgstr "`O_NOFOLLOW`" -#: src/api/reference.md:696 +#: src/api/reference.md:698 msgid "`O_NONBLOCK`" msgstr "`O_NONBLOCK`" -#: src/api/reference.md:697 +#: src/api/reference.md:699 msgid "`O_RDONLY`" msgstr "`O_RDONLY`" -#: src/api/reference.md:698 +#: src/api/reference.md:700 msgid "`O_RDWR`" msgstr "`O_RDWR`" -#: src/api/reference.md:699 +#: src/api/reference.md:701 msgid "`O_SYMLINK`" msgstr "`O_SYMLINK`" -#: src/api/reference.md:700 +#: src/api/reference.md:702 msgid "`O_SYNC`" msgstr "`O_SYNC`" -#: src/api/reference.md:701 +#: src/api/reference.md:703 msgid "`O_TRUNC`" msgstr "`O_TRUNC`" -#: src/api/reference.md:702 +#: src/api/reference.md:704 msgid "`O_WRONLY`" msgstr "`O_WRONLY`" -#: src/api/reference.md:703 +#: src/api/reference.md:705 msgid "`POINT_CONVERSION_COMPRESSED`" msgstr "`POINT_CONVERSION_COMPRESSED`" -#: src/api/reference.md:704 +#: src/api/reference.md:706 msgid "`POINT_CONVERSION_HYBRID`" msgstr "`POINT_CONVERSION_HYBRID`" -#: src/api/reference.md:705 +#: src/api/reference.md:707 msgid "`POINT_CONVERSION_UNCOMPRESSED`" msgstr "`POINT_CONVERSION_UNCOMPRESSED`" -#: src/api/reference.md:706 +#: src/api/reference.md:708 msgid "`PRIORITY_ABOVE_NORMAL`" msgstr "`PRIORITY_ABOVE_NORMAL`" -#: src/api/reference.md:707 +#: src/api/reference.md:709 msgid "`PRIORITY_BELOW_NORMAL`" msgstr "`PRIORITY_BELOW_NORMAL`" -#: src/api/reference.md:708 +#: src/api/reference.md:710 msgid "`PRIORITY_HIGH`" msgstr "`PRIORITY_HIGH`" -#: src/api/reference.md:709 +#: src/api/reference.md:711 msgid "`PRIORITY_HIGHEST`" msgstr "`PRIORITY_HIGHEST`" -#: src/api/reference.md:710 +#: src/api/reference.md:712 msgid "`PRIORITY_LOW`" msgstr "`PRIORITY_LOW`" -#: src/api/reference.md:711 +#: src/api/reference.md:713 msgid "`PRIORITY_NORMAL`" msgstr "`PRIORITY_NORMAL`" -#: src/api/reference.md:712 +#: src/api/reference.md:714 msgid "`RSA_NO_PADDING`" msgstr "`RSA_NO_PADDING`" -#: src/api/reference.md:713 +#: src/api/reference.md:715 msgid "`RSA_PKCS1_OAEP_PADDING`" msgstr "`RSA_PKCS1_OAEP_PADDING`" -#: src/api/reference.md:714 +#: src/api/reference.md:716 msgid "`RSA_PKCS1_PADDING`" msgstr "`RSA_PKCS1_PADDING`" -#: src/api/reference.md:715 +#: src/api/reference.md:717 msgid "`RSA_PKCS1_PSS_PADDING`" msgstr "`RSA_PKCS1_PSS_PADDING`" -#: src/api/reference.md:716 +#: src/api/reference.md:718 msgid "`RSA_PSS_SALTLEN_AUTO`" msgstr "`RSA_PSS_SALTLEN_AUTO`" -#: src/api/reference.md:717 +#: src/api/reference.md:719 msgid "`RSA_PSS_SALTLEN_DIGEST`" msgstr "`RSA_PSS_SALTLEN_DIGEST`" -#: src/api/reference.md:718 +#: src/api/reference.md:720 msgid "`RSA_PSS_SALTLEN_MAX_SIGN`" msgstr "`RSA_PSS_SALTLEN_MAX_SIGN`" -#: src/api/reference.md:719 +#: src/api/reference.md:721 msgid "`RSA_X931_PADDING`" msgstr "`RSA_X931_PADDING`" -#: src/api/reference.md:720 +#: src/api/reference.md:722 msgid "`RTLD_DEEPBIND`" msgstr "`RTLD_DEEPBIND`" -#: src/api/reference.md:721 +#: src/api/reference.md:723 msgid "`RTLD_GLOBAL`" msgstr "`RTLD_GLOBAL`" -#: src/api/reference.md:722 +#: src/api/reference.md:724 msgid "`RTLD_LAZY`" msgstr "`RTLD_LAZY`" -#: src/api/reference.md:723 +#: src/api/reference.md:725 msgid "`RTLD_LOCAL`" msgstr "`RTLD_LOCAL`" -#: src/api/reference.md:724 +#: src/api/reference.md:726 msgid "`RTLD_NOW`" msgstr "`RTLD_NOW`" -#: src/api/reference.md:725 +#: src/api/reference.md:727 msgid "`R_OK`" msgstr "`R_OK`" -#: src/api/reference.md:726 +#: src/api/reference.md:728 msgid "`SIGABRT`" msgstr "`SIGABRT`" -#: src/api/reference.md:727 +#: src/api/reference.md:729 msgid "`SIGALRM`" msgstr "`SIGALRM`" -#: src/api/reference.md:728 +#: src/api/reference.md:730 msgid "`SIGBUS`" msgstr "`SIGBUS`" -#: src/api/reference.md:729 +#: src/api/reference.md:731 msgid "`SIGCHLD`" msgstr "`SIGCHLD`" -#: src/api/reference.md:730 +#: src/api/reference.md:732 msgid "`SIGCONT`" msgstr "`SIGCONT`" -#: src/api/reference.md:731 +#: src/api/reference.md:733 msgid "`SIGFPE`" msgstr "`SIGFPE`" -#: src/api/reference.md:732 +#: src/api/reference.md:734 msgid "`SIGHUP`" msgstr "`SIGHUP`" -#: src/api/reference.md:733 +#: src/api/reference.md:735 msgid "`SIGILL`" msgstr "`SIGILL`" -#: src/api/reference.md:734 +#: src/api/reference.md:736 msgid "`SIGINFO`" msgstr "`SIGINFO`" -#: src/api/reference.md:735 +#: src/api/reference.md:737 msgid "`SIGINT`" msgstr "`SIGINT`" -#: src/api/reference.md:736 +#: src/api/reference.md:738 msgid "`SIGIO`" msgstr "`SIGIO`" -#: src/api/reference.md:737 +#: src/api/reference.md:739 msgid "`SIGIOT`" msgstr "`SIGIOT`" -#: src/api/reference.md:738 +#: src/api/reference.md:740 msgid "`SIGKILL`" msgstr "`SIGKILL`" -#: src/api/reference.md:739 +#: src/api/reference.md:741 msgid "`SIGPIPE`" msgstr "`SIGPIPE`" -#: src/api/reference.md:740 +#: src/api/reference.md:742 msgid "`SIGPOLL`" msgstr "`SIGPOLL`" -#: src/api/reference.md:741 +#: src/api/reference.md:743 msgid "`SIGPROF`" msgstr "`SIGPROF`" -#: src/api/reference.md:742 +#: src/api/reference.md:744 msgid "`SIGPWR`" msgstr "`SIGPWR`" -#: src/api/reference.md:743 +#: src/api/reference.md:745 msgid "`SIGQUIT`" msgstr "`SIGQUIT`" -#: src/api/reference.md:744 +#: src/api/reference.md:746 msgid "`SIGSEGV`" msgstr "`SIGSEGV`" -#: src/api/reference.md:745 +#: src/api/reference.md:747 msgid "`SIGSTKFLT`" msgstr "`SIGSTKFLT`" -#: src/api/reference.md:746 +#: src/api/reference.md:748 msgid "`SIGSTOP`" msgstr "`SIGSTOP`" -#: src/api/reference.md:747 +#: src/api/reference.md:749 msgid "`SIGSYS`" msgstr "`SIGSYS`" -#: src/api/reference.md:748 +#: src/api/reference.md:750 msgid "`SIGTERM`" msgstr "`SIGTERM`" -#: src/api/reference.md:749 +#: src/api/reference.md:751 msgid "`SIGTRAP`" msgstr "`SIGTRAP`" -#: src/api/reference.md:750 +#: src/api/reference.md:752 msgid "`SIGTSTP`" msgstr "`SIGTSTP`" -#: src/api/reference.md:751 +#: src/api/reference.md:753 msgid "`SIGTTIN`" msgstr "`SIGTTIN`" -#: src/api/reference.md:752 +#: src/api/reference.md:754 msgid "`SIGTTOU`" msgstr "`SIGTTOU`" -#: src/api/reference.md:753 +#: src/api/reference.md:755 msgid "`SIGURG`" msgstr "`SIGURG`" -#: src/api/reference.md:754 +#: src/api/reference.md:756 msgid "`SIGUSR1`" msgstr "`SIGUSR1`" -#: src/api/reference.md:755 +#: src/api/reference.md:757 msgid "`SIGUSR2`" msgstr "`SIGUSR2`" -#: src/api/reference.md:756 +#: src/api/reference.md:758 msgid "`SIGVTALRM`" msgstr "`SIGVTALRM`" -#: src/api/reference.md:757 +#: src/api/reference.md:759 msgid "`SIGWINCH`" msgstr "`SIGWINCH`" -#: src/api/reference.md:758 +#: src/api/reference.md:760 msgid "`SIGXCPU`" msgstr "`SIGXCPU`" -#: src/api/reference.md:759 +#: src/api/reference.md:761 msgid "`SIGXFSZ`" msgstr "`SIGXFSZ`" -#: src/api/reference.md:760 +#: src/api/reference.md:762 msgid "`SSL_OP_ALL`" msgstr "`SSL_OP_ALL`" -#: src/api/reference.md:761 +#: src/api/reference.md:763 msgid "`SSL_OP_ALLOW_NO_DHE_KEX`" msgstr "`SSL_OP_ALLOW_NO_DHE_KEX`" -#: src/api/reference.md:762 +#: src/api/reference.md:764 msgid "`SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION`" msgstr "`SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION`" -#: src/api/reference.md:763 +#: src/api/reference.md:765 msgid "`SSL_OP_CIPHER_SERVER_PREFERENCE`" msgstr "`SSL_OP_CIPHER_SERVER_PREFERENCE`" -#: src/api/reference.md:764 +#: src/api/reference.md:766 msgid "`SSL_OP_CISCO_ANYCONNECT`" msgstr "`SSL_OP_CISCO_ANYCONNECT`" -#: src/api/reference.md:765 +#: src/api/reference.md:767 msgid "`SSL_OP_COOKIE_EXCHANGE`" msgstr "`SSL_OP_COOKIE_EXCHANGE`" -#: src/api/reference.md:766 +#: src/api/reference.md:768 msgid "`SSL_OP_CRYPTOPRO_TLSEXT_BUG`" msgstr "`SSL_OP_CRYPTOPRO_TLSEXT_BUG`" -#: src/api/reference.md:767 +#: src/api/reference.md:769 msgid "`SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS`" msgstr "`SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS`" -#: src/api/reference.md:768 +#: src/api/reference.md:770 msgid "`SSL_OP_LEGACY_SERVER_CONNECT`" msgstr "`SSL_OP_LEGACY_SERVER_CONNECT`" -#: src/api/reference.md:769 +#: src/api/reference.md:771 msgid "`SSL_OP_NO_COMPRESSION`" msgstr "`SSL_OP_NO_COMPRESSION`" -#: src/api/reference.md:770 +#: src/api/reference.md:772 msgid "`SSL_OP_NO_ENCRYPT_THEN_MAC`" msgstr "`SSL_OP_NO_ENCRYPT_THEN_MAC`" -#: src/api/reference.md:771 +#: src/api/reference.md:773 msgid "`SSL_OP_NO_QUERY_MTU`" msgstr "`SSL_OP_NO_QUERY_MTU`" -#: src/api/reference.md:772 +#: src/api/reference.md:774 msgid "`SSL_OP_NO_RENEGOTIATION`" msgstr "`SSL_OP_NO_RENEGOTIATION`" -#: src/api/reference.md:773 +#: src/api/reference.md:775 msgid "`SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION`" msgstr "`SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION`" -#: src/api/reference.md:774 +#: src/api/reference.md:776 msgid "`SSL_OP_NO_SSLv2`" msgstr "`SSL_OP_NO_SSLv2`" -#: src/api/reference.md:775 +#: src/api/reference.md:777 msgid "`SSL_OP_NO_SSLv3`" msgstr "`SSL_OP_NO_SSLv3`" -#: src/api/reference.md:776 +#: src/api/reference.md:778 msgid "`SSL_OP_NO_TICKET`" msgstr "`SSL_OP_NO_TICKET`" -#: src/api/reference.md:777 +#: src/api/reference.md:779 msgid "`SSL_OP_NO_TLSv1`" msgstr "`SSL_OP_NO_TLSv1`" -#: src/api/reference.md:778 +#: src/api/reference.md:780 msgid "`SSL_OP_NO_TLSv1_1`" msgstr "`SSL_OP_NO_TLSv1_1`" -#: src/api/reference.md:779 +#: src/api/reference.md:781 msgid "`SSL_OP_NO_TLSv1_2`" msgstr "`SSL_OP_NO_TLSv1_2`" -#: src/api/reference.md:780 +#: src/api/reference.md:782 msgid "`SSL_OP_NO_TLSv1_3`" msgstr "`SSL_OP_NO_TLSv1_3`" -#: src/api/reference.md:781 +#: src/api/reference.md:783 msgid "`SSL_OP_PRIORITIZE_CHACHA`" msgstr "`SSL_OP_PRIORITIZE_CHACHA`" -#: src/api/reference.md:782 +#: src/api/reference.md:784 msgid "`SSL_OP_TLS_ROLLBACK_BUG`" msgstr "`SSL_OP_TLS_ROLLBACK_BUG`" -#: src/api/reference.md:783 +#: src/api/reference.md:785 msgid "`S_IFBLK`" msgstr "`S_IFBLK`" -#: src/api/reference.md:784 +#: src/api/reference.md:786 msgid "`S_IFCHR`" msgstr "`S_IFCHR`" -#: src/api/reference.md:785 +#: src/api/reference.md:787 msgid "`S_IFDIR`" msgstr "`S_IFDIR`" -#: src/api/reference.md:786 +#: src/api/reference.md:788 msgid "`S_IFIFO`" msgstr "`S_IFIFO`" -#: src/api/reference.md:787 +#: src/api/reference.md:789 msgid "`S_IFLNK`" msgstr "`S_IFLNK`" -#: src/api/reference.md:788 +#: src/api/reference.md:790 msgid "`S_IFMT`" msgstr "`S_IFMT`" -#: src/api/reference.md:789 +#: src/api/reference.md:791 msgid "`S_IFREG`" msgstr "`S_IFREG`" -#: src/api/reference.md:790 +#: src/api/reference.md:792 msgid "`S_IFSOCK`" msgstr "`S_IFSOCK`" -#: src/api/reference.md:791 +#: src/api/reference.md:793 msgid "`S_IRGRP`" msgstr "`S_IRGRP`" -#: src/api/reference.md:792 +#: src/api/reference.md:794 msgid "`S_IROTH`" msgstr "`S_IROTH`" -#: src/api/reference.md:793 +#: src/api/reference.md:795 msgid "`S_IRUSR`" msgstr "`S_IRUSR`" -#: src/api/reference.md:794 +#: src/api/reference.md:796 msgid "`S_IRWXG`" msgstr "`S_IRWXG`" -#: src/api/reference.md:795 +#: src/api/reference.md:797 msgid "`S_IRWXO`" msgstr "`S_IRWXO`" -#: src/api/reference.md:796 +#: src/api/reference.md:798 msgid "`S_IRWXU`" msgstr "`S_IRWXU`" -#: src/api/reference.md:797 +#: src/api/reference.md:799 msgid "`S_IWGRP`" msgstr "`S_IWGRP`" -#: src/api/reference.md:798 +#: src/api/reference.md:800 msgid "`S_IWOTH`" msgstr "`S_IWOTH`" -#: src/api/reference.md:799 +#: src/api/reference.md:801 msgid "`S_IWUSR`" msgstr "`S_IWUSR`" -#: src/api/reference.md:800 +#: src/api/reference.md:802 msgid "`S_IXGRP`" msgstr "`S_IXGRP`" -#: src/api/reference.md:801 +#: src/api/reference.md:803 msgid "`S_IXOTH`" msgstr "`S_IXOTH`" -#: src/api/reference.md:802 +#: src/api/reference.md:804 msgid "`S_IXUSR`" msgstr "`S_IXUSR`" -#: src/api/reference.md:803 +#: src/api/reference.md:805 msgid "`TLS1_1_VERSION`" msgstr "`TLS1_1_VERSION`" -#: src/api/reference.md:804 +#: src/api/reference.md:806 msgid "`TLS1_2_VERSION`" msgstr "`TLS1_2_VERSION`" -#: src/api/reference.md:805 +#: src/api/reference.md:807 msgid "`TLS1_3_VERSION`" msgstr "`TLS1_3_VERSION`" -#: src/api/reference.md:806 +#: src/api/reference.md:808 msgid "`TLS1_VERSION`" msgstr "`TLS1_VERSION`" -#: src/api/reference.md:807 +#: src/api/reference.md:809 msgid "`UV_DIRENT_BLOCK`" msgstr "`UV_DIRENT_BLOCK`" -#: src/api/reference.md:808 +#: src/api/reference.md:810 msgid "`UV_DIRENT_CHAR`" msgstr "`UV_DIRENT_CHAR`" -#: src/api/reference.md:809 +#: src/api/reference.md:811 msgid "`UV_DIRENT_DIR`" msgstr "`UV_DIRENT_DIR`" -#: src/api/reference.md:810 +#: src/api/reference.md:812 msgid "`UV_DIRENT_FIFO`" msgstr "`UV_DIRENT_FIFO`" -#: src/api/reference.md:811 +#: src/api/reference.md:813 msgid "`UV_DIRENT_FILE`" msgstr "`UV_DIRENT_FILE`" -#: src/api/reference.md:812 +#: src/api/reference.md:814 msgid "`UV_DIRENT_LINK`" msgstr "`UV_DIRENT_LINK`" -#: src/api/reference.md:813 +#: src/api/reference.md:815 msgid "`UV_DIRENT_SOCKET`" msgstr "`UV_DIRENT_SOCKET`" -#: src/api/reference.md:814 +#: src/api/reference.md:816 msgid "`UV_DIRENT_UNKNOWN`" msgstr "`UV_DIRENT_UNKNOWN`" -#: src/api/reference.md:815 +#: src/api/reference.md:817 msgid "`UV_FS_COPYFILE_EXCL`" msgstr "`UV_FS_COPYFILE_EXCL`" -#: src/api/reference.md:816 +#: src/api/reference.md:818 msgid "`UV_FS_COPYFILE_FICLONE`" msgstr "`UV_FS_COPYFILE_FICLONE`" -#: src/api/reference.md:817 +#: src/api/reference.md:819 msgid "`UV_FS_COPYFILE_FICLONE_FORCE`" msgstr "`UV_FS_COPYFILE_FICLONE_FORCE`" -#: src/api/reference.md:818 +#: src/api/reference.md:820 msgid "`UV_FS_O_FILEMAP`" msgstr "`UV_FS_O_FILEMAP`" -#: src/api/reference.md:819 +#: src/api/reference.md:821 msgid "`UV_FS_SYMLINK_DIR`" msgstr "`UV_FS_SYMLINK_DIR`" -#: src/api/reference.md:820 +#: src/api/reference.md:822 msgid "`UV_FS_SYMLINK_JUNCTION`" msgstr "`UV_FS_SYMLINK_JUNCTION`" -#: src/api/reference.md:821 +#: src/api/reference.md:823 msgid "`W_OK`" msgstr "`W_OK`" -#: src/api/reference.md:822 +#: src/api/reference.md:824 msgid "`X_OK`" msgstr "`X_OK`" -#: src/api/reference.md:824 +#: src/api/reference.md:826 msgid "`defaultCoreCipherList`" msgstr "`defaultCoreCipherList`" -#: src/api/reference.md:826 src/cli/capabilities.md:52 +#: src/api/reference.md:828 src/cli/capabilities.md:52 msgid "`crypto`" msgstr "`crypto`" -#: src/api/reference.md:830 +#: src/api/reference.md:832 msgid "`Cipheriv`" msgstr "`Cipheriv`" -#: src/api/reference.md:831 +#: src/api/reference.md:833 msgid "`Decipheriv`" msgstr "`Decipheriv`" -#: src/api/reference.md:832 +#: src/api/reference.md:834 msgid "`DiffieHellman`" msgstr "`DiffieHellman`" -#: src/api/reference.md:833 +#: src/api/reference.md:835 msgid "`DiffieHellmanGroup`" msgstr "`DiffieHellmanGroup`" -#: src/api/reference.md:834 +#: src/api/reference.md:836 msgid "`ECDH`" msgstr "`ECDH`" -#: src/api/reference.md:835 +#: src/api/reference.md:837 msgid "`KeyObject`" msgstr "`KeyObject`" -#: src/api/reference.md:836 +#: src/api/reference.md:838 msgid "`X509Certificate`" msgstr "`X509Certificate`" -#: src/api/reference.md:840 +#: src/api/reference.md:842 msgid "`Hash` — module" msgstr "`Hash` — módulo" -#: src/api/reference.md:841 +#: src/api/reference.md:843 msgid "`Hmac` — module" msgstr "`Hmac` — módulo" -#: src/api/reference.md:842 +#: src/api/reference.md:844 msgid "`Sign` — module" msgstr "`Sign` — módulo" -#: src/api/reference.md:843 +#: src/api/reference.md:845 msgid "`Verify` — module" msgstr "`Verify` — módulo" -#: src/api/reference.md:844 +#: src/api/reference.md:846 msgid "`argon2` — module" msgstr "`argon2` — módulo" -#: src/api/reference.md:845 +#: src/api/reference.md:847 msgid "`argon2Sync` — module" msgstr "`argon2Sync` — módulo" -#: src/api/reference.md:846 +#: src/api/reference.md:848 msgid "`checkPrime` — module" msgstr "`checkPrime` — módulo" -#: src/api/reference.md:847 +#: src/api/reference.md:849 msgid "`checkPrimeSync` — module" msgstr "`checkPrimeSync` — módulo" -#: src/api/reference.md:848 +#: src/api/reference.md:850 msgid "`createCipheriv` — module" msgstr "`createCipheriv` — módulo" -#: src/api/reference.md:849 +#: src/api/reference.md:851 msgid "`createDecipheriv` — module" msgstr "`createDecipheriv` — módulo" -#: src/api/reference.md:850 +#: src/api/reference.md:852 msgid "`createDiffieHellman` — module" msgstr "`createDiffieHellman` — módulo" -#: src/api/reference.md:851 +#: src/api/reference.md:853 msgid "`createDiffieHellmanGroup` — module" msgstr "`createDiffieHellmanGroup` — módulo" -#: src/api/reference.md:852 +#: src/api/reference.md:854 msgid "`createECDH` — module" msgstr "`createECDH` — módulo" -#: src/api/reference.md:853 +#: src/api/reference.md:855 msgid "`createHash` — module" msgstr "`createHash` — módulo" -#: src/api/reference.md:854 +#: src/api/reference.md:856 msgid "`createHmac` — module" msgstr "`createHmac` — módulo" -#: src/api/reference.md:855 +#: src/api/reference.md:857 msgid "`createPrivateKey` — module" msgstr "`createPrivateKey` — módulo" -#: src/api/reference.md:856 +#: src/api/reference.md:858 msgid "`createPublicKey` — module" msgstr "`createPublicKey` — módulo" -#: src/api/reference.md:857 +#: src/api/reference.md:859 msgid "`createSecretKey` — module" msgstr "`createSecretKey` — módulo" -#: src/api/reference.md:858 src/api/reference.md:859 +#: src/api/reference.md:860 src/api/reference.md:861 msgid "`createSign` — module" msgstr "`createSign` — módulo" -#: src/api/reference.md:860 src/api/reference.md:861 +#: src/api/reference.md:862 src/api/reference.md:863 msgid "`createVerify` — module" msgstr "`createVerify` — módulo" -#: src/api/reference.md:862 +#: src/api/reference.md:864 msgid "`decapsulate` — module" msgstr "`decapsulate` — módulo" -#: src/api/reference.md:863 +#: src/api/reference.md:865 msgid "`diffieHellman` — module" msgstr "`diffieHellman` — módulo" -#: src/api/reference.md:864 +#: src/api/reference.md:866 msgid "`encapsulate` — module" msgstr "`encapsulate` — módulo" -#: src/api/reference.md:865 +#: src/api/reference.md:867 msgid "`generateKey` — module" msgstr "`generateKey` — módulo" -#: src/api/reference.md:866 +#: src/api/reference.md:868 msgid "`generateKeyPair` — module" msgstr "`generateKeyPair` — módulo" -#: src/api/reference.md:867 src/api/reference.md:868 +#: src/api/reference.md:869 src/api/reference.md:870 msgid "`generateKeyPairSync` — module" msgstr "`generateKeyPairSync` — módulo" -#: src/api/reference.md:869 +#: src/api/reference.md:871 msgid "`generateKeySync` — module" msgstr "`generateKeySync` — módulo" -#: src/api/reference.md:870 +#: src/api/reference.md:872 msgid "`generatePrime` — module" msgstr "`generatePrime` — módulo" -#: src/api/reference.md:871 +#: src/api/reference.md:873 msgid "`generatePrimeSync` — module" msgstr "`generatePrimeSync` — módulo" -#: src/api/reference.md:872 +#: src/api/reference.md:874 msgid "`getCipherInfo` — module" msgstr "`getCipherInfo` — módulo" -#: src/api/reference.md:873 src/api/reference.md:3312 +#: src/api/reference.md:875 src/api/reference.md:3312 msgid "`getCiphers` — module" msgstr "`getCiphers` — módulo" -#: src/api/reference.md:874 +#: src/api/reference.md:876 msgid "`getCurves` — module" msgstr "`getCurves` — módulo" -#: src/api/reference.md:875 +#: src/api/reference.md:877 msgid "`getDiffieHellman` — module" msgstr "`getDiffieHellman` — módulo" -#: src/api/reference.md:876 +#: src/api/reference.md:878 msgid "`getFips` — module" msgstr "`getFips` — módulo" -#: src/api/reference.md:877 +#: src/api/reference.md:879 msgid "`getHashes` — module" msgstr "`getHashes` — módulo" -#: src/api/reference.md:878 +#: src/api/reference.md:880 msgid "`getRandomValues` — module" msgstr "`getRandomValues` — módulo" -#: src/api/reference.md:880 +#: src/api/reference.md:882 msgid "`hkdf` — module" msgstr "`hkdf` — módulo" -#: src/api/reference.md:881 +#: src/api/reference.md:883 msgid "`hkdfSync` — module" msgstr "`hkdfSync` — módulo" -#: src/api/reference.md:882 +#: src/api/reference.md:884 msgid "`pbkdf2` — module" msgstr "`pbkdf2` — módulo" -#: src/api/reference.md:883 +#: src/api/reference.md:885 msgid "`pbkdf2Sync` — module" msgstr "`pbkdf2Sync` — módulo" -#: src/api/reference.md:884 +#: src/api/reference.md:886 msgid "`privateDecrypt` — module" msgstr "`privateDecrypt` — módulo" -#: src/api/reference.md:885 +#: src/api/reference.md:887 msgid "`privateEncrypt` — module" msgstr "`privateEncrypt` — módulo" -#: src/api/reference.md:886 +#: src/api/reference.md:888 msgid "`publicDecrypt` — module" msgstr "`publicDecrypt` — módulo" -#: src/api/reference.md:887 +#: src/api/reference.md:889 msgid "`publicEncrypt` — module" msgstr "`publicEncrypt` — módulo" -#: src/api/reference.md:888 +#: src/api/reference.md:890 msgid "`randomBytes` — module" msgstr "`randomBytes` — módulo" -#: src/api/reference.md:889 +#: src/api/reference.md:891 msgid "`randomFill` — module" msgstr "`randomFill` — módulo" -#: src/api/reference.md:890 +#: src/api/reference.md:892 msgid "`randomFillSync` — module" msgstr "`randomFillSync` — módulo" -#: src/api/reference.md:891 src/api/reference.md:892 +#: src/api/reference.md:893 src/api/reference.md:894 msgid "`randomInt` — module" msgstr "`randomInt` — módulo" -#: src/api/reference.md:893 +#: src/api/reference.md:895 msgid "`randomUUID` — module" msgstr "`randomUUID` — módulo" -#: src/api/reference.md:894 +#: src/api/reference.md:896 msgid "`scrypt` — module" msgstr "`scrypt` — módulo" -#: src/api/reference.md:895 +#: src/api/reference.md:897 msgid "`scryptSync` — module" msgstr "`scryptSync` — módulo" -#: src/api/reference.md:896 +#: src/api/reference.md:898 msgid "`secureHeapUsed` — module" msgstr "`secureHeapUsed` — módulo" -#: src/api/reference.md:897 +#: src/api/reference.md:899 msgid "`setFips` — module" msgstr "`setFips` — módulo" -#: src/api/reference.md:898 +#: src/api/reference.md:900 msgid "`sign` — module" msgstr "`sign` — módulo" -#: src/api/reference.md:899 +#: src/api/reference.md:901 msgid "`timingSafeEqual` — module" msgstr "`timingSafeEqual` — módulo" -#: src/api/reference.md:904 +#: src/api/reference.md:906 msgid "`Certificate`" msgstr "`Certificate`" -#: src/api/reference.md:906 +#: src/api/reference.md:908 msgid "`subtle`" msgstr "`subtle`" -#: src/api/reference.md:907 +#: src/api/reference.md:909 msgid "`webcrypto`" msgstr "`webcrypto`" -#: src/api/reference.md:909 +#: src/api/reference.md:911 msgid "`dgram`" msgstr "`dgram`" -#: src/api/reference.md:913 src/api/reference.md:1880 +#: src/api/reference.md:915 src/api/reference.md:1863 msgid "`Socket`" msgstr "`Socket`" -#: src/api/reference.md:917 src/api/reference.md:1888 +#: src/api/reference.md:919 src/api/reference.md:1871 msgid "`Socket` — module" msgstr "`Socket` — módulo" -#: src/api/reference.md:918 src/api/reference.md:1898 +#: src/api/reference.md:920 src/api/reference.md:1881 msgid "`addListener` — instance _(class: `Socket`)_" msgstr "`addListener` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:919 +#: src/api/reference.md:921 msgid "`addMembership` — instance _(class: `Socket`)_" msgstr "`addMembership` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:920 +#: src/api/reference.md:922 msgid "`addSourceSpecificMembership` — instance _(class: `Socket`)_" msgstr "`addSourceSpecificMembership` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:921 src/api/reference.md:1902 +#: src/api/reference.md:923 src/api/reference.md:1885 msgid "`address` — instance _(class: `Socket`)_" msgstr "`address` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:922 +#: src/api/reference.md:924 msgid "`bind` — instance _(class: `Socket`)_" msgstr "`bind` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:923 +#: src/api/reference.md:925 msgid "`close` — instance _(class: `Socket`)_" msgstr "`close` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:924 src/api/reference.md:1912 +#: src/api/reference.md:926 src/api/reference.md:1895 msgid "`connect` — instance _(class: `Socket`)_" msgstr "`connect` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:925 +#: src/api/reference.md:927 msgid "`createSocket` — module" msgstr "`createSocket` — módulo" -#: src/api/reference.md:926 +#: src/api/reference.md:928 msgid "`disconnect` — instance _(class: `Socket`)_" msgstr "`disconnect` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:927 +#: src/api/reference.md:929 msgid "`dropMembership` — instance _(class: `Socket`)_" msgstr "`dropMembership` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:928 +#: src/api/reference.md:930 msgid "`dropSourceSpecificMembership` — instance _(class: `Socket`)_" msgstr "`dropSourceSpecificMembership` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:929 +#: src/api/reference.md:931 msgid "`emit` — instance _(class: `Socket`)_" msgstr "`emit` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:930 src/api/reference.md:1921 +#: src/api/reference.md:932 src/api/reference.md:1904 msgid "`eventNames` — instance _(class: `Socket`)_" msgstr "`eventNames` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:931 +#: src/api/reference.md:933 msgid "`getRecvBufferSize` — instance _(class: `Socket`)_" msgstr "`getRecvBufferSize` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:932 +#: src/api/reference.md:934 msgid "`getSendBufferSize` — instance _(class: `Socket`)_" msgstr "`getSendBufferSize` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:933 +#: src/api/reference.md:935 msgid "`getSendQueueCount` — instance _(class: `Socket`)_" msgstr "`getSendQueueCount` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:934 +#: src/api/reference.md:936 msgid "`getSendQueueSize` — instance _(class: `Socket`)_" msgstr "`getSendQueueSize` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:935 src/api/reference.md:1948 +#: src/api/reference.md:937 src/api/reference.md:1932 msgid "`listenerCount` — instance _(class: `Socket`)_" msgstr "`listenerCount` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:936 src/api/reference.md:1957 +#: src/api/reference.md:938 src/api/reference.md:1941 msgid "`off` — instance _(class: `Socket`)_" msgstr "`off` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:937 src/api/reference.md:1959 +#: src/api/reference.md:939 src/api/reference.md:1943 msgid "`on` — instance _(class: `Socket`)_" msgstr "`on` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:938 src/api/reference.md:1960 +#: src/api/reference.md:940 src/api/reference.md:1944 msgid "`once` — instance _(class: `Socket`)_" msgstr "`once` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:939 src/api/reference.md:1975 +#: src/api/reference.md:941 src/api/reference.md:1959 msgid "`ref` — instance _(class: `Socket`)_" msgstr "`ref` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:940 src/api/reference.md:1976 +#: src/api/reference.md:942 src/api/reference.md:1960 msgid "`remoteAddress` — instance _(class: `Socket`)_" msgstr "`remoteAddress` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:941 src/api/reference.md:1981 +#: src/api/reference.md:943 src/api/reference.md:1965 msgid "`removeListener` — instance _(class: `Socket`)_" msgstr "`removeListener` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:942 +#: src/api/reference.md:944 msgid "`send` — instance _(class: `Socket`)_" msgstr "`send` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:943 +#: src/api/reference.md:945 msgid "`sendto` — instance _(class: `Socket`)_" msgstr "`sendto` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:944 +#: src/api/reference.md:946 msgid "`setBroadcast` — instance _(class: `Socket`)_" msgstr "`setBroadcast` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:945 +#: src/api/reference.md:947 msgid "`setMulticastInterface` — instance _(class: `Socket`)_" msgstr "`setMulticastInterface` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:946 +#: src/api/reference.md:948 msgid "`setMulticastLoopback` — instance _(class: `Socket`)_" msgstr "`setMulticastLoopback` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:947 +#: src/api/reference.md:949 msgid "`setMulticastTTL` — instance _(class: `Socket`)_" msgstr "`setMulticastTTL` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:948 +#: src/api/reference.md:950 msgid "`setRecvBufferSize` — instance _(class: `Socket`)_" msgstr "`setRecvBufferSize` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:949 +#: src/api/reference.md:951 msgid "`setSendBufferSize` — instance _(class: `Socket`)_" msgstr "`setSendBufferSize` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:950 +#: src/api/reference.md:952 msgid "`setTTL` — instance _(class: `Socket`)_" msgstr "`setTTL` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:951 src/api/reference.md:2000 +#: src/api/reference.md:953 src/api/reference.md:1984 msgid "`unref` — instance _(class: `Socket`)_" msgstr "`unref` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:957 +#: src/api/reference.md:959 msgid "`diagnostics_channel`" msgstr "`diagnostics_channel`" -#: src/api/reference.md:961 +#: src/api/reference.md:963 msgid "`BoundedChannel`" msgstr "`BoundedChannel`" -#: src/api/reference.md:962 +#: src/api/reference.md:964 msgid "`Channel`" msgstr "`Channel`" -#: src/api/reference.md:966 +#: src/api/reference.md:968 msgid "`boundedChannel` — module" msgstr "`boundedChannel` — módulo" -#: src/api/reference.md:967 +#: src/api/reference.md:969 msgid "`channel` — module" msgstr "`channel` — módulo" -#: src/api/reference.md:968 +#: src/api/reference.md:970 msgid "`hasSubscribers` — module" msgstr "`hasSubscribers` — módulo" -#: src/api/reference.md:970 +#: src/api/reference.md:972 msgid "`tracingChannel` — module" msgstr "`tracingChannel` — módulo" -#: src/api/reference.md:977 +#: src/api/reference.md:979 msgid "`dns`" msgstr "`dns`" -#: src/api/reference.md:981 src/api/reference.md:1090 +#: src/api/reference.md:983 src/api/reference.md:1092 msgid "`Resolver`" msgstr "`Resolver`" -#: src/api/reference.md:985 src/api/reference.md:1094 +#: src/api/reference.md:987 src/api/reference.md:1096 msgid "`Resolver` — module" msgstr "`Resolver` — módulo" -#: src/api/reference.md:986 src/api/reference.md:1095 +#: src/api/reference.md:988 src/api/reference.md:1097 msgid "`cancel` — instance _(class: `Resolver`)_" msgstr "`cancel` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:987 src/api/reference.md:1096 +#: src/api/reference.md:989 src/api/reference.md:1098 msgid "`getDefaultResultOrder` — module" msgstr "`getDefaultResultOrder` — módulo" -#: src/api/reference.md:988 src/api/reference.md:1097 +#: src/api/reference.md:990 src/api/reference.md:1099 msgid "`getServers` — module" msgstr "`getServers` — módulo" -#: src/api/reference.md:989 src/api/reference.md:1098 +#: src/api/reference.md:991 src/api/reference.md:1100 msgid "`getServers` — instance _(class: `Resolver`)_" msgstr "`getServers` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:990 src/api/reference.md:1099 +#: src/api/reference.md:992 src/api/reference.md:1101 msgid "`lookup` — module" msgstr "`lookup` — módulo" -#: src/api/reference.md:991 src/api/reference.md:1100 +#: src/api/reference.md:993 src/api/reference.md:1102 msgid "`lookupService` — module" msgstr "`lookupService` — módulo" -#: src/api/reference.md:992 src/api/reference.md:1101 src/api/reference.md:2085 -#: src/api/reference.md:2111 src/api/reference.md:2137 +#: src/api/reference.md:994 src/api/reference.md:1103 src/api/reference.md:2070 +#: src/api/reference.md:2096 src/api/reference.md:2122 #: src/api/reference.md:3416 msgid "`resolve` — module" msgstr "`resolve` — módulo" -#: src/api/reference.md:993 src/api/reference.md:1102 +#: src/api/reference.md:995 src/api/reference.md:1104 msgid "`resolve` — instance _(class: `Resolver`)_" msgstr "`resolve` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:994 src/api/reference.md:1103 +#: src/api/reference.md:996 src/api/reference.md:1105 msgid "`resolve4` — module" msgstr "`resolve4` — módulo" -#: src/api/reference.md:995 src/api/reference.md:1104 +#: src/api/reference.md:997 src/api/reference.md:1106 msgid "`resolve4` — instance _(class: `Resolver`)_" msgstr "`resolve4` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:996 src/api/reference.md:1105 +#: src/api/reference.md:998 src/api/reference.md:1107 msgid "`resolve6` — module" msgstr "`resolve6` — módulo" -#: src/api/reference.md:997 src/api/reference.md:1106 +#: src/api/reference.md:999 src/api/reference.md:1108 msgid "`resolve6` — instance _(class: `Resolver`)_" msgstr "`resolve6` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:998 src/api/reference.md:1107 +#: src/api/reference.md:1000 src/api/reference.md:1109 msgid "`resolveAny` — module" msgstr "`resolveAny` — módulo" -#: src/api/reference.md:999 src/api/reference.md:1108 +#: src/api/reference.md:1001 src/api/reference.md:1110 msgid "`resolveAny` — instance _(class: `Resolver`)_" msgstr "`resolveAny` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1000 src/api/reference.md:1109 +#: src/api/reference.md:1002 src/api/reference.md:1111 msgid "`resolveCaa` — module" msgstr "`resolveCaa` — módulo" -#: src/api/reference.md:1001 src/api/reference.md:1110 +#: src/api/reference.md:1003 src/api/reference.md:1112 msgid "`resolveCaa` — instance _(class: `Resolver`)_" msgstr "`resolveCaa` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1002 src/api/reference.md:1111 +#: src/api/reference.md:1004 src/api/reference.md:1113 msgid "`resolveCname` — module" msgstr "`resolveCname` — módulo" -#: src/api/reference.md:1003 src/api/reference.md:1112 +#: src/api/reference.md:1005 src/api/reference.md:1114 msgid "`resolveCname` — instance _(class: `Resolver`)_" msgstr "`resolveCname` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1004 src/api/reference.md:1113 +#: src/api/reference.md:1006 src/api/reference.md:1115 msgid "`resolveMx` — module" msgstr "`resolveMx` — módulo" -#: src/api/reference.md:1005 src/api/reference.md:1114 +#: src/api/reference.md:1007 src/api/reference.md:1116 msgid "`resolveMx` — instance _(class: `Resolver`)_" msgstr "`resolveMx` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1006 src/api/reference.md:1115 +#: src/api/reference.md:1008 src/api/reference.md:1117 msgid "`resolveNaptr` — module" msgstr "`resolveNaptr` — módulo" -#: src/api/reference.md:1007 src/api/reference.md:1116 +#: src/api/reference.md:1009 src/api/reference.md:1118 msgid "`resolveNaptr` — instance _(class: `Resolver`)_" msgstr "`resolveNaptr` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1008 src/api/reference.md:1117 +#: src/api/reference.md:1010 src/api/reference.md:1119 msgid "`resolveNs` — module" msgstr "`resolveNs` — módulo" -#: src/api/reference.md:1009 src/api/reference.md:1118 +#: src/api/reference.md:1011 src/api/reference.md:1120 msgid "`resolveNs` — instance _(class: `Resolver`)_" msgstr "`resolveNs` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1010 src/api/reference.md:1119 +#: src/api/reference.md:1012 src/api/reference.md:1121 msgid "`resolvePtr` — module" msgstr "`resolvePtr` — módulo" -#: src/api/reference.md:1011 src/api/reference.md:1120 +#: src/api/reference.md:1013 src/api/reference.md:1122 msgid "`resolvePtr` — instance _(class: `Resolver`)_" msgstr "`resolvePtr` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1012 src/api/reference.md:1121 +#: src/api/reference.md:1014 src/api/reference.md:1123 msgid "`resolveSoa` — module" msgstr "`resolveSoa` — módulo" -#: src/api/reference.md:1013 src/api/reference.md:1122 +#: src/api/reference.md:1015 src/api/reference.md:1124 msgid "`resolveSoa` — instance _(class: `Resolver`)_" msgstr "`resolveSoa` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1014 src/api/reference.md:1123 +#: src/api/reference.md:1016 src/api/reference.md:1125 msgid "`resolveSrv` — module" msgstr "`resolveSrv` — módulo" -#: src/api/reference.md:1015 src/api/reference.md:1124 +#: src/api/reference.md:1017 src/api/reference.md:1126 msgid "`resolveSrv` — instance _(class: `Resolver`)_" msgstr "`resolveSrv` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1016 src/api/reference.md:1125 +#: src/api/reference.md:1018 src/api/reference.md:1127 msgid "`resolveTlsa` — module" msgstr "`resolveTlsa` — módulo" -#: src/api/reference.md:1017 src/api/reference.md:1126 +#: src/api/reference.md:1019 src/api/reference.md:1128 msgid "`resolveTlsa` — instance _(class: `Resolver`)_" msgstr "`resolveTlsa` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1018 src/api/reference.md:1127 +#: src/api/reference.md:1020 src/api/reference.md:1129 msgid "`resolveTxt` — module" msgstr "`resolveTxt` — módulo" -#: src/api/reference.md:1019 src/api/reference.md:1128 +#: src/api/reference.md:1021 src/api/reference.md:1130 msgid "`resolveTxt` — instance _(class: `Resolver`)_" msgstr "`resolveTxt` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1020 src/api/reference.md:1129 -#: src/api/reference.md:1801 +#: src/api/reference.md:1022 src/api/reference.md:1131 +#: src/api/reference.md:1803 msgid "`reverse` — module" msgstr "`reverse` — módulo" -#: src/api/reference.md:1021 src/api/reference.md:1130 +#: src/api/reference.md:1023 src/api/reference.md:1132 msgid "`reverse` — instance _(class: `Resolver`)_" msgstr "`reverse` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1022 src/api/reference.md:1131 +#: src/api/reference.md:1024 src/api/reference.md:1133 msgid "`setDefaultResultOrder` — module" msgstr "`setDefaultResultOrder` — módulo" -#: src/api/reference.md:1023 src/api/reference.md:1132 +#: src/api/reference.md:1025 src/api/reference.md:1134 msgid "`setLocalAddress` — instance _(class: `Resolver`)_" msgstr "`setLocalAddress` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1024 src/api/reference.md:1133 +#: src/api/reference.md:1026 src/api/reference.md:1135 msgid "`setServers` — module" msgstr "`setServers` — módulo" -#: src/api/reference.md:1025 src/api/reference.md:1134 +#: src/api/reference.md:1027 src/api/reference.md:1136 msgid "`setServers` — instance _(class: `Resolver`)_" msgstr "`setServers` — instancia _(clase: `Resolver`)_" -#: src/api/reference.md:1029 src/api/reference.md:1030 +#: src/api/reference.md:1031 src/api/reference.md:1032 msgid "`ADDRCONFIG`" msgstr "`ADDRCONFIG`" -#: src/api/reference.md:1031 src/api/reference.md:1032 -#: src/api/reference.md:1138 +#: src/api/reference.md:1033 src/api/reference.md:1034 +#: src/api/reference.md:1140 msgid "`ADDRGETNETWORKPARAMS`" msgstr "`ADDRGETNETWORKPARAMS`" -#: src/api/reference.md:1033 src/api/reference.md:1034 +#: src/api/reference.md:1035 src/api/reference.md:1036 msgid "`ALL`" msgstr "`ALL`" -#: src/api/reference.md:1035 src/api/reference.md:1036 -#: src/api/reference.md:1139 +#: src/api/reference.md:1037 src/api/reference.md:1038 +#: src/api/reference.md:1141 msgid "`BADFAMILY`" msgstr "`BADFAMILY`" -#: src/api/reference.md:1037 src/api/reference.md:1038 -#: src/api/reference.md:1140 +#: src/api/reference.md:1039 src/api/reference.md:1040 +#: src/api/reference.md:1142 msgid "`BADFLAGS`" msgstr "`BADFLAGS`" -#: src/api/reference.md:1039 src/api/reference.md:1040 -#: src/api/reference.md:1141 +#: src/api/reference.md:1041 src/api/reference.md:1042 +#: src/api/reference.md:1143 msgid "`BADHINTS`" msgstr "`BADHINTS`" -#: src/api/reference.md:1041 src/api/reference.md:1042 -#: src/api/reference.md:1142 +#: src/api/reference.md:1043 src/api/reference.md:1044 +#: src/api/reference.md:1144 msgid "`BADNAME`" msgstr "`BADNAME`" -#: src/api/reference.md:1043 src/api/reference.md:1044 -#: src/api/reference.md:1143 +#: src/api/reference.md:1045 src/api/reference.md:1046 +#: src/api/reference.md:1145 msgid "`BADQUERY`" msgstr "`BADQUERY`" -#: src/api/reference.md:1045 src/api/reference.md:1046 -#: src/api/reference.md:1144 +#: src/api/reference.md:1047 src/api/reference.md:1048 +#: src/api/reference.md:1146 msgid "`BADRESP`" msgstr "`BADRESP`" -#: src/api/reference.md:1047 src/api/reference.md:1048 -#: src/api/reference.md:1145 +#: src/api/reference.md:1049 src/api/reference.md:1050 +#: src/api/reference.md:1147 msgid "`BADSTR`" msgstr "`BADSTR`" -#: src/api/reference.md:1049 src/api/reference.md:1050 -#: src/api/reference.md:1146 +#: src/api/reference.md:1051 src/api/reference.md:1052 +#: src/api/reference.md:1148 msgid "`CANCELLED`" msgstr "`CANCELLED`" -#: src/api/reference.md:1051 src/api/reference.md:1052 -#: src/api/reference.md:1147 +#: src/api/reference.md:1053 src/api/reference.md:1054 +#: src/api/reference.md:1149 msgid "`CONNREFUSED`" msgstr "`CONNREFUSED`" -#: src/api/reference.md:1053 src/api/reference.md:1054 -#: src/api/reference.md:1148 +#: src/api/reference.md:1055 src/api/reference.md:1056 +#: src/api/reference.md:1150 msgid "`DESTRUCTION`" msgstr "`DESTRUCTION`" -#: src/api/reference.md:1055 src/api/reference.md:1056 -#: src/api/reference.md:1149 +#: src/api/reference.md:1057 src/api/reference.md:1058 +#: src/api/reference.md:1151 msgid "`EOF`" msgstr "`EOF`" -#: src/api/reference.md:1057 src/api/reference.md:1058 -#: src/api/reference.md:1150 +#: src/api/reference.md:1059 src/api/reference.md:1060 +#: src/api/reference.md:1152 msgid "`FILE`" msgstr "`FILE`" -#: src/api/reference.md:1059 src/api/reference.md:1060 -#: src/api/reference.md:1151 +#: src/api/reference.md:1061 src/api/reference.md:1062 +#: src/api/reference.md:1153 msgid "`FORMERR`" msgstr "`FORMERR`" -#: src/api/reference.md:1061 src/api/reference.md:1062 -#: src/api/reference.md:1152 +#: src/api/reference.md:1063 src/api/reference.md:1064 +#: src/api/reference.md:1154 msgid "`LOADIPHLPAPI`" msgstr "`LOADIPHLPAPI`" -#: src/api/reference.md:1063 src/api/reference.md:1064 -#: src/api/reference.md:1153 +#: src/api/reference.md:1065 src/api/reference.md:1066 +#: src/api/reference.md:1155 msgid "`NODATA`" msgstr "`NODATA`" -#: src/api/reference.md:1065 src/api/reference.md:1066 -#: src/api/reference.md:1154 +#: src/api/reference.md:1067 src/api/reference.md:1068 +#: src/api/reference.md:1156 msgid "`NOMEM`" msgstr "`NOMEM`" -#: src/api/reference.md:1067 src/api/reference.md:1068 -#: src/api/reference.md:1155 +#: src/api/reference.md:1069 src/api/reference.md:1070 +#: src/api/reference.md:1157 msgid "`NONAME`" msgstr "`NONAME`" -#: src/api/reference.md:1069 src/api/reference.md:1070 -#: src/api/reference.md:1156 +#: src/api/reference.md:1071 src/api/reference.md:1072 +#: src/api/reference.md:1158 msgid "`NOTFOUND`" msgstr "`NOTFOUND`" -#: src/api/reference.md:1071 src/api/reference.md:1072 -#: src/api/reference.md:1157 +#: src/api/reference.md:1073 src/api/reference.md:1074 +#: src/api/reference.md:1159 msgid "`NOTIMP`" msgstr "`NOTIMP`" -#: src/api/reference.md:1073 src/api/reference.md:1074 -#: src/api/reference.md:1158 +#: src/api/reference.md:1075 src/api/reference.md:1076 +#: src/api/reference.md:1160 msgid "`NOTINITIALIZED`" msgstr "`NOTINITIALIZED`" -#: src/api/reference.md:1075 src/api/reference.md:1076 -#: src/api/reference.md:1159 +#: src/api/reference.md:1077 src/api/reference.md:1078 +#: src/api/reference.md:1161 msgid "`REFUSED`" msgstr "`REFUSED`" -#: src/api/reference.md:1077 src/api/reference.md:1078 -#: src/api/reference.md:1160 +#: src/api/reference.md:1079 src/api/reference.md:1080 +#: src/api/reference.md:1162 msgid "`SERVFAIL`" msgstr "`SERVFAIL`" -#: src/api/reference.md:1079 src/api/reference.md:1080 -#: src/api/reference.md:1161 +#: src/api/reference.md:1081 src/api/reference.md:1082 +#: src/api/reference.md:1163 msgid "`TIMEOUT`" msgstr "`TIMEOUT`" -#: src/api/reference.md:1081 src/api/reference.md:1082 +#: src/api/reference.md:1083 src/api/reference.md:1084 msgid "`V4MAPPED`" msgstr "`V4MAPPED`" -#: src/api/reference.md:1084 src/api/reference.md:1394 +#: src/api/reference.md:1086 src/api/reference.md:1396 #: src/api/reference.md:3086 src/api/reference.md:3087 #: src/api/reference.md:3276 msgid "`promises`" msgstr "`promises`" -#: src/api/reference.md:1086 +#: src/api/reference.md:1088 msgid "`dns/promises`" msgstr "`dns/promises`" -#: src/api/reference.md:1164 src/api/reference.md:2783 +#: src/api/reference.md:1166 src/api/reference.md:2783 msgid "`domain`" msgstr "`domain`" -#: src/api/reference.md:1168 +#: src/api/reference.md:1170 msgid "`Domain`" msgstr "`Domain`" -#: src/api/reference.md:1172 +#: src/api/reference.md:1174 msgid "`Domain` — module" msgstr "`Domain` — módulo" -#: src/api/reference.md:1173 +#: src/api/reference.md:1175 msgid "`add` — instance" msgstr "`add` — instancia" -#: src/api/reference.md:1174 src/api/reference.md:1215 +#: src/api/reference.md:1176 src/api/reference.md:1217 #: src/api/reference.md:3021 msgid "`addListener` — instance" msgstr "`addListener` — instancia" -#: src/api/reference.md:1175 +#: src/api/reference.md:1177 msgid "`bind` — instance" msgstr "`bind` — instancia" -#: src/api/reference.md:1176 src/api/reference.md:2255 +#: src/api/reference.md:1178 src/api/reference.md:2255 msgid "`create` — module" msgstr "`create` — módulo" -#: src/api/reference.md:1177 +#: src/api/reference.md:1179 msgid "`createDomain` — module" msgstr "`createDomain` — módulo" -#: src/api/reference.md:1178 src/api/reference.md:1219 +#: src/api/reference.md:1180 src/api/reference.md:1221 #: src/api/reference.md:3030 src/api/reference.md:3699 msgid "`emit` — instance" msgstr "`emit` — instancia" -#: src/api/reference.md:1179 +#: src/api/reference.md:1181 msgid "`enter` — instance" msgstr "`enter` — instancia" -#: src/api/reference.md:1181 +#: src/api/reference.md:1183 msgid "`intercept` — instance" msgstr "`intercept` — instancia" -#: src/api/reference.md:1182 src/api/reference.md:1230 +#: src/api/reference.md:1184 src/api/reference.md:1232 #: src/api/reference.md:2849 src/api/reference.md:3046 #: src/api/reference.md:3701 msgid "`on` — instance" msgstr "`on` — instancia" -#: src/api/reference.md:1183 +#: src/api/reference.md:1185 msgid "`remove` — instance" msgstr "`remove` — instancia" -#: src/api/reference.md:1188 +#: src/api/reference.md:1190 msgid "`_stack`" msgstr "`_stack`" -#: src/api/reference.md:1189 +#: src/api/reference.md:1191 msgid "`active`" msgstr "`active`" -#: src/api/reference.md:1190 +#: src/api/reference.md:1192 msgid "`members`" msgstr "`members`" -#: src/api/reference.md:1196 +#: src/api/reference.md:1198 msgid "`createRandom` — module _(class: `Wallet`)_" msgstr "`createRandom` — módulo _(clase: `Wallet`)_" -#: src/api/reference.md:1197 +#: src/api/reference.md:1199 msgid "`formatEther` — module" msgstr "`formatEther` — módulo" -#: src/api/reference.md:1198 +#: src/api/reference.md:1200 msgid "`formatUnits` — module" msgstr "`formatUnits` — módulo" -#: src/api/reference.md:1199 +#: src/api/reference.md:1201 msgid "`getAddress` — module" msgstr "`getAddress` — módulo" -#: src/api/reference.md:1200 +#: src/api/reference.md:1202 msgid "`parseEther` — module" msgstr "`parseEther` — módulo" -#: src/api/reference.md:1201 +#: src/api/reference.md:1203 msgid "`parseUnits` — module" msgstr "`parseUnits` — módulo" -#: src/api/reference.md:1207 +#: src/api/reference.md:1205 +msgid "`events`" +msgstr "`events`" + +#: src/api/reference.md:1209 msgid "`EventEmitter`" msgstr "`EventEmitter`" -#: src/api/reference.md:1208 +#: src/api/reference.md:1210 msgid "`EventEmitterAsyncResource`" msgstr "`EventEmitterAsyncResource`" -#: src/api/reference.md:1212 +#: src/api/reference.md:1214 msgid "`EventEmitter` — module" msgstr "`EventEmitter` — módulo" -#: src/api/reference.md:1213 +#: src/api/reference.md:1215 msgid "`EventEmitterAsyncResource` — module" msgstr "`EventEmitterAsyncResource` — módulo" -#: src/api/reference.md:1214 +#: src/api/reference.md:1216 msgid "`addAbortListener` — module" msgstr "`addAbortListener` — módulo" -#: src/api/reference.md:1216 +#: src/api/reference.md:1218 msgid "`asyncId` — instance _(class: `EventEmitterAsyncResource`)_" msgstr "`asyncId` — instancia _(clase: `EventEmitterAsyncResource`)_" -#: src/api/reference.md:1217 +#: src/api/reference.md:1219 msgid "`asyncResource` — instance _(class: `EventEmitterAsyncResource`)_" msgstr "`asyncResource` — instancia _(clase: `EventEmitterAsyncResource`)_" -#: src/api/reference.md:1218 +#: src/api/reference.md:1220 msgid "`domain` — instance" msgstr "`domain` — instancia" -#: src/api/reference.md:1220 +#: src/api/reference.md:1222 msgid "`emitDestroy` — instance _(class: `EventEmitterAsyncResource`)_" msgstr "`emitDestroy` — instancia _(clase: `EventEmitterAsyncResource`)_" -#: src/api/reference.md:1221 src/api/reference.md:3033 +#: src/api/reference.md:1223 src/api/reference.md:3033 msgid "`eventNames` — instance" msgstr "`eventNames` — instancia" -#: src/api/reference.md:1222 +#: src/api/reference.md:1224 msgid "`getEventListeners` — module" msgstr "`getEventListeners` — módulo" -#: src/api/reference.md:1223 src/api/reference.md:3036 +#: src/api/reference.md:1225 src/api/reference.md:3036 msgid "`getMaxListeners` — instance" msgstr "`getMaxListeners` — instancia" -#: src/api/reference.md:1224 +#: src/api/reference.md:1226 msgid "`getMaxListeners` — module" msgstr "`getMaxListeners` — módulo" -#: src/api/reference.md:1225 +#: src/api/reference.md:1227 msgid "`init` — module" msgstr "`init` — módulo" -#: src/api/reference.md:1226 src/api/reference.md:3043 +#: src/api/reference.md:1228 src/api/reference.md:3043 msgid "`listenerCount` — instance" msgstr "`listenerCount` — instancia" -#: src/api/reference.md:1227 +#: src/api/reference.md:1229 msgid "`listenerCount` — module" msgstr "`listenerCount` — módulo" -#: src/api/reference.md:1228 src/api/reference.md:3044 +#: src/api/reference.md:1230 src/api/reference.md:3044 msgid "`listeners` — instance" msgstr "`listeners` — instancia" -#: src/api/reference.md:1229 src/api/reference.md:3045 +#: src/api/reference.md:1231 src/api/reference.md:3045 msgid "`off` — instance" msgstr "`off` — instancia" -#: src/api/reference.md:1231 +#: src/api/reference.md:1233 msgid "`on` — module" msgstr "`on` — módulo" -#: src/api/reference.md:1232 src/api/reference.md:3047 +#: src/api/reference.md:1234 src/api/reference.md:3047 msgid "`once` — instance" msgstr "`once` — instancia" -#: src/api/reference.md:1233 +#: src/api/reference.md:1235 msgid "`once` — module" msgstr "`once` — módulo" -#: src/api/reference.md:1234 src/api/reference.md:3051 +#: src/api/reference.md:1236 src/api/reference.md:3051 msgid "`prependListener` — instance" msgstr "`prependListener` — instancia" -#: src/api/reference.md:1235 src/api/reference.md:3052 +#: src/api/reference.md:1237 src/api/reference.md:3052 msgid "`prependOnceListener` — instance" msgstr "`prependOnceListener` — instancia" -#: src/api/reference.md:1236 src/api/reference.md:3054 +#: src/api/reference.md:1238 src/api/reference.md:3054 msgid "`rawListeners` — instance" msgstr "`rawListeners` — instancia" -#: src/api/reference.md:1237 src/api/reference.md:3065 +#: src/api/reference.md:1239 src/api/reference.md:3065 msgid "`removeAllListeners` — instance" msgstr "`removeAllListeners` — instancia" -#: src/api/reference.md:1238 src/api/reference.md:3066 +#: src/api/reference.md:1240 src/api/reference.md:3066 msgid "`removeListener` — instance" msgstr "`removeListener` — instancia" -#: src/api/reference.md:1239 src/api/reference.md:3070 +#: src/api/reference.md:1241 src/api/reference.md:3070 msgid "`setMaxListeners` — instance" msgstr "`setMaxListeners` — instancia" -#: src/api/reference.md:1240 +#: src/api/reference.md:1242 msgid "`setMaxListeners` — module" msgstr "`setMaxListeners` — módulo" -#: src/api/reference.md:1241 +#: src/api/reference.md:1243 msgid "`triggerAsyncId` — instance _(class: `EventEmitterAsyncResource`)_" msgstr "`triggerAsyncId` — instancia _(clase: `EventEmitterAsyncResource`)_" -#: src/api/reference.md:1245 +#: src/api/reference.md:1247 msgid "`captureRejectionSymbol`" msgstr "`captureRejectionSymbol`" -#: src/api/reference.md:1246 +#: src/api/reference.md:1248 msgid "`captureRejections`" msgstr "`captureRejections`" -#: src/api/reference.md:1248 +#: src/api/reference.md:1250 msgid "`defaultMaxListeners`" msgstr "`defaultMaxListeners`" -#: src/api/reference.md:1249 +#: src/api/reference.md:1251 msgid "`errorMonitor`" msgstr "`errorMonitor`" -#: src/api/reference.md:1250 +#: src/api/reference.md:1252 msgid "`usingDomains`" msgstr "`usingDomains`" -#: src/api/reference.md:1252 +#: src/api/reference.md:1254 msgid "`fetch`" msgstr "`fetch`" -#: src/api/reference.md:1257 src/api/reference.md:2011 +#: src/api/reference.md:1259 src/api/reference.md:1996 msgid "`FormData`" msgstr "`FormData`" -#: src/api/reference.md:1258 src/api/reference.md:2012 +#: src/api/reference.md:1260 src/api/reference.md:1997 msgid "`Headers`" msgstr "`Headers`" -#: src/api/reference.md:1259 src/api/reference.md:2013 +#: src/api/reference.md:1261 src/api/reference.md:1998 msgid "`Request`" msgstr "`Request`" -#: src/api/reference.md:1260 src/api/reference.md:2014 +#: src/api/reference.md:1262 src/api/reference.md:1999 msgid "`Response`" msgstr "`Response`" -#: src/api/reference.md:1266 +#: src/api/reference.md:1268 msgid "`ffi`" msgstr "`ffi`" -#: src/api/reference.md:1271 +#: src/api/reference.md:1273 msgid "`getRawPointer` — module" msgstr "`getRawPointer` — módulo" -#: src/api/reference.md:1274 +#: src/api/reference.md:1276 msgid "`toString` — module" msgstr "`toString` — módulo" -#: src/api/reference.md:1280 +#: src/api/reference.md:1282 msgid "`fs`" msgstr "`fs`" -#: src/api/reference.md:1284 +#: src/api/reference.md:1286 msgid "`Dir`" msgstr "`Dir`" -#: src/api/reference.md:1285 +#: src/api/reference.md:1287 msgid "`Dirent`" msgstr "`Dirent`" -#: src/api/reference.md:1286 +#: src/api/reference.md:1288 msgid "`FileReadStream`" msgstr "`FileReadStream`" -#: src/api/reference.md:1287 +#: src/api/reference.md:1289 msgid "`FileWriteStream`" msgstr "`FileWriteStream`" -#: src/api/reference.md:1288 src/api/reference.md:3339 +#: src/api/reference.md:1290 src/api/reference.md:3339 msgid "`ReadStream`" msgstr "`ReadStream`" -#: src/api/reference.md:1289 +#: src/api/reference.md:1291 msgid "`Stats`" msgstr "`Stats`" -#: src/api/reference.md:1290 +#: src/api/reference.md:1292 msgid "`Utf8Stream`" msgstr "`Utf8Stream`" -#: src/api/reference.md:1291 src/api/reference.md:3340 +#: src/api/reference.md:1293 src/api/reference.md:3340 msgid "`WriteStream`" msgstr "`WriteStream`" -#: src/api/reference.md:1295 src/api/reference.md:1296 +#: src/api/reference.md:1297 src/api/reference.md:1298 msgid "`_toUnixTimestamp` — module" msgstr "`_toUnixTimestamp` — módulo" -#: src/api/reference.md:1297 src/api/reference.md:1400 +#: src/api/reference.md:1299 src/api/reference.md:1402 msgid "`access` — module" msgstr "`access` — módulo" -#: src/api/reference.md:1298 +#: src/api/reference.md:1300 msgid "`accessSync` — module" msgstr "`accessSync` — módulo" -#: src/api/reference.md:1299 src/api/reference.md:1401 +#: src/api/reference.md:1301 src/api/reference.md:1403 msgid "`appendFile` — module" msgstr "`appendFile` — módulo" -#: src/api/reference.md:1300 +#: src/api/reference.md:1302 msgid "`appendFileSync` — module" msgstr "`appendFileSync` — módulo" -#: src/api/reference.md:1301 src/api/reference.md:1402 +#: src/api/reference.md:1303 src/api/reference.md:1404 msgid "`chmod` — module" msgstr "`chmod` — módulo" -#: src/api/reference.md:1302 +#: src/api/reference.md:1304 msgid "`chmodSync` — module" msgstr "`chmodSync` — módulo" -#: src/api/reference.md:1303 src/api/reference.md:1403 +#: src/api/reference.md:1305 src/api/reference.md:1405 msgid "`chown` — module" msgstr "`chown` — módulo" -#: src/api/reference.md:1304 +#: src/api/reference.md:1306 msgid "`chownSync` — module" msgstr "`chownSync` — módulo" -#: src/api/reference.md:1305 src/api/reference.md:1735 +#: src/api/reference.md:1307 src/api/reference.md:1737 msgid "`close` — module" msgstr "`close` — módulo" -#: src/api/reference.md:1306 +#: src/api/reference.md:1308 msgid "`closeSync` — module" msgstr "`closeSync` — módulo" -#: src/api/reference.md:1307 src/api/reference.md:1404 +#: src/api/reference.md:1309 src/api/reference.md:1406 msgid "`copyFile` — module" msgstr "`copyFile` — módulo" -#: src/api/reference.md:1308 +#: src/api/reference.md:1310 msgid "`copyFileSync` — module" msgstr "`copyFileSync` — módulo" -#: src/api/reference.md:1309 src/api/reference.md:1405 +#: src/api/reference.md:1311 src/api/reference.md:1407 msgid "`cp` — module" msgstr "`cp` — módulo" -#: src/api/reference.md:1310 +#: src/api/reference.md:1312 msgid "`cpSync` — module" msgstr "`cpSync` — módulo" -#: src/api/reference.md:1311 +#: src/api/reference.md:1313 msgid "`createReadStream` — module" msgstr "`createReadStream` — módulo" -#: src/api/reference.md:1312 +#: src/api/reference.md:1314 msgid "`createWriteStream` — module" msgstr "`createWriteStream` — módulo" -#: src/api/reference.md:1313 +#: src/api/reference.md:1315 msgid "`exists` — module" msgstr "`exists` — módulo" -#: src/api/reference.md:1314 +#: src/api/reference.md:1316 msgid "`existsSync` — module" msgstr "`existsSync` — módulo" -#: src/api/reference.md:1315 +#: src/api/reference.md:1317 msgid "`fchmod` — module" msgstr "`fchmod` — módulo" -#: src/api/reference.md:1316 +#: src/api/reference.md:1318 msgid "`fchmodSync` — module" msgstr "`fchmodSync` — módulo" -#: src/api/reference.md:1317 +#: src/api/reference.md:1319 msgid "`fchown` — module" msgstr "`fchown` — módulo" -#: src/api/reference.md:1318 +#: src/api/reference.md:1320 msgid "`fchownSync` — module" msgstr "`fchownSync` — módulo" -#: src/api/reference.md:1319 +#: src/api/reference.md:1321 msgid "`fdatasync` — module" msgstr "`fdatasync` — módulo" -#: src/api/reference.md:1320 +#: src/api/reference.md:1322 msgid "`fdatasyncSync` — module" msgstr "`fdatasyncSync` — módulo" -#: src/api/reference.md:1321 +#: src/api/reference.md:1323 msgid "`fstat` — module" msgstr "`fstat` — módulo" -#: src/api/reference.md:1322 +#: src/api/reference.md:1324 msgid "`fstatSync` — module" msgstr "`fstatSync` — módulo" -#: src/api/reference.md:1323 +#: src/api/reference.md:1325 msgid "`fsync` — module" msgstr "`fsync` — módulo" -#: src/api/reference.md:1324 +#: src/api/reference.md:1326 msgid "`fsyncSync` — module" msgstr "`fsyncSync` — módulo" -#: src/api/reference.md:1325 +#: src/api/reference.md:1327 msgid "`ftruncate` — module" msgstr "`ftruncate` — módulo" -#: src/api/reference.md:1326 +#: src/api/reference.md:1328 msgid "`ftruncateSync` — module" msgstr "`ftruncateSync` — módulo" -#: src/api/reference.md:1327 +#: src/api/reference.md:1329 msgid "`futimes` — module" msgstr "`futimes` — módulo" -#: src/api/reference.md:1328 +#: src/api/reference.md:1330 msgid "`futimesSync` — module" msgstr "`futimesSync` — módulo" -#: src/api/reference.md:1329 src/api/reference.md:1406 +#: src/api/reference.md:1331 src/api/reference.md:1408 msgid "`glob` — module" msgstr "`glob` — módulo" -#: src/api/reference.md:1330 +#: src/api/reference.md:1332 msgid "`globSync` — module" msgstr "`globSync` — módulo" -#: src/api/reference.md:1331 src/api/reference.md:1407 +#: src/api/reference.md:1333 src/api/reference.md:1409 msgid "`lchmod` — module" msgstr "`lchmod` — módulo" -#: src/api/reference.md:1332 +#: src/api/reference.md:1334 msgid "`lchmodSync` — module" msgstr "`lchmodSync` — módulo" -#: src/api/reference.md:1333 src/api/reference.md:1408 +#: src/api/reference.md:1335 src/api/reference.md:1410 msgid "`lchown` — module" msgstr "`lchown` — módulo" -#: src/api/reference.md:1334 +#: src/api/reference.md:1336 msgid "`lchownSync` — module" msgstr "`lchownSync` — módulo" -#: src/api/reference.md:1335 src/api/reference.md:1409 +#: src/api/reference.md:1337 src/api/reference.md:1411 msgid "`link` — module" msgstr "`link` — módulo" -#: src/api/reference.md:1336 +#: src/api/reference.md:1338 msgid "`linkSync` — module" msgstr "`linkSync` — módulo" -#: src/api/reference.md:1337 src/api/reference.md:1410 +#: src/api/reference.md:1339 src/api/reference.md:1412 msgid "`lstat` — module" msgstr "`lstat` — módulo" -#: src/api/reference.md:1338 +#: src/api/reference.md:1340 msgid "`lstatSync` — module" msgstr "`lstatSync` — módulo" -#: src/api/reference.md:1339 src/api/reference.md:1411 +#: src/api/reference.md:1341 src/api/reference.md:1413 msgid "`lutimes` — module" msgstr "`lutimes` — módulo" -#: src/api/reference.md:1340 +#: src/api/reference.md:1342 msgid "`lutimesSync` — module" msgstr "`lutimesSync` — módulo" -#: src/api/reference.md:1341 src/api/reference.md:1412 +#: src/api/reference.md:1343 src/api/reference.md:1414 msgid "`mkdir` — module" msgstr "`mkdir` — módulo" -#: src/api/reference.md:1342 +#: src/api/reference.md:1344 msgid "`mkdirSync` — module" msgstr "`mkdirSync` — módulo" -#: src/api/reference.md:1343 src/api/reference.md:1413 +#: src/api/reference.md:1345 src/api/reference.md:1415 msgid "`mkdtemp` — module" msgstr "`mkdtemp` — módulo" -#: src/api/reference.md:1344 +#: src/api/reference.md:1346 msgid "`mkdtempDisposableSync` — module" msgstr "`mkdtempDisposableSync` — módulo" -#: src/api/reference.md:1345 +#: src/api/reference.md:1347 msgid "`mkdtempSync` — module" msgstr "`mkdtempSync` — módulo" -#: src/api/reference.md:1346 src/api/reference.md:1415 +#: src/api/reference.md:1348 src/api/reference.md:1417 msgid "`open` — module" msgstr "`open` — módulo" -#: src/api/reference.md:1347 +#: src/api/reference.md:1349 msgid "`openAsBlob` — module" msgstr "`openAsBlob` — módulo" -#: src/api/reference.md:1348 +#: src/api/reference.md:1350 msgid "`openSync` — module" msgstr "`openSync` — módulo" -#: src/api/reference.md:1349 src/api/reference.md:1416 +#: src/api/reference.md:1351 src/api/reference.md:1418 msgid "`opendir` — module" msgstr "`opendir` — módulo" -#: src/api/reference.md:1350 +#: src/api/reference.md:1352 msgid "`opendirSync` — module" msgstr "`opendirSync` — módulo" -#: src/api/reference.md:1351 +#: src/api/reference.md:1353 msgid "`read` — module" msgstr "`read` — módulo" -#: src/api/reference.md:1352 src/api/reference.md:1419 +#: src/api/reference.md:1354 src/api/reference.md:1421 msgid "`readFile` — module" msgstr "`readFile` — módulo" -#: src/api/reference.md:1353 +#: src/api/reference.md:1355 msgid "`readFileSync` — module" msgstr "`readFileSync` — módulo" -#: src/api/reference.md:1354 +#: src/api/reference.md:1356 msgid "`readSync` — module" msgstr "`readSync` — módulo" -#: src/api/reference.md:1355 src/api/reference.md:1420 +#: src/api/reference.md:1357 src/api/reference.md:1422 msgid "`readdir` — module" msgstr "`readdir` — módulo" -#: src/api/reference.md:1356 +#: src/api/reference.md:1358 msgid "`readdirSync` — module" msgstr "`readdirSync` — módulo" -#: src/api/reference.md:1357 src/api/reference.md:1421 +#: src/api/reference.md:1359 src/api/reference.md:1423 msgid "`readlink` — module" msgstr "`readlink` — módulo" -#: src/api/reference.md:1358 +#: src/api/reference.md:1360 msgid "`readlinkSync` — module" msgstr "`readlinkSync` — módulo" -#: src/api/reference.md:1359 +#: src/api/reference.md:1361 msgid "`readv` — module" msgstr "`readv` — módulo" -#: src/api/reference.md:1360 +#: src/api/reference.md:1362 msgid "`readvSync` — module" msgstr "`readvSync` — módulo" -#: src/api/reference.md:1361 src/api/reference.md:1422 +#: src/api/reference.md:1363 src/api/reference.md:1424 msgid "`realpath` — module" msgstr "`realpath` — módulo" -#: src/api/reference.md:1362 +#: src/api/reference.md:1364 msgid "`realpathSync` — module" msgstr "`realpathSync` — módulo" -#: src/api/reference.md:1363 src/api/reference.md:1423 +#: src/api/reference.md:1365 src/api/reference.md:1425 msgid "`rename` — module" msgstr "`rename` — módulo" -#: src/api/reference.md:1364 +#: src/api/reference.md:1366 msgid "`renameSync` — module" msgstr "`renameSync` — módulo" -#: src/api/reference.md:1365 src/api/reference.md:1424 +#: src/api/reference.md:1367 src/api/reference.md:1426 msgid "`rm` — module" msgstr "`rm` — módulo" -#: src/api/reference.md:1366 +#: src/api/reference.md:1368 msgid "`rmSync` — module" msgstr "`rmSync` — módulo" -#: src/api/reference.md:1367 src/api/reference.md:1425 +#: src/api/reference.md:1369 src/api/reference.md:1427 msgid "`rmdir` — module" msgstr "`rmdir` — módulo" -#: src/api/reference.md:1368 +#: src/api/reference.md:1370 msgid "`rmdirSync` — module" msgstr "`rmdirSync` — módulo" -#: src/api/reference.md:1369 src/api/reference.md:1426 +#: src/api/reference.md:1371 src/api/reference.md:1428 msgid "`stat` — module" msgstr "`stat` — módulo" -#: src/api/reference.md:1370 +#: src/api/reference.md:1372 msgid "`statSync` — module" msgstr "`statSync` — módulo" -#: src/api/reference.md:1371 src/api/reference.md:1427 +#: src/api/reference.md:1373 src/api/reference.md:1429 msgid "`statfs` — module" msgstr "`statfs` — módulo" -#: src/api/reference.md:1372 +#: src/api/reference.md:1374 msgid "`statfsSync` — module" msgstr "`statfsSync` — módulo" -#: src/api/reference.md:1373 src/api/reference.md:1428 +#: src/api/reference.md:1375 src/api/reference.md:1430 msgid "`symlink` — module" msgstr "`symlink` — módulo" -#: src/api/reference.md:1374 +#: src/api/reference.md:1376 msgid "`symlinkSync` — module" msgstr "`symlinkSync` — módulo" -#: src/api/reference.md:1375 src/api/reference.md:1429 +#: src/api/reference.md:1377 src/api/reference.md:1431 msgid "`truncate` — module" msgstr "`truncate` — módulo" -#: src/api/reference.md:1376 +#: src/api/reference.md:1378 msgid "`truncateSync` — module" msgstr "`truncateSync` — módulo" -#: src/api/reference.md:1377 src/api/reference.md:1430 +#: src/api/reference.md:1379 src/api/reference.md:1432 msgid "`unlink` — module" msgstr "`unlink` — módulo" -#: src/api/reference.md:1378 +#: src/api/reference.md:1380 msgid "`unlinkSync` — module" msgstr "`unlinkSync` — módulo" -#: src/api/reference.md:1379 +#: src/api/reference.md:1381 msgid "`unwatchFile` — module" msgstr "`unwatchFile` — módulo" -#: src/api/reference.md:1380 src/api/reference.md:1431 +#: src/api/reference.md:1382 src/api/reference.md:1433 msgid "`utimes` — module" msgstr "`utimes` — módulo" -#: src/api/reference.md:1381 +#: src/api/reference.md:1383 msgid "`utimesSync` — module" msgstr "`utimesSync` — módulo" -#: src/api/reference.md:1382 src/api/reference.md:1432 +#: src/api/reference.md:1384 src/api/reference.md:1434 msgid "`watch` — module" msgstr "`watch` — módulo" -#: src/api/reference.md:1383 +#: src/api/reference.md:1385 msgid "`watchFile` — module" msgstr "`watchFile` — módulo" -#: src/api/reference.md:1385 src/api/reference.md:1433 +#: src/api/reference.md:1387 src/api/reference.md:1435 msgid "`writeFile` — module" msgstr "`writeFile` — módulo" -#: src/api/reference.md:1386 +#: src/api/reference.md:1388 msgid "`writeFileSync` — module" msgstr "`writeFileSync` — módulo" -#: src/api/reference.md:1387 +#: src/api/reference.md:1389 msgid "`writeSync` — module" msgstr "`writeSync` — módulo" -#: src/api/reference.md:1388 +#: src/api/reference.md:1390 msgid "`writev` — module" msgstr "`writev` — módulo" -#: src/api/reference.md:1389 +#: src/api/reference.md:1391 msgid "`writevSync` — module" msgstr "`writevSync` — módulo" -#: src/api/reference.md:1396 +#: src/api/reference.md:1398 msgid "`fs/promises`" msgstr "`fs/promises`" -#: src/api/reference.md:1414 +#: src/api/reference.md:1416 msgid "`mkdtempDisposable` — module" msgstr "`mkdtempDisposable` — módulo" -#: src/api/reference.md:1417 +#: src/api/reference.md:1419 msgid "`pull` — instance _(class: `FileHandle`)_" msgstr "`pull` — instancia _(clase: `FileHandle`)_" -#: src/api/reference.md:1418 +#: src/api/reference.md:1420 msgid "`pullSync` — instance _(class: `FileHandle`)_" msgstr "`pullSync` — instancia _(clase: `FileHandle`)_" -#: src/api/reference.md:1434 +#: src/api/reference.md:1436 msgid "`writer` — instance _(class: `FileHandle`)_" msgstr "`writer` — instancia _(clase: `FileHandle`)_" -#: src/api/reference.md:1441 +#: src/api/reference.md:1443 msgid "`http`" msgstr "`http`" -#: src/api/reference.md:1445 src/api/reference.md:1676 +#: src/api/reference.md:1447 src/api/reference.md:1678 #: src/api/reference.md:3380 msgid "`Agent`" msgstr "`Agent`" -#: src/api/reference.md:1446 +#: src/api/reference.md:1448 msgid "`ClientRequest`" msgstr "`ClientRequest`" -#: src/api/reference.md:1447 src/api/reference.md:1448 +#: src/api/reference.md:1449 src/api/reference.md:1450 msgid "`IncomingMessage`" msgstr "`IncomingMessage`" -#: src/api/reference.md:1449 src/api/reference.md:1450 +#: src/api/reference.md:1451 src/api/reference.md:1452 msgid "`OutgoingMessage`" msgstr "`OutgoingMessage`" -#: src/api/reference.md:1451 src/api/reference.md:1452 -#: src/api/reference.md:1677 src/api/reference.md:1678 -#: src/api/reference.md:1879 +#: src/api/reference.md:1453 src/api/reference.md:1454 +#: src/api/reference.md:1679 src/api/reference.md:1680 +#: src/api/reference.md:1862 msgid "`Server`" msgstr "`Server`" -#: src/api/reference.md:1453 src/api/reference.md:1454 +#: src/api/reference.md:1455 src/api/reference.md:1456 msgid "`ServerResponse`" msgstr "`ServerResponse`" -#: src/api/reference.md:1455 src/api/reference.md:3686 +#: src/api/reference.md:1457 src/api/reference.md:3686 msgid "`WebSocket`" msgstr "`WebSocket`" -#: src/api/reference.md:1459 src/api/reference.md:1682 +#: src/api/reference.md:1461 src/api/reference.md:1684 #: src/api/reference.md:3385 msgid "`Agent` — module" msgstr "`Agent` — módulo" -#: src/api/reference.md:1460 src/api/reference.md:1683 -#: src/api/reference.md:1887 src/api/reference.md:3299 +#: src/api/reference.md:1462 src/api/reference.md:1685 +#: src/api/reference.md:1870 src/api/reference.md:3299 #: src/api/reference.md:3691 msgid "`Server` — module" msgstr "`Server` — módulo" -#: src/api/reference.md:1461 +#: src/api/reference.md:1463 msgid "`__get_aborted` — instance _(class: `ClientRequest`)_" msgstr "`__get_aborted` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1462 +#: src/api/reference.md:1464 msgid "`__get_aborted` — instance _(class: `IncomingMessage`)_" msgstr "`__get_aborted` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1463 +#: src/api/reference.md:1465 msgid "`__get_complete` — instance _(class: `IncomingMessage`)_" msgstr "`__get_complete` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1464 +#: src/api/reference.md:1466 msgid "`__get_connection` — instance _(class: `IncomingMessage`)_" msgstr "`__get_connection` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1465 +#: src/api/reference.md:1467 msgid "`__get_connection` — instance _(class: `ClientRequest`)_" msgstr "`__get_connection` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1466 +#: src/api/reference.md:1468 msgid "`__get_createConnection` — instance _(class: `Agent`)_" msgstr "`__get_createConnection` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1467 +#: src/api/reference.md:1469 msgid "`__get_createSocket` — instance _(class: `Agent`)_" msgstr "`__get_createSocket` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1468 +#: src/api/reference.md:1470 msgid "`__get_defaultPort` — instance _(class: `Agent`)_" msgstr "`__get_defaultPort` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1469 +#: src/api/reference.md:1471 msgid "`__get_destroyed` — instance _(class: `Agent`)_" msgstr "`__get_destroyed` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1470 +#: src/api/reference.md:1472 msgid "`__get_destroyed` — instance _(class: `ClientRequest`)_" msgstr "`__get_destroyed` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1471 +#: src/api/reference.md:1473 msgid "`__get_destroyed` — instance _(class: `IncomingMessage`)_" msgstr "`__get_destroyed` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1472 +#: src/api/reference.md:1474 msgid "`__get_finished` — instance _(class: `ClientRequest`)_" msgstr "`__get_finished` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1473 +#: src/api/reference.md:1475 msgid "`__get_freeSockets` — instance _(class: `Agent`)_" msgstr "`__get_freeSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1474 +#: src/api/reference.md:1476 msgid "`__get_headers` — instance _(class: `IncomingMessage`)_" msgstr "`__get_headers` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1475 +#: src/api/reference.md:1477 msgid "`__get_headersSent` — instance _(class: `ServerResponse`)_" msgstr "`__get_headersSent` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1476 +#: src/api/reference.md:1478 msgid "`__get_headersTimeout` — instance _(class: `HttpServer`)_" msgstr "`__get_headersTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1477 +#: src/api/reference.md:1479 msgid "`__get_host` — instance _(class: `ClientRequest`)_" msgstr "`__get_host` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1478 +#: src/api/reference.md:1480 msgid "`__get_httpVersion` — instance _(class: `IncomingMessage`)_" msgstr "`__get_httpVersion` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1479 +#: src/api/reference.md:1481 msgid "`__get_httpVersionMajor` — instance _(class: `IncomingMessage`)_" msgstr "`__get_httpVersionMajor` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1480 +#: src/api/reference.md:1482 msgid "`__get_httpVersionMinor` — instance _(class: `IncomingMessage`)_" msgstr "`__get_httpVersionMinor` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1481 +#: src/api/reference.md:1483 msgid "`__get_keepAlive` — instance _(class: `Agent`)_" msgstr "`__get_keepAlive` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1482 +#: src/api/reference.md:1484 msgid "`__get_keepAliveMsecs` — instance _(class: `Agent`)_" msgstr "`__get_keepAliveMsecs` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1483 +#: src/api/reference.md:1485 msgid "`__get_keepAliveTimeout` — instance _(class: `HttpServer`)_" msgstr "`__get_keepAliveTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1484 +#: src/api/reference.md:1486 msgid "`__get_keepAliveTimeoutBuffer` — instance _(class: `HttpServer`)_" msgstr "`__get_keepAliveTimeoutBuffer` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1485 +#: src/api/reference.md:1487 msgid "`__get_listening` — instance _(class: `HttpServer`)_" msgstr "`__get_listening` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1486 +#: src/api/reference.md:1488 msgid "`__get_maxFreeSockets` — instance _(class: `Agent`)_" msgstr "`__get_maxFreeSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1487 +#: src/api/reference.md:1489 msgid "`__get_maxHeadersCount` — instance _(class: `HttpServer`)_" msgstr "`__get_maxHeadersCount` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1488 +#: src/api/reference.md:1490 msgid "`__get_maxHeadersCount` — instance _(class: `ClientRequest`)_" msgstr "`__get_maxHeadersCount` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1489 +#: src/api/reference.md:1491 msgid "`__get_maxRequestsPerSocket` — instance _(class: `HttpServer`)_" msgstr "`__get_maxRequestsPerSocket` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1490 +#: src/api/reference.md:1492 msgid "`__get_maxSockets` — instance _(class: `Agent`)_" msgstr "`__get_maxSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1491 +#: src/api/reference.md:1493 msgid "`__get_maxTotalSockets` — instance _(class: `Agent`)_" msgstr "`__get_maxTotalSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1492 +#: src/api/reference.md:1494 msgid "`__get_method` — instance _(class: `ClientRequest`)_" msgstr "`__get_method` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1493 +#: src/api/reference.md:1495 msgid "`__get_method` — instance _(class: `IncomingMessage`)_" msgstr "`__get_method` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1494 +#: src/api/reference.md:1496 msgid "`__get_path` — instance _(class: `ClientRequest`)_" msgstr "`__get_path` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1495 +#: src/api/reference.md:1497 msgid "`__get_protocol` — instance _(class: `Agent`)_" msgstr "`__get_protocol` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1496 +#: src/api/reference.md:1498 msgid "`__get_protocol` — instance _(class: `ClientRequest`)_" msgstr "`__get_protocol` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1497 +#: src/api/reference.md:1499 #, fuzzy msgid "`__get_rawHeaders` — instance _(class: `IncomingMessage`)_" msgstr "`__get_headers` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1498 +#: src/api/reference.md:1500 msgid "`__get_req` — instance _(class: `IncomingMessage`)_" msgstr "`__get_req` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1499 +#: src/api/reference.md:1501 msgid "`__get_requestTimeout` — instance _(class: `HttpServer`)_" msgstr "`__get_requestTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1500 +#: src/api/reference.md:1502 msgid "`__get_requests` — instance _(class: `Agent`)_" msgstr "`__get_requests` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1501 +#: src/api/reference.md:1503 msgid "`__get_reusedSocket` — instance _(class: `ClientRequest`)_" msgstr "`__get_reusedSocket` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1502 +#: src/api/reference.md:1504 msgid "`__get_socket` — instance _(class: `IncomingMessage`)_" msgstr "`__get_socket` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1503 +#: src/api/reference.md:1505 msgid "`__get_socket` — instance _(class: `ClientRequest`)_" msgstr "`__get_socket` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1504 +#: src/api/reference.md:1506 msgid "`__get_sockets` — instance _(class: `Agent`)_" msgstr "`__get_sockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1505 +#: src/api/reference.md:1507 msgid "`__get_statusCode` — instance _(class: `IncomingMessage`)_" msgstr "`__get_statusCode` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1506 +#: src/api/reference.md:1508 msgid "`__get_statusCode` — instance _(class: `ServerResponse`)_" msgstr "`__get_statusCode` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1507 +#: src/api/reference.md:1509 msgid "`__get_statusMessage` — instance _(class: `IncomingMessage`)_" msgstr "`__get_statusMessage` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1508 +#: src/api/reference.md:1510 msgid "`__get_timeout` — instance _(class: `HttpServer`)_" msgstr "`__get_timeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1509 +#: src/api/reference.md:1511 msgid "`__get_trailers` — instance _(class: `IncomingMessage`)_" msgstr "`__get_trailers` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1510 +#: src/api/reference.md:1512 msgid "`__get_url` — instance _(class: `IncomingMessage`)_" msgstr "`__get_url` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1511 +#: src/api/reference.md:1513 msgid "`__get_writableEnded` — instance _(class: `ClientRequest`)_" msgstr "`__get_writableEnded` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1512 +#: src/api/reference.md:1514 msgid "`__get_writableEnded` — instance _(class: `ServerResponse`)_" msgstr "`__get_writableEnded` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1513 +#: src/api/reference.md:1515 msgid "`__get_writableFinished` — instance _(class: `ClientRequest`)_" msgstr "`__get_writableFinished` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1514 +#: src/api/reference.md:1516 msgid "`__get_writableFinished` — instance _(class: `ServerResponse`)_" msgstr "`__get_writableFinished` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1515 +#: src/api/reference.md:1517 msgid "`__set_createConnection` — instance _(class: `Agent`)_" msgstr "`__set_createConnection` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1516 +#: src/api/reference.md:1518 msgid "`__set_createSocket` — instance _(class: `Agent`)_" msgstr "`__set_createSocket` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1517 +#: src/api/reference.md:1519 msgid "`__set_headersTimeout` — instance _(class: `HttpServer`)_" msgstr "`__set_headersTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1518 +#: src/api/reference.md:1520 msgid "`__set_keepAlive` — instance _(class: `Agent`)_" msgstr "`__set_keepAlive` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1519 +#: src/api/reference.md:1521 msgid "`__set_keepAliveMsecs` — instance _(class: `Agent`)_" msgstr "`__set_keepAliveMsecs` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1520 +#: src/api/reference.md:1522 msgid "`__set_keepAliveTimeout` — instance _(class: `HttpServer`)_" msgstr "`__set_keepAliveTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1521 +#: src/api/reference.md:1523 msgid "`__set_keepAliveTimeoutBuffer` — instance _(class: `HttpServer`)_" msgstr "`__set_keepAliveTimeoutBuffer` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1522 +#: src/api/reference.md:1524 msgid "`__set_maxFreeSockets` — instance _(class: `Agent`)_" msgstr "`__set_maxFreeSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1523 +#: src/api/reference.md:1525 msgid "`__set_maxHeadersCount` — instance _(class: `HttpServer`)_" msgstr "`__set_maxHeadersCount` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1524 +#: src/api/reference.md:1526 msgid "`__set_maxRequestsPerSocket` — instance _(class: `HttpServer`)_" msgstr "`__set_maxRequestsPerSocket` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1525 +#: src/api/reference.md:1527 msgid "`__set_maxSockets` — instance _(class: `Agent`)_" msgstr "`__set_maxSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1526 +#: src/api/reference.md:1528 msgid "`__set_maxTotalSockets` — instance _(class: `Agent`)_" msgstr "`__set_maxTotalSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1527 +#: src/api/reference.md:1529 msgid "`__set_protocol` — instance _(class: `Agent`)_" msgstr "`__set_protocol` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1528 +#: src/api/reference.md:1530 msgid "`__set_requestTimeout` — instance _(class: `HttpServer`)_" msgstr "`__set_requestTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1529 +#: src/api/reference.md:1531 msgid "`__set_sendDate` — instance _(class: `ServerResponse`)_" msgstr "`__set_sendDate` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1530 +#: src/api/reference.md:1532 msgid "`__set_statusCode` — instance _(class: `ServerResponse`)_" msgstr "`__set_statusCode` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1531 +#: src/api/reference.md:1533 msgid "`__set_statusMessage` — instance _(class: `ServerResponse`)_" msgstr "`__set_statusMessage` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1532 +#: src/api/reference.md:1534 msgid "`__set_strictContentLength` — instance _(class: `ServerResponse`)_" msgstr "`__set_strictContentLength` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1533 +#: src/api/reference.md:1535 msgid "`__set_timeout` — instance _(class: `HttpServer`)_" msgstr "`__set_timeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1534 +#: src/api/reference.md:1536 msgid "`_connectionListener` — module" msgstr "`_connectionListener` — módulo" -#: src/api/reference.md:1535 +#: src/api/reference.md:1537 msgid "`abort` — instance _(class: `ClientRequest`)_" msgstr "`abort` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1536 +#: src/api/reference.md:1538 msgid "`addListener` — instance _(class: `HttpServer`)_" msgstr "`addListener` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1537 +#: src/api/reference.md:1539 msgid "`addListener` — instance _(class: `IncomingMessage`)_" msgstr "`addListener` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1538 +#: src/api/reference.md:1540 msgid "`addListener` — instance _(class: `ServerResponse`)_" msgstr "`addListener` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1539 +#: src/api/reference.md:1541 msgid "`addTrailers` — instance _(class: `ServerResponse`)_" msgstr "`addTrailers` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1540 +#: src/api/reference.md:1542 msgid "`address` — instance _(class: `HttpServer`)_" msgstr "`address` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1541 +#: src/api/reference.md:1543 msgid "`appendHeader` — instance _(class: `ServerResponse`)_" msgstr "`appendHeader` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1542 src/api/reference.md:3388 +#: src/api/reference.md:1544 src/api/reference.md:3388 msgid "`close` — instance _(class: `Agent`)_" msgstr "`close` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1543 +#: src/api/reference.md:1545 msgid "`close` — instance _(class: `HttpServer`)_" msgstr "`close` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1544 +#: src/api/reference.md:1546 msgid "`closeAllConnections` — instance _(class: `HttpServer`)_" msgstr "`closeAllConnections` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1545 +#: src/api/reference.md:1547 msgid "`closeIdleConnections` — instance _(class: `HttpServer`)_" msgstr "`closeIdleConnections` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1546 +#: src/api/reference.md:1548 #, fuzzy msgid "`complete` — instance _(class: `IncomingMessage`)_" msgstr "`__get_complete` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1547 +#: src/api/reference.md:1549 msgid "`connection` — instance _(class: `IncomingMessage`)_" msgstr "`connection` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1548 +#: src/api/reference.md:1550 msgid "`cork` — instance _(class: `ClientRequest`)_" msgstr "`cork` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1549 +#: src/api/reference.md:1551 msgid "`cork` — instance _(class: `ServerResponse`)_" msgstr "`cork` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1550 src/api/reference.md:1551 -#: src/api/reference.md:1660 src/api/reference.md:1704 -#: src/api/reference.md:1705 src/api/reference.md:1916 +#: src/api/reference.md:1552 src/api/reference.md:1553 +#: src/api/reference.md:1662 src/api/reference.md:1706 +#: src/api/reference.md:1707 src/api/reference.md:1899 #: src/api/reference.md:3308 msgid "`createServer` — module" msgstr "`createServer` — módulo" -#: src/api/reference.md:1552 +#: src/api/reference.md:1554 msgid "`defaultPort` — instance _(class: `Agent`)_" msgstr "`defaultPort` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1553 src/api/reference.md:3390 +#: src/api/reference.md:1555 src/api/reference.md:3390 msgid "`destroy` — instance _(class: `Agent`)_" msgstr "`destroy` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1554 +#: src/api/reference.md:1556 msgid "`destroy` — instance _(class: `IncomingMessage`)_" msgstr "`destroy` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1555 +#: src/api/reference.md:1557 msgid "`destroy` — instance _(class: `ClientRequest`)_" msgstr "`destroy` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1556 +#: src/api/reference.md:1558 msgid "`destroyed` — instance _(class: `Agent`)_" msgstr "`destroyed` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1557 +#: src/api/reference.md:1559 msgid "`end` — instance _(class: `ServerResponse`)_" msgstr "`end` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1558 +#: src/api/reference.md:1560 msgid "`flushHeaders` — instance _(class: `ClientRequest`)_" msgstr "`flushHeaders` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1559 +#: src/api/reference.md:1561 msgid "`flushHeaders` — instance _(class: `ServerResponse`)_" msgstr "`flushHeaders` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1560 +#: src/api/reference.md:1562 msgid "`freeSockets` — instance _(class: `Agent`)_" msgstr "`freeSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1561 src/api/reference.md:1706 +#: src/api/reference.md:1563 src/api/reference.md:1708 msgid "`get` — module" msgstr "`get` — módulo" -#: src/api/reference.md:1562 +#: src/api/reference.md:1564 msgid "`getHeader` — instance _(class: `ClientRequest`)_" msgstr "`getHeader` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1563 +#: src/api/reference.md:1565 msgid "`getHeader` — instance _(class: `ServerResponse`)_" msgstr "`getHeader` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1564 +#: src/api/reference.md:1566 msgid "`getHeaderNames` — instance _(class: `ClientRequest`)_" msgstr "`getHeaderNames` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1565 +#: src/api/reference.md:1567 msgid "`getHeaderNames` — instance _(class: `ServerResponse`)_" msgstr "`getHeaderNames` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1566 +#: src/api/reference.md:1568 msgid "`getHeaders` — instance _(class: `ClientRequest`)_" msgstr "`getHeaders` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1567 +#: src/api/reference.md:1569 msgid "`getHeaders` — instance _(class: `ServerResponse`)_" msgstr "`getHeaders` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1568 +#: src/api/reference.md:1570 msgid "`getName` — instance _(class: `Agent`)_" msgstr "`getName` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1569 +#: src/api/reference.md:1571 msgid "`getRawHeaderNames` — instance _(class: `ClientRequest`)_" msgstr "`getRawHeaderNames` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1570 +#: src/api/reference.md:1572 msgid "`getStatus` — instance _(class: `ServerResponse`)_" msgstr "`getStatus` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1571 +#: src/api/reference.md:1573 msgid "`hasHeader` — instance _(class: `ClientRequest`)_" msgstr "`hasHeader` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1572 +#: src/api/reference.md:1574 msgid "`hasHeader` — instance _(class: `ServerResponse`)_" msgstr "`hasHeader` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1573 +#: src/api/reference.md:1575 msgid "`headers` — instance _(class: `IncomingMessage`)_" msgstr "`headers` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1574 +#: src/api/reference.md:1576 msgid "`headersTimeout` — instance _(class: `HttpServer`)_" msgstr "`headersTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1575 +#: src/api/reference.md:1577 msgid "`httpVersion` — instance _(class: `IncomingMessage`)_" msgstr "`httpVersion` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1576 +#: src/api/reference.md:1578 #, fuzzy msgid "`httpVersionMajor` — instance _(class: `IncomingMessage`)_" msgstr "`httpVersion` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1577 +#: src/api/reference.md:1579 #, fuzzy msgid "`httpVersionMinor` — instance _(class: `IncomingMessage`)_" msgstr "`httpVersion` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1578 +#: src/api/reference.md:1580 msgid "`keepAlive` — instance _(class: `Agent`)_" msgstr "`keepAlive` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1579 +#: src/api/reference.md:1581 msgid "`keepAliveMsecs` — instance _(class: `Agent`)_" msgstr "`keepAliveMsecs` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1580 +#: src/api/reference.md:1582 msgid "`keepAliveTimeout` — instance _(class: `HttpServer`)_" msgstr "`keepAliveTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1581 +#: src/api/reference.md:1583 msgid "`keepAliveTimeoutBuffer` — instance _(class: `HttpServer`)_" msgstr "`keepAliveTimeoutBuffer` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1582 +#: src/api/reference.md:1584 msgid "" "`keepSocketAlive` — instance _(class: `Agent`)_ ⚠ **stub** — reqwest owns " "the keep-alive pool; per-socket hooks are no-ops, warns once (#4917)" @@ -40495,113 +40722,113 @@ msgstr "" "la piscina de mantenimiento; los ganchos de per-socket son no-ops, advierte " "una vez (#4917)" -#: src/api/reference.md:1583 +#: src/api/reference.md:1585 msgid "`listen` — instance _(class: `HttpServer`)_" msgstr "`listen` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1584 +#: src/api/reference.md:1586 msgid "`listenerCount` — instance _(class: `ClientRequest`)_" msgstr "`listenerCount` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1585 +#: src/api/reference.md:1587 msgid "`listening` — instance _(class: `HttpServer`)_" msgstr "`listening` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1586 +#: src/api/reference.md:1588 msgid "`maxFreeSockets` — instance _(class: `Agent`)_" msgstr "`maxFreeSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1587 +#: src/api/reference.md:1589 msgid "`maxHeadersCount` — instance _(class: `HttpServer`)_" msgstr "`maxHeadersCount` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1588 +#: src/api/reference.md:1590 msgid "`maxRequestsPerSocket` — instance _(class: `HttpServer`)_" msgstr "`maxRequestsPerSocket` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1589 +#: src/api/reference.md:1591 msgid "`maxSockets` — instance _(class: `Agent`)_" msgstr "`maxSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1590 +#: src/api/reference.md:1592 msgid "`maxTotalSockets` — instance _(class: `Agent`)_" msgstr "`maxTotalSockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1591 +#: src/api/reference.md:1593 msgid "`method` — instance _(class: `IncomingMessage`)_" msgstr "`method` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1592 +#: src/api/reference.md:1594 msgid "`on` — instance _(class: `HttpServer`)_" msgstr "`on` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1593 +#: src/api/reference.md:1595 msgid "`on` — instance _(class: `IncomingMessage`)_" msgstr "`on` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1594 +#: src/api/reference.md:1596 msgid "`on` — instance _(class: `ServerResponse`)_" msgstr "`on` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1595 +#: src/api/reference.md:1597 msgid "`once` — instance _(class: `IncomingMessage`)_" msgstr "`once` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1596 +#: src/api/reference.md:1598 msgid "`once` — instance _(class: `ClientRequest`)_" msgstr "`once` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1597 +#: src/api/reference.md:1599 msgid "`pause` — instance _(class: `IncomingMessage`)_" msgstr "`pause` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1598 +#: src/api/reference.md:1600 msgid "`protocol` — instance _(class: `Agent`)_" msgstr "`protocol` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1599 +#: src/api/reference.md:1601 #, fuzzy msgid "`rawHeaders` — instance _(class: `IncomingMessage`)_" msgstr "`headers` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1600 +#: src/api/reference.md:1602 msgid "`read` — instance _(class: `IncomingMessage`)_" msgstr "`read` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1601 +#: src/api/reference.md:1603 msgid "`ref` — instance _(class: `HttpServer`)_" msgstr "`ref` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1602 +#: src/api/reference.md:1604 msgid "`removeHeader` — instance _(class: `ClientRequest`)_" msgstr "`removeHeader` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1603 +#: src/api/reference.md:1605 msgid "`removeHeader` — instance _(class: `ServerResponse`)_" msgstr "`removeHeader` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1604 +#: src/api/reference.md:1606 msgid "`req` — instance _(class: `IncomingMessage`)_" msgstr "`req` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1605 src/api/reference.md:1716 +#: src/api/reference.md:1607 src/api/reference.md:1718 #: src/api/reference.md:3393 msgid "`request` — module" msgstr "`request` — módulo" -#: src/api/reference.md:1606 +#: src/api/reference.md:1608 msgid "`requestTimeout` — instance _(class: `HttpServer`)_" msgstr "`requestTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1607 +#: src/api/reference.md:1609 msgid "`requests` — instance _(class: `Agent`)_" msgstr "`requests` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1608 +#: src/api/reference.md:1610 msgid "`resume` — instance _(class: `IncomingMessage`)_" msgstr "`resume` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1609 +#: src/api/reference.md:1611 msgid "" "`reuseSocket` — instance _(class: `Agent`)_ ⚠ **stub** — reqwest owns the " "keep-alive pool; per-socket hooks are no-ops, warns once (#4917)" @@ -40610,369 +40837,369 @@ msgstr "" "piscina de mantenimiento; los ganchos de per-socket son no-ops, advierte una " "vez (#4917)" -#: src/api/reference.md:1610 +#: src/api/reference.md:1612 msgid "`setEncoding` — instance _(class: `IncomingMessage`)_" msgstr "`setEncoding` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1611 +#: src/api/reference.md:1613 msgid "`setGlobalProxyFromEnv` — module" msgstr "`setGlobalProxyFromEnv` — módulo" -#: src/api/reference.md:1612 +#: src/api/reference.md:1614 msgid "`setHeader` — instance _(class: `ClientRequest`)_" msgstr "`setHeader` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1613 +#: src/api/reference.md:1615 msgid "`setHeader` — instance _(class: `ServerResponse`)_" msgstr "`setHeader` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1614 +#: src/api/reference.md:1616 msgid "`setHeaders` — instance _(class: `ServerResponse`)_" msgstr "`setHeaders` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1615 +#: src/api/reference.md:1617 msgid "`setMaxIdleHTTPParsers` — module" msgstr "`setMaxIdleHTTPParsers` — módulo" -#: src/api/reference.md:1616 +#: src/api/reference.md:1618 msgid "`setNoDelay` — instance _(class: `ClientRequest`)_" msgstr "`setNoDelay` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1617 +#: src/api/reference.md:1619 msgid "`setSocketKeepAlive` — instance _(class: `ClientRequest`)_" msgstr "`setSocketKeepAlive` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1618 +#: src/api/reference.md:1620 msgid "`setStatus` — instance _(class: `ServerResponse`)_" msgstr "`setStatus` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1619 +#: src/api/reference.md:1621 msgid "`setTimeout` — instance _(class: `HttpServer`)_" msgstr "`setTimeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1620 +#: src/api/reference.md:1622 msgid "`setTimeout` — instance _(class: `IncomingMessage`)_" msgstr "`setTimeout` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1621 +#: src/api/reference.md:1623 msgid "`setTimeout` — instance _(class: `ClientRequest`)_" msgstr "`setTimeout` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1622 +#: src/api/reference.md:1624 msgid "`setTimeout` — instance _(class: `ServerResponse`)_" msgstr "`setTimeout` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1623 +#: src/api/reference.md:1625 msgid "`socket` — instance _(class: `IncomingMessage`)_" msgstr "`socket` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1624 +#: src/api/reference.md:1626 msgid "`sockets` — instance _(class: `Agent`)_" msgstr "`sockets` — instancia _(clase: `Agent`)_" -#: src/api/reference.md:1625 +#: src/api/reference.md:1627 msgid "`statusCode` — instance _(class: `IncomingMessage`)_" msgstr "`statusCode` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1626 +#: src/api/reference.md:1628 msgid "`statusMessage` — instance _(class: `IncomingMessage`)_" msgstr "`statusMessage` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1627 +#: src/api/reference.md:1629 msgid "`timeout` — instance _(class: `HttpServer`)_" msgstr "`timeout` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1628 +#: src/api/reference.md:1630 msgid "`trailers` — instance _(class: `IncomingMessage`)_" msgstr "`trailers` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1629 +#: src/api/reference.md:1631 msgid "`uncork` — instance _(class: `ClientRequest`)_" msgstr "`uncork` — instancia _(clase: `ClientRequest`)_" -#: src/api/reference.md:1630 +#: src/api/reference.md:1632 msgid "`uncork` — instance _(class: `ServerResponse`)_" msgstr "`uncork` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1631 +#: src/api/reference.md:1633 msgid "`unref` — instance _(class: `HttpServer`)_" msgstr "`unref` — instancia _(clase: `HttpServer`)_" -#: src/api/reference.md:1632 +#: src/api/reference.md:1634 msgid "`url` — instance _(class: `IncomingMessage`)_" msgstr "`url` — instancia _(clase: `IncomingMessage`)_" -#: src/api/reference.md:1633 +#: src/api/reference.md:1635 msgid "`validateHeaderName` — module" msgstr "`validateHeaderName` — módulo" -#: src/api/reference.md:1634 +#: src/api/reference.md:1636 msgid "`validateHeaderValue` — module" msgstr "`validateHeaderValue` — módulo" -#: src/api/reference.md:1635 +#: src/api/reference.md:1637 msgid "`write` — instance _(class: `ServerResponse`)_" msgstr "`write` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1636 +#: src/api/reference.md:1638 msgid "`writeContinue` — instance _(class: `ServerResponse`)_" msgstr "`writeContinue` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1637 +#: src/api/reference.md:1639 msgid "`writeEarlyHints` — instance _(class: `ServerResponse`)_" msgstr "`writeEarlyHints` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1638 +#: src/api/reference.md:1640 msgid "`writeHead` — instance _(class: `ServerResponse`)_" msgstr "`writeHead` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1639 +#: src/api/reference.md:1641 msgid "`writeProcessing` — instance _(class: `ServerResponse`)_" msgstr "`writeProcessing` — instancia _(clase: `ServerResponse`)_" -#: src/api/reference.md:1643 +#: src/api/reference.md:1645 msgid "`METHODS`" msgstr "`METHODS`" -#: src/api/reference.md:1644 +#: src/api/reference.md:1646 msgid "`STATUS_CODES`" msgstr "`STATUS_CODES`" -#: src/api/reference.md:1645 src/api/reference.md:1724 +#: src/api/reference.md:1647 src/api/reference.md:1726 msgid "`globalAgent`" msgstr "`globalAgent`" -#: src/api/reference.md:1646 +#: src/api/reference.md:1648 msgid "`kConnectionsCheckingInterval`" msgstr "`kConnectionsCheckingInterval`" -#: src/api/reference.md:1647 +#: src/api/reference.md:1649 msgid "`maxHeaderSize`" msgstr "`maxHeaderSize`" -#: src/api/reference.md:1649 +#: src/api/reference.md:1651 msgid "`http2`" msgstr "`http2`" -#: src/api/reference.md:1653 +#: src/api/reference.md:1655 msgid "`Http2ServerRequest`" msgstr "`Http2ServerRequest`" -#: src/api/reference.md:1654 +#: src/api/reference.md:1656 msgid "`Http2ServerResponse`" msgstr "`Http2ServerResponse`" -#: src/api/reference.md:1659 +#: src/api/reference.md:1661 msgid "`createSecureServer` — module" msgstr "`createSecureServer` — módulo" -#: src/api/reference.md:1661 +#: src/api/reference.md:1663 msgid "`getDefaultSettings` — module" msgstr "`getDefaultSettings` — módulo" -#: src/api/reference.md:1662 +#: src/api/reference.md:1664 msgid "`getPackedSettings` — module" msgstr "`getPackedSettings` — módulo" -#: src/api/reference.md:1663 +#: src/api/reference.md:1665 msgid "`getUnpackedSettings` — module" msgstr "`getUnpackedSettings` — módulo" -#: src/api/reference.md:1664 +#: src/api/reference.md:1666 msgid "`performServerHandshake` — module" msgstr "`performServerHandshake` — módulo" -#: src/api/reference.md:1670 +#: src/api/reference.md:1672 msgid "`sensitiveHeaders`" msgstr "`sensitiveHeaders`" -#: src/api/reference.md:1672 +#: src/api/reference.md:1674 msgid "`https`" msgstr "`https`" -#: src/api/reference.md:1684 +#: src/api/reference.md:1686 msgid "`__get_headersTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__get_headersTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1685 +#: src/api/reference.md:1687 msgid "`__get_keepAliveTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__get_keepAliveTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1686 +#: src/api/reference.md:1688 msgid "`__get_keepAliveTimeoutBuffer` — instance _(class: `HttpsServer`)_" msgstr "`__get_keepAliveTimeoutBuffer` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1687 +#: src/api/reference.md:1689 msgid "`__get_listening` — instance _(class: `HttpsServer`)_" msgstr "`__get_listening` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1688 +#: src/api/reference.md:1690 msgid "`__get_maxHeadersCount` — instance _(class: `HttpsServer`)_" msgstr "`__get_maxHeadersCount` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1689 +#: src/api/reference.md:1691 msgid "`__get_maxRequestsPerSocket` — instance _(class: `HttpsServer`)_" msgstr "`__get_maxRequestsPerSocket` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1690 +#: src/api/reference.md:1692 msgid "`__get_requestTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__get_requestTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1691 +#: src/api/reference.md:1693 msgid "`__get_timeout` — instance _(class: `HttpsServer`)_" msgstr "`__get_timeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1692 +#: src/api/reference.md:1694 msgid "`__set_headersTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__set_headersTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1693 +#: src/api/reference.md:1695 msgid "`__set_keepAliveTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__set_keepAliveTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1694 +#: src/api/reference.md:1696 msgid "`__set_keepAliveTimeoutBuffer` — instance _(class: `HttpsServer`)_" msgstr "`__set_keepAliveTimeoutBuffer` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1695 +#: src/api/reference.md:1697 msgid "`__set_maxHeadersCount` — instance _(class: `HttpsServer`)_" msgstr "`__set_maxHeadersCount` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1696 +#: src/api/reference.md:1698 msgid "`__set_maxRequestsPerSocket` — instance _(class: `HttpsServer`)_" msgstr "`__set_maxRequestsPerSocket` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1697 +#: src/api/reference.md:1699 msgid "`__set_requestTimeout` — instance _(class: `HttpsServer`)_" msgstr "`__set_requestTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1698 +#: src/api/reference.md:1700 msgid "`__set_timeout` — instance _(class: `HttpsServer`)_" msgstr "`__set_timeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1699 +#: src/api/reference.md:1701 msgid "`addListener` — instance _(class: `HttpsServer`)_" msgstr "`addListener` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1700 +#: src/api/reference.md:1702 msgid "`address` — instance _(class: `HttpsServer`)_" msgstr "`address` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1701 +#: src/api/reference.md:1703 msgid "`close` — instance _(class: `HttpsServer`)_" msgstr "`close` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1702 +#: src/api/reference.md:1704 msgid "`closeAllConnections` — instance _(class: `HttpsServer`)_" msgstr "`closeAllConnections` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1703 +#: src/api/reference.md:1705 msgid "`closeIdleConnections` — instance _(class: `HttpsServer`)_" msgstr "`closeIdleConnections` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1707 +#: src/api/reference.md:1709 msgid "`headersTimeout` — instance _(class: `HttpsServer`)_" msgstr "`headersTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1708 +#: src/api/reference.md:1710 msgid "`keepAliveTimeout` — instance _(class: `HttpsServer`)_" msgstr "`keepAliveTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1709 +#: src/api/reference.md:1711 msgid "`keepAliveTimeoutBuffer` — instance _(class: `HttpsServer`)_" msgstr "`keepAliveTimeoutBuffer` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1710 +#: src/api/reference.md:1712 msgid "`listen` — instance _(class: `HttpsServer`)_" msgstr "`listen` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1711 +#: src/api/reference.md:1713 msgid "`listening` — instance _(class: `HttpsServer`)_" msgstr "`listening` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1712 +#: src/api/reference.md:1714 msgid "`maxHeadersCount` — instance _(class: `HttpsServer`)_" msgstr "`maxHeadersCount` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1713 +#: src/api/reference.md:1715 msgid "`maxRequestsPerSocket` — instance _(class: `HttpsServer`)_" msgstr "`maxRequestsPerSocket` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1714 +#: src/api/reference.md:1716 msgid "`on` — instance _(class: `HttpsServer`)_" msgstr "`on` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1715 +#: src/api/reference.md:1717 msgid "`ref` — instance _(class: `HttpsServer`)_" msgstr "`ref` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1717 +#: src/api/reference.md:1719 msgid "`requestTimeout` — instance _(class: `HttpsServer`)_" msgstr "`requestTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1718 +#: src/api/reference.md:1720 msgid "`setTimeout` — instance _(class: `HttpsServer`)_" msgstr "`setTimeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1719 +#: src/api/reference.md:1721 msgid "`timeout` — instance _(class: `HttpsServer`)_" msgstr "`timeout` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1720 +#: src/api/reference.md:1722 msgid "`unref` — instance _(class: `HttpsServer`)_" msgstr "`unref` — instancia _(clase: `HttpsServer`)_" -#: src/api/reference.md:1726 +#: src/api/reference.md:1728 msgid "`inspector`" msgstr "`inspector`" -#: src/api/reference.md:1730 src/api/reference.md:1761 +#: src/api/reference.md:1732 src/api/reference.md:1763 #: src/api/reference.md:2948 msgid "`Session`" msgstr "`Session`" -#: src/api/reference.md:1734 src/api/reference.md:1765 +#: src/api/reference.md:1736 src/api/reference.md:1767 #: src/api/reference.md:2955 msgid "`Session` — module" msgstr "`Session` — módulo" -#: src/api/reference.md:1736 src/api/reference.md:1766 +#: src/api/reference.md:1738 src/api/reference.md:1768 msgid "`connect` — instance _(class: `Session`)_" msgstr "`connect` — instancia _(clase: `Session`)_" -#: src/api/reference.md:1737 src/api/reference.md:1767 +#: src/api/reference.md:1739 src/api/reference.md:1769 msgid "`connectToMainThread` — instance _(class: `Session`)_" msgstr "`connectToMainThread` — instancia _(clase: `Session`)_" -#: src/api/reference.md:1738 +#: src/api/reference.md:1740 msgid "`debug` — module _(class: `console`)_" msgstr "`debug` — módulo _(clase: `console`)_" -#: src/api/reference.md:1739 src/api/reference.md:1768 +#: src/api/reference.md:1741 src/api/reference.md:1770 msgid "`disconnect` — instance _(class: `Session`)_" msgstr "`disconnect` — instancia _(clase: `Session`)_" -#: src/api/reference.md:1740 +#: src/api/reference.md:1742 msgid "`error` — module _(class: `console`)_" msgstr "`error` — módulo _(clase: `console`)_" -#: src/api/reference.md:1741 +#: src/api/reference.md:1743 msgid "`info` — module _(class: `console`)_" msgstr "`info` — módulo _(clase: `console`)_" -#: src/api/reference.md:1742 +#: src/api/reference.md:1744 msgid "`log` — module _(class: `console`)_" msgstr "`log` — módulo _(clase: `console`)_" -#: src/api/reference.md:1743 src/api/reference.md:1769 +#: src/api/reference.md:1745 src/api/reference.md:1771 msgid "`on` — instance _(class: `Session`)_" msgstr "`on` — instancia _(clase: `Session`)_" -#: src/api/reference.md:1744 src/api/reference.md:1770 +#: src/api/reference.md:1746 src/api/reference.md:1772 msgid "`once` — instance _(class: `Session`)_" msgstr "`once` — instancia _(clase: `Session`)_" -#: src/api/reference.md:1745 +#: src/api/reference.md:1747 msgid "" "`open` — module ⚠ **stub** — accepts port/host but binds no real WebSocket " "inspector endpoint; sessions are in-process fakes (#4916)" @@ -40981,7 +41208,7 @@ msgstr "" "final de inspector real WebSocket; las sesiones son falsas en el proceso " "(#4916)" -#: src/api/reference.md:1746 +#: src/api/reference.md:1748 msgid "" "`post` — instance _(class: `Session`)_ ⚠ **stub** — only Runtime.enable and " "a canned Runtime.evaluate subset respond; every other protocol method throws " @@ -40991,7 +41218,7 @@ msgstr "" "un subconjunto enlatado Runtime.evaluate responden; cualquier otro método de " "protocolo lanza error Inspector -32601 (#4916)" -#: src/api/reference.md:1747 +#: src/api/reference.md:1749 msgid "" "`url` — module ⚠ **stub** — always undefined: Perry never exposes a real " "inspector endpoint (#4916)" @@ -40999,7 +41226,7 @@ msgstr "" "`url` — módulo ­ **talón** — siempre indefinido: Perry nunca expone un punto " "final de inspector real (#4916)" -#: src/api/reference.md:1748 +#: src/api/reference.md:1750 msgid "" "`waitForDebugger` — module ⚠ **stub** — returns immediately after open(); " "there is no debugger to wait for (#4916)" @@ -41007,1161 +41234,1182 @@ msgstr "" "`waitForDebugger` — módulo ­ **talón** — vuelve inmediatamente después de " "open(); no hay depurador que esperar (#4916)" -#: src/api/reference.md:1749 +#: src/api/reference.md:1751 msgid "`warn` — module _(class: `console`)_" msgstr "`warn` — módulo _(clase: `console`)_" -#: src/api/reference.md:1753 +#: src/api/reference.md:1755 msgid "`Network`" msgstr "`Network`" -#: src/api/reference.md:1757 +#: src/api/reference.md:1759 msgid "`inspector/promises`" msgstr "`inspector/promises`" -#: src/api/reference.md:1771 +#: src/api/reference.md:1773 msgid "`post` — instance _(class: `Session`)_" msgstr "`post` — instancia _(clase: `Session`)_" -#: src/api/reference.md:1777 +#: src/api/reference.md:1779 msgid "`lodash`" msgstr "`lodash`" -#: src/api/reference.md:1781 +#: src/api/reference.md:1783 msgid "`camelCase` — module" msgstr "`camelCase` — módulo" -#: src/api/reference.md:1782 +#: src/api/reference.md:1784 msgid "`chunk` — module" msgstr "`chunk` — módulo" -#: src/api/reference.md:1783 src/api/reference.md:1784 +#: src/api/reference.md:1785 src/api/reference.md:1786 msgid "`clamp` — module" msgstr "`clamp` — módulo" -#: src/api/reference.md:1785 +#: src/api/reference.md:1787 msgid "`compact` — module" msgstr "`compact` — módulo" -#: src/api/reference.md:1786 +#: src/api/reference.md:1788 msgid "`drop` — module" msgstr "`drop` — módulo" -#: src/api/reference.md:1787 +#: src/api/reference.md:1789 msgid "`first` — module" msgstr "`first` — módulo" -#: src/api/reference.md:1788 +#: src/api/reference.md:1790 msgid "`flatten` — module" msgstr "`flatten` — módulo" -#: src/api/reference.md:1789 +#: src/api/reference.md:1791 msgid "`head` — module" msgstr "`head` — módulo" -#: src/api/reference.md:1790 +#: src/api/reference.md:1792 msgid "`inRange` — module" msgstr "`inRange` — módulo" -#: src/api/reference.md:1791 +#: src/api/reference.md:1793 msgid "`kebabCase` — module" msgstr "`kebabCase` — módulo" -#: src/api/reference.md:1792 +#: src/api/reference.md:1794 msgid "`last` — module" msgstr "`last` — módulo" -#: src/api/reference.md:1793 +#: src/api/reference.md:1795 msgid "`max` — module" msgstr "`max` — módulo" -#: src/api/reference.md:1794 +#: src/api/reference.md:1796 msgid "`maxBy` — module" msgstr "`maxBy` — módulo" -#: src/api/reference.md:1795 +#: src/api/reference.md:1797 msgid "`mean` — module" msgstr "`mean` — módulo" -#: src/api/reference.md:1796 +#: src/api/reference.md:1798 msgid "`meanBy` — module" msgstr "`meanBy` — módulo" -#: src/api/reference.md:1797 +#: src/api/reference.md:1799 msgid "`min` — module" msgstr "`min` — módulo" -#: src/api/reference.md:1798 +#: src/api/reference.md:1800 msgid "`minBy` — module" msgstr "`minBy` — módulo" -#: src/api/reference.md:1799 +#: src/api/reference.md:1801 msgid "`random` — module" msgstr "`random` — módulo" -#: src/api/reference.md:1800 +#: src/api/reference.md:1802 msgid "`range` — module" msgstr "`range` — módulo" -#: src/api/reference.md:1802 +#: src/api/reference.md:1804 msgid "`size` — module" msgstr "`size` — módulo" -#: src/api/reference.md:1803 +#: src/api/reference.md:1805 msgid "`snakeCase` — module" msgstr "`snakeCase` — módulo" -#: src/api/reference.md:1804 +#: src/api/reference.md:1806 msgid "`sum` — module" msgstr "`sum` — módulo" -#: src/api/reference.md:1805 +#: src/api/reference.md:1807 msgid "`sumBy` — module" msgstr "`sumBy` — módulo" -#: src/api/reference.md:1806 +#: src/api/reference.md:1808 msgid "`tail` — module" msgstr "`tail` — módulo" -#: src/api/reference.md:1807 +#: src/api/reference.md:1809 msgid "`take` — module" msgstr "`take` — módulo" -#: src/api/reference.md:1808 +#: src/api/reference.md:1810 msgid "`times` — module" msgstr "`times` — módulo" -#: src/api/reference.md:1809 +#: src/api/reference.md:1811 msgid "`uniq` — module" msgstr "`uniq` — módulo" -#: src/api/reference.md:1811 +#: src/api/reference.md:1813 msgid "`module`" msgstr "`module`" -#: src/api/reference.md:1815 src/api/reference.md:1846 +#: src/api/reference.md:1817 src/api/reference.md:1848 msgid "`Module`" msgstr "`Module`" -#: src/api/reference.md:1816 +#: src/api/reference.md:1818 msgid "`SourceMap`" msgstr "`SourceMap`" -#: src/api/reference.md:1820 +#: src/api/reference.md:1822 msgid "`Module` — module" msgstr "`Module` — módulo" -#: src/api/reference.md:1821 +#: src/api/reference.md:1823 msgid "`SourceMap` — module" msgstr "`SourceMap` — módulo" -#: src/api/reference.md:1822 +#: src/api/reference.md:1824 msgid "`_findPath` — module" msgstr "`_findPath` — módulo" -#: src/api/reference.md:1823 +#: src/api/reference.md:1825 msgid "`_initPaths` — module" msgstr "`_initPaths` — módulo" -#: src/api/reference.md:1824 +#: src/api/reference.md:1826 msgid "`_load` — module" msgstr "`_load` — módulo" -#: src/api/reference.md:1825 +#: src/api/reference.md:1827 msgid "`_nodeModulePaths` — module" msgstr "`_nodeModulePaths` — módulo" -#: src/api/reference.md:1826 +#: src/api/reference.md:1828 msgid "`_preloadModules` — module" msgstr "`_preloadModules` — módulo" -#: src/api/reference.md:1827 +#: src/api/reference.md:1829 msgid "`_resolveFilename` — module" msgstr "`_resolveFilename` — módulo" -#: src/api/reference.md:1828 +#: src/api/reference.md:1830 msgid "`_resolveLookupPaths` — module" msgstr "`_resolveLookupPaths` — módulo" -#: src/api/reference.md:1829 +#: src/api/reference.md:1831 msgid "`createRequire` — module" msgstr "`createRequire` — módulo" -#: src/api/reference.md:1830 +#: src/api/reference.md:1832 msgid "`enableCompileCache` — module" msgstr "`enableCompileCache` — módulo" -#: src/api/reference.md:1831 +#: src/api/reference.md:1833 msgid "`findPackageJSON` — module" msgstr "`findPackageJSON` — módulo" -#: src/api/reference.md:1832 +#: src/api/reference.md:1834 msgid "`findSourceMap` — module" msgstr "`findSourceMap` — módulo" -#: src/api/reference.md:1833 +#: src/api/reference.md:1835 msgid "`flushCompileCache` — module" msgstr "`flushCompileCache` — módulo" -#: src/api/reference.md:1834 +#: src/api/reference.md:1836 msgid "`getCompileCacheDir` — module" msgstr "`getCompileCacheDir` — módulo" -#: src/api/reference.md:1835 +#: src/api/reference.md:1837 msgid "`getSourceMapsSupport` — module" msgstr "`getSourceMapsSupport` — módulo" -#: src/api/reference.md:1836 +#: src/api/reference.md:1838 msgid "`isBuiltin` — module" msgstr "`isBuiltin` — módulo" -#: src/api/reference.md:1837 +#: src/api/reference.md:1839 msgid "`register` — module" msgstr "`register` — módulo" -#: src/api/reference.md:1838 +#: src/api/reference.md:1840 msgid "`registerHooks` — module" msgstr "`registerHooks` — módulo" -#: src/api/reference.md:1839 +#: src/api/reference.md:1841 msgid "`runMain` — module" msgstr "`runMain` — módulo" -#: src/api/reference.md:1840 +#: src/api/reference.md:1842 msgid "`setSourceMapsSupport` — module" msgstr "`setSourceMapsSupport` — módulo" -#: src/api/reference.md:1841 +#: src/api/reference.md:1843 msgid "`stripTypeScriptTypes` — module" msgstr "`stripTypeScriptTypes` — módulo" -#: src/api/reference.md:1842 +#: src/api/reference.md:1844 msgid "`syncBuiltinESMExports` — module" msgstr "`syncBuiltinESMExports` — módulo" -#: src/api/reference.md:1847 +#: src/api/reference.md:1849 msgid "`_cache`" msgstr "`_cache`" -#: src/api/reference.md:1848 +#: src/api/reference.md:1850 msgid "`_extensions`" msgstr "`_extensions`" -#: src/api/reference.md:1849 +#: src/api/reference.md:1851 msgid "`_pathCache`" msgstr "`_pathCache`" -#: src/api/reference.md:1850 src/api/reference.md:2897 +#: src/api/reference.md:1852 src/api/reference.md:2897 msgid "`builtinModules`" msgstr "`builtinModules`" -#: src/api/reference.md:1853 +#: src/api/reference.md:1855 msgid "`globalPaths`" msgstr "`globalPaths`" -#: src/api/reference.md:1860 -msgid "`collection` — instance" -msgstr "`collection` — instancia" - -#: src/api/reference.md:1862 -msgid "`connect` — instance" -msgstr "`connect` — instancia" - -#: src/api/reference.md:1863 -msgid "`countDocuments` — instance" -msgstr "`countDocuments` — instancia" - -#: src/api/reference.md:1864 -msgid "`db` — instance" -msgstr "`db` — instancia" - -#: src/api/reference.md:1865 -msgid "`deleteMany` — instance" -msgstr "`deleteMany` — instancia" - -#: src/api/reference.md:1866 -msgid "`deleteOne` — instance" -msgstr "`deleteOne` — instancia" - -#: src/api/reference.md:1868 -msgid "`findOne` — instance" -msgstr "`findOne` — instancia" - -#: src/api/reference.md:1869 -msgid "`insertMany` — instance" -msgstr "`insertMany` — instancia" - -#: src/api/reference.md:1870 -msgid "`insertOne` — instance" -msgstr "`insertOne` — instancia" - -#: src/api/reference.md:1871 -msgid "`updateMany` — instance" -msgstr "`updateMany` — instancia" - -#: src/api/reference.md:1872 -msgid "`updateOne` — instance" -msgstr "`updateOne` — instancia" - -#: src/api/reference.md:1878 +#: src/api/reference.md:1861 msgid "`BlockList`" msgstr "`BlockList`" -#: src/api/reference.md:1881 +#: src/api/reference.md:1864 msgid "`SocketAddress`" msgstr "`SocketAddress`" -#: src/api/reference.md:1882 src/api/reference.md:3011 +#: src/api/reference.md:1865 src/api/reference.md:3011 msgid "`Stream`" msgstr "`Stream`" -#: src/api/reference.md:1886 +#: src/api/reference.md:1869 msgid "`BlockList` — module" msgstr "`BlockList` — módulo" -#: src/api/reference.md:1889 +#: src/api/reference.md:1872 msgid "`SocketAddress` — module" msgstr "`SocketAddress` — módulo" -#: src/api/reference.md:1890 +#: src/api/reference.md:1873 msgid "`Stream` — module" msgstr "`Stream` — módulo" -#: src/api/reference.md:1891 +#: src/api/reference.md:1874 msgid "`__set_dropMaxConnection` — instance _(class: `Server`)_" msgstr "`__set_dropMaxConnection` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1892 +#: src/api/reference.md:1875 msgid "`__set_maxConnections` — instance _(class: `Server`)_" msgstr "`__set_maxConnections` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1893 +#: src/api/reference.md:1876 msgid "`_createServerHandle` — module" msgstr "`_createServerHandle` — módulo" -#: src/api/reference.md:1894 +#: src/api/reference.md:1877 msgid "`_normalizeArgs` — module" msgstr "`_normalizeArgs` — módulo" -#: src/api/reference.md:1895 +#: src/api/reference.md:1878 #, fuzzy msgid "`_readableState` — instance" msgstr "`readyState` — instancia" -#: src/api/reference.md:1896 +#: src/api/reference.md:1879 #, fuzzy msgid "`_writableState` — instance" msgstr "`writable` — instancia" -#: src/api/reference.md:1897 +#: src/api/reference.md:1880 msgid "`addAddress` — instance _(class: `BlockList`)_" msgstr "`addAddress` — instancia _(clase: `BlockList`)_" -#: src/api/reference.md:1899 src/api/reference.md:3301 +#: src/api/reference.md:1882 src/api/reference.md:3301 msgid "`addListener` — instance _(class: `Server`)_" msgstr "`addListener` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1900 +#: src/api/reference.md:1883 msgid "`addRange` — instance _(class: `BlockList`)_" msgstr "`addRange` — instancia _(clase: `BlockList`)_" -#: src/api/reference.md:1901 +#: src/api/reference.md:1884 msgid "`addSubnet` — instance _(class: `BlockList`)_" msgstr "`addSubnet` — instancia _(clase: `BlockList`)_" -#: src/api/reference.md:1903 +#: src/api/reference.md:1886 msgid "`address` — instance _(class: `SocketAddress`)_" msgstr "`address` — instancia _(clase: `SocketAddress`)_" -#: src/api/reference.md:1904 src/api/reference.md:3302 +#: src/api/reference.md:1887 src/api/reference.md:3302 msgid "`address` — instance _(class: `Server`)_" msgstr "`address` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1905 +#: src/api/reference.md:1888 msgid "`autoSelectFamilyAttemptedAddresses` — instance _(class: `Socket`)_" msgstr "`autoSelectFamilyAttemptedAddresses` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1906 +#: src/api/reference.md:1889 msgid "`bufferSize` — instance _(class: `Socket`)_" msgstr "`bufferSize` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1907 +#: src/api/reference.md:1890 msgid "`bytesRead` — instance _(class: `Socket`)_" msgstr "`bytesRead` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1908 +#: src/api/reference.md:1891 msgid "`bytesWritten` — instance _(class: `Socket`)_" msgstr "`bytesWritten` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1909 +#: src/api/reference.md:1892 msgid "`check` — instance _(class: `BlockList`)_" msgstr "`check` — instancia _(clase: `BlockList`)_" -#: src/api/reference.md:1910 src/api/reference.md:3304 +#: src/api/reference.md:1893 src/api/reference.md:3304 msgid "`close` — instance _(class: `Server`)_" msgstr "`close` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1913 +#: src/api/reference.md:1896 msgid "`connecting` — instance _(class: `Socket`)_" msgstr "`connecting` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1914 +#: src/api/reference.md:1897 msgid "`cork` — instance _(class: `Socket`)_" msgstr "`cork` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1915 +#: src/api/reference.md:1898 msgid "`createConnection` — module" msgstr "`createConnection` — módulo" -#: src/api/reference.md:1917 +#: src/api/reference.md:1900 msgid "`destroy` — instance _(class: `Socket`)_" msgstr "`destroy` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1918 +#: src/api/reference.md:1901 msgid "`destroyed` — instance _(class: `Socket`)_" msgstr "`destroyed` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1919 +#: src/api/reference.md:1902 msgid "`dropMaxConnection` — instance _(class: `Server`)_" msgstr "`dropMaxConnection` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1920 +#: src/api/reference.md:1903 msgid "`end` — instance _(class: `Socket`)_" msgstr "`end` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1922 src/api/reference.md:3309 +#: src/api/reference.md:1905 src/api/reference.md:3309 msgid "`eventNames` — instance _(class: `Server`)_" msgstr "`eventNames` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1923 +#: src/api/reference.md:1906 msgid "`exportKeyingMaterial` — instance _(class: `Socket`)_" msgstr "`exportKeyingMaterial` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1924 +#: src/api/reference.md:1907 msgid "`family` — instance _(class: `SocketAddress`)_" msgstr "`family` — instancia _(clase: `SocketAddress`)_" -#: src/api/reference.md:1925 +#: src/api/reference.md:1908 msgid "`flowlabel` — instance _(class: `SocketAddress`)_" msgstr "`flowlabel` — instancia _(clase: `SocketAddress`)_" -#: src/api/reference.md:1926 +#: src/api/reference.md:1909 msgid "`fromJSON` — instance _(class: `BlockList`)_" msgstr "`fromJSON` — instancia _(clase: `BlockList`)_" -#: src/api/reference.md:1927 +#: src/api/reference.md:1910 msgid "`getCertificate` — instance _(class: `Socket`)_" msgstr "`getCertificate` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1928 +#: src/api/reference.md:1911 msgid "`getCipher` — instance _(class: `Socket`)_" msgstr "`getCipher` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1929 +#: src/api/reference.md:1912 msgid "`getConnections` — instance _(class: `Server`)_" msgstr "`getConnections` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1930 +#: src/api/reference.md:1913 msgid "`getDefaultAutoSelectFamily` — module" msgstr "`getDefaultAutoSelectFamily` — módulo" -#: src/api/reference.md:1931 +#: src/api/reference.md:1914 msgid "`getDefaultAutoSelectFamilyAttemptTimeout` — module" msgstr "`getDefaultAutoSelectFamilyAttemptTimeout` — módulo" -#: src/api/reference.md:1932 +#: src/api/reference.md:1915 msgid "`getEphemeralKeyInfo` — instance _(class: `Socket`)_" msgstr "`getEphemeralKeyInfo` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1933 +#: src/api/reference.md:1916 msgid "`getFinished` — instance _(class: `Socket`)_" msgstr "`getFinished` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1934 +#: src/api/reference.md:1917 msgid "`getPeerCertificate` — instance _(class: `Socket`)_" msgstr "`getPeerCertificate` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1935 +#: src/api/reference.md:1918 msgid "`getPeerFinished` — instance _(class: `Socket`)_" msgstr "`getPeerFinished` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1936 +#: src/api/reference.md:1919 msgid "`getPeerX509Certificate` — instance _(class: `Socket`)_" msgstr "`getPeerX509Certificate` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1937 +#: src/api/reference.md:1920 msgid "`getProtocol` — instance _(class: `Socket`)_" msgstr "`getProtocol` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1938 +#: src/api/reference.md:1921 msgid "`getSession` — instance _(class: `Socket`)_" msgstr "`getSession` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1939 +#: src/api/reference.md:1922 msgid "`getSharedSigalgs` — instance _(class: `Socket`)_" msgstr "`getSharedSigalgs` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1940 +#: src/api/reference.md:1923 msgid "`getTypeOfService` — instance _(class: `Socket`)_" msgstr "`getTypeOfService` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1941 +#: src/api/reference.md:1924 msgid "`getX509Certificate` — instance _(class: `Socket`)_" msgstr "`getX509Certificate` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1942 +#: src/api/reference.md:1925 msgid "`isBlockList` — module _(class: `BlockList`)_" msgstr "`isBlockList` — módulo _(clase: `BlockList`)_" -#: src/api/reference.md:1943 +#: src/api/reference.md:1926 msgid "`isIP` — module" msgstr "`isIP` — módulo" -#: src/api/reference.md:1944 +#: src/api/reference.md:1927 msgid "`isIPv4` — module" msgstr "`isIPv4` — módulo" -#: src/api/reference.md:1945 +#: src/api/reference.md:1928 msgid "`isIPv6` — module" msgstr "`isIPv6` — módulo" -#: src/api/reference.md:1946 +#: src/api/reference.md:1929 msgid "`isSessionReused` — instance _(class: `Socket`)_" msgstr "`isSessionReused` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1947 src/api/reference.md:3314 +#: src/api/reference.md:1930 +#, fuzzy +msgid "`isSocketAddress` — module _(class: `SocketAddress`)_" +msgstr "`parse` — módulo _(clase: `SocketAddress`)_" + +#: src/api/reference.md:1931 src/api/reference.md:3314 msgid "`listen` — instance _(class: `Server`)_" msgstr "`listen` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1949 src/api/reference.md:3315 +#: src/api/reference.md:1933 src/api/reference.md:3315 msgid "`listenerCount` — instance _(class: `Server`)_" msgstr "`listenerCount` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1950 +#: src/api/reference.md:1934 msgid "`listeners` — instance _(class: `Socket`)_" msgstr "`listeners` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1951 +#: src/api/reference.md:1935 msgid "`listeners` — instance _(class: `Server`)_" msgstr "`listeners` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1952 +#: src/api/reference.md:1936 msgid "`listening` — instance _(class: `Server`)_" msgstr "`listening` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1953 +#: src/api/reference.md:1937 msgid "`localAddress` — instance _(class: `Socket`)_" msgstr "`localAddress` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1954 +#: src/api/reference.md:1938 msgid "`localFamily` — instance _(class: `Socket`)_" msgstr "`localFamily` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1955 +#: src/api/reference.md:1939 msgid "`localPort` — instance _(class: `Socket`)_" msgstr "`localPort` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1956 +#: src/api/reference.md:1940 msgid "`maxConnections` — instance _(class: `Server`)_" msgstr "`maxConnections` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1958 src/api/reference.md:3316 +#: src/api/reference.md:1942 src/api/reference.md:3316 msgid "`off` — instance _(class: `Server`)_" msgstr "`off` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1961 src/api/reference.md:3318 +#: src/api/reference.md:1945 src/api/reference.md:3318 msgid "`once` — instance _(class: `Server`)_" msgstr "`once` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1962 +#: src/api/reference.md:1946 msgid "`parse` — module _(class: `SocketAddress`)_" msgstr "`parse` — módulo _(clase: `SocketAddress`)_" -#: src/api/reference.md:1963 +#: src/api/reference.md:1947 msgid "`pause` — instance _(class: `Socket`)_" msgstr "`pause` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1964 +#: src/api/reference.md:1948 msgid "`pending` — instance _(class: `Socket`)_" msgstr "`pending` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1965 +#: src/api/reference.md:1949 #, fuzzy msgid "`pipe` — instance _(class: `Socket`)_" msgstr "`pause` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1966 +#: src/api/reference.md:1950 msgid "`port` — instance _(class: `SocketAddress`)_" msgstr "`port` — instancia _(clase: `SocketAddress`)_" -#: src/api/reference.md:1967 +#: src/api/reference.md:1951 #, fuzzy msgid "`prependListener` — instance _(class: `Socket`)_" msgstr "`removeListener` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1968 +#: src/api/reference.md:1952 #, fuzzy msgid "`prependOnceListener` — instance _(class: `Socket`)_" msgstr "`removeListener` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1969 +#: src/api/reference.md:1953 msgid "`rawListeners` — instance _(class: `Socket`)_" msgstr "`rawListeners` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1970 +#: src/api/reference.md:1954 msgid "`rawListeners` — instance _(class: `Server`)_" msgstr "`rawListeners` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1971 +#: src/api/reference.md:1955 #, fuzzy msgid "`read` — instance _(class: `Socket`)_" msgstr "`end` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1972 src/api/reference.md:3056 +#: src/api/reference.md:1956 src/api/reference.md:3056 msgid "`readable` — instance" msgstr "`readable` — instancia" -#: src/api/reference.md:1973 src/api/reference.md:3060 +#: src/api/reference.md:1957 src/api/reference.md:3060 msgid "`readableEnded` — instance" msgstr "`readableEnded` — instancia" -#: src/api/reference.md:1974 +#: src/api/reference.md:1958 msgid "`readyState` — instance _(class: `Socket`)_" msgstr "`readyState` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1977 +#: src/api/reference.md:1961 msgid "`remoteFamily` — instance _(class: `Socket`)_" msgstr "`remoteFamily` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1978 +#: src/api/reference.md:1962 msgid "`remotePort` — instance _(class: `Socket`)_" msgstr "`remotePort` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1979 +#: src/api/reference.md:1963 msgid "`removeAllListeners` — instance _(class: `Socket`)_" msgstr "`removeAllListeners` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1980 src/api/reference.md:3319 +#: src/api/reference.md:1964 src/api/reference.md:3319 msgid "`removeAllListeners` — instance _(class: `Server`)_" msgstr "`removeAllListeners` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1982 src/api/reference.md:3320 +#: src/api/reference.md:1966 src/api/reference.md:3320 msgid "`removeListener` — instance _(class: `Server`)_" msgstr "`removeListener` — instancia _(clase: `Server`)_" -#: src/api/reference.md:1983 +#: src/api/reference.md:1967 msgid "`resetAndDestroy` — instance _(class: `Socket`)_" msgstr "`resetAndDestroy` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1984 +#: src/api/reference.md:1968 msgid "`resume` — instance _(class: `Socket`)_" msgstr "`resume` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1985 +#: src/api/reference.md:1969 msgid "`rules` — instance _(class: `BlockList`)_" msgstr "`rules` — instancia _(clase: `BlockList`)_" -#: src/api/reference.md:1986 +#: src/api/reference.md:1970 msgid "`setDefaultAutoSelectFamily` — module" msgstr "`setDefaultAutoSelectFamily` — módulo" -#: src/api/reference.md:1987 +#: src/api/reference.md:1971 msgid "`setDefaultAutoSelectFamilyAttemptTimeout` — module" msgstr "`setDefaultAutoSelectFamilyAttemptTimeout` — módulo" -#: src/api/reference.md:1988 +#: src/api/reference.md:1972 msgid "`setDefaultEncoding` — instance _(class: `Socket`)_" msgstr "`setDefaultEncoding` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1989 +#: src/api/reference.md:1973 msgid "`setEncoding` — instance _(class: `Socket`)_" msgstr "`setEncoding` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1990 +#: src/api/reference.md:1974 msgid "`setKeepAlive` — instance _(class: `Socket`)_" msgstr "`setKeepAlive` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1991 +#: src/api/reference.md:1975 msgid "`setKeyCert` — instance _(class: `Socket`)_" msgstr "`setKeyCert` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1992 +#: src/api/reference.md:1976 msgid "`setMaxSendFragment` — instance _(class: `Socket`)_" msgstr "`setMaxSendFragment` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1993 +#: src/api/reference.md:1977 msgid "`setNoDelay` — instance _(class: `Socket`)_" msgstr "`setNoDelay` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1994 +#: src/api/reference.md:1978 msgid "`setTimeout` — instance _(class: `Socket`)_" msgstr "`setTimeout` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1995 +#: src/api/reference.md:1979 msgid "`setTypeOfService` — instance _(class: `Socket`)_" msgstr "`setTypeOfService` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1996 +#: src/api/reference.md:1980 msgid "`timeout` — instance _(class: `Socket`)_" msgstr "`timeout` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1997 +#: src/api/reference.md:1981 msgid "`toJSON` — instance _(class: `BlockList`)_" msgstr "`toJSON` — instancia _(clase: `BlockList`)_" -#: src/api/reference.md:1998 +#: src/api/reference.md:1982 msgid "`uncork` — instance _(class: `Socket`)_" msgstr "`uncork` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:1999 +#: src/api/reference.md:1983 #, fuzzy msgid "`unpipe` — instance _(class: `Socket`)_" msgstr "`unref` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:2001 +#: src/api/reference.md:1985 msgid "`upgradeToTLS` — instance _(class: `Socket`)_" msgstr "`upgradeToTLS` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:2002 src/api/reference.md:3074 +#: src/api/reference.md:1986 src/api/reference.md:3074 msgid "`writable` — instance" msgstr "`writable` — instancia" -#: src/api/reference.md:2003 src/api/reference.md:3076 +#: src/api/reference.md:1987 +#, fuzzy +msgid "`writableCorked` — instance _(class: `Socket`)_" +msgstr "`write` — instancia _(clase: `Socket`)_" + +#: src/api/reference.md:1988 src/api/reference.md:3076 msgid "`writableEnded` — instance" msgstr "`writableEnded` — instancia" -#: src/api/reference.md:2004 +#: src/api/reference.md:1989 msgid "`write` — instance _(class: `Socket`)_" msgstr "`write` — instancia _(clase: `Socket`)_" -#: src/api/reference.md:2006 +#: src/api/reference.md:1991 msgid "`node-fetch`" msgstr "`node-fetch`" -#: src/api/reference.md:2020 +#: src/api/reference.md:2005 msgid "`node-pty`" msgstr "`node-pty`" -#: src/api/reference.md:2034 +#: src/api/reference.md:2019 msgid "`createTransport` — module" msgstr "`createTransport` — módulo" -#: src/api/reference.md:2035 +#: src/api/reference.md:2020 msgid "`sendMail` — instance" msgstr "`sendMail` — instancia" -#: src/api/reference.md:2036 +#: src/api/reference.md:2021 msgid "`verify` — instance" msgstr "`verify` — instancia" -#: src/api/reference.md:2038 +#: src/api/reference.md:2023 msgid "`os`" msgstr "`os`" -#: src/api/reference.md:2042 +#: src/api/reference.md:2027 msgid "`arch` — module" msgstr "`arch` — módulo" -#: src/api/reference.md:2043 +#: src/api/reference.md:2028 msgid "`availableParallelism` — module" msgstr "`availableParallelism` — módulo" -#: src/api/reference.md:2044 +#: src/api/reference.md:2029 msgid "`cpus` — module" msgstr "`cpus` — módulo" -#: src/api/reference.md:2045 +#: src/api/reference.md:2030 msgid "`endianness` — module" msgstr "`endianness` — módulo" -#: src/api/reference.md:2046 +#: src/api/reference.md:2031 msgid "`freemem` — module" msgstr "`freemem` — módulo" -#: src/api/reference.md:2047 +#: src/api/reference.md:2032 msgid "`getPriority` — module" msgstr "`getPriority` — módulo" -#: src/api/reference.md:2048 +#: src/api/reference.md:2033 msgid "`homedir` — module" msgstr "`homedir` — módulo" -#: src/api/reference.md:2049 +#: src/api/reference.md:2034 msgid "`hostname` — module" msgstr "`hostname` — módulo" -#: src/api/reference.md:2050 +#: src/api/reference.md:2035 msgid "`loadavg` — module" msgstr "`loadavg` — módulo" -#: src/api/reference.md:2051 +#: src/api/reference.md:2036 msgid "`machine` — module" msgstr "`machine` — módulo" -#: src/api/reference.md:2052 +#: src/api/reference.md:2037 msgid "`networkInterfaces` — module" msgstr "`networkInterfaces` — módulo" -#: src/api/reference.md:2053 +#: src/api/reference.md:2038 msgid "`platform` — module" msgstr "`platform` — módulo" -#: src/api/reference.md:2054 +#: src/api/reference.md:2039 msgid "`release` — module" msgstr "`release` — módulo" -#: src/api/reference.md:2055 +#: src/api/reference.md:2040 msgid "`setPriority` — module" msgstr "`setPriority` — módulo" -#: src/api/reference.md:2056 +#: src/api/reference.md:2041 msgid "`tmpdir` — module" msgstr "`tmpdir` — módulo" -#: src/api/reference.md:2057 +#: src/api/reference.md:2042 msgid "`totalmem` — module" msgstr "`totalmem` — módulo" -#: src/api/reference.md:2058 +#: src/api/reference.md:2043 msgid "`type` — module" msgstr "`type` — módulo" -#: src/api/reference.md:2059 src/api/reference.md:2767 +#: src/api/reference.md:2044 src/api/reference.md:2767 msgid "`uptime` — module" msgstr "`uptime` — módulo" -#: src/api/reference.md:2060 +#: src/api/reference.md:2045 msgid "`userInfo` — module" msgstr "`userInfo` — módulo" -#: src/api/reference.md:2061 +#: src/api/reference.md:2046 msgid "`version` — module" msgstr "`version` — módulo" -#: src/api/reference.md:2065 +#: src/api/reference.md:2050 msgid "`EOL`" msgstr "`EOL`" -#: src/api/reference.md:2068 +#: src/api/reference.md:2053 msgid "`devNull`" msgstr "`devNull`" -#: src/api/reference.md:2070 +#: src/api/reference.md:2055 msgid "`path`" msgstr "`path`" -#: src/api/reference.md:2074 src/api/reference.md:2100 -#: src/api/reference.md:2126 +#: src/api/reference.md:2059 src/api/reference.md:2085 +#: src/api/reference.md:2111 msgid "`_makeLong` — module" msgstr "`_makeLong` — módulo" -#: src/api/reference.md:2075 src/api/reference.md:2101 -#: src/api/reference.md:2127 +#: src/api/reference.md:2060 src/api/reference.md:2086 +#: src/api/reference.md:2112 msgid "`basename` — module" msgstr "`basename` — módulo" -#: src/api/reference.md:2076 src/api/reference.md:2102 -#: src/api/reference.md:2128 +#: src/api/reference.md:2061 src/api/reference.md:2087 +#: src/api/reference.md:2113 msgid "`dirname` — module" msgstr "`dirname` — módulo" -#: src/api/reference.md:2077 src/api/reference.md:2103 -#: src/api/reference.md:2129 +#: src/api/reference.md:2062 src/api/reference.md:2088 +#: src/api/reference.md:2114 msgid "`extname` — module" msgstr "`extname` — módulo" -#: src/api/reference.md:2078 src/api/reference.md:2104 -#: src/api/reference.md:2130 src/api/reference.md:3186 +#: src/api/reference.md:2063 src/api/reference.md:2089 +#: src/api/reference.md:2115 src/api/reference.md:3186 #: src/api/reference.md:3413 src/api/reference.md:3448 msgid "`format` — module" msgstr "`format` — módulo" -#: src/api/reference.md:2079 src/api/reference.md:2105 -#: src/api/reference.md:2131 +#: src/api/reference.md:2064 src/api/reference.md:2090 +#: src/api/reference.md:2116 msgid "`isAbsolute` — module" msgstr "`isAbsolute` — módulo" -#: src/api/reference.md:2080 src/api/reference.md:2106 -#: src/api/reference.md:2132 +#: src/api/reference.md:2065 src/api/reference.md:2091 +#: src/api/reference.md:2117 msgid "`join` — module" msgstr "`join` — módulo" -#: src/api/reference.md:2081 src/api/reference.md:2107 -#: src/api/reference.md:2133 +#: src/api/reference.md:2066 src/api/reference.md:2092 +#: src/api/reference.md:2118 msgid "`matchesGlob` — module" msgstr "`matchesGlob` — módulo" -#: src/api/reference.md:2082 src/api/reference.md:2108 -#: src/api/reference.md:2134 +#: src/api/reference.md:2067 src/api/reference.md:2093 +#: src/api/reference.md:2119 msgid "`normalize` — module" msgstr "`normalize` — módulo" -#: src/api/reference.md:2083 src/api/reference.md:2109 -#: src/api/reference.md:2135 src/api/reference.md:2825 +#: src/api/reference.md:2068 src/api/reference.md:2094 +#: src/api/reference.md:2120 src/api/reference.md:2825 #: src/api/reference.md:3414 msgid "`parse` — module" msgstr "`parse` — módulo" -#: src/api/reference.md:2084 src/api/reference.md:2110 -#: src/api/reference.md:2136 +#: src/api/reference.md:2069 src/api/reference.md:2095 +#: src/api/reference.md:2121 msgid "`relative` — module" msgstr "`relative` — módulo" -#: src/api/reference.md:2086 src/api/reference.md:2112 -#: src/api/reference.md:2138 +#: src/api/reference.md:2071 src/api/reference.md:2097 +#: src/api/reference.md:2123 msgid "`toNamespacedPath` — module" msgstr "`toNamespacedPath` — módulo" -#: src/api/reference.md:2091 src/api/reference.md:2117 -#: src/api/reference.md:2143 +#: src/api/reference.md:2076 src/api/reference.md:2102 +#: src/api/reference.md:2128 msgid "`delimiter`" msgstr "`delimiter`" -#: src/api/reference.md:2092 src/api/reference.md:2118 -#: src/api/reference.md:2144 +#: src/api/reference.md:2077 src/api/reference.md:2103 +#: src/api/reference.md:2129 msgid "`posix`" msgstr "`posix`" -#: src/api/reference.md:2093 src/api/reference.md:2119 -#: src/api/reference.md:2145 +#: src/api/reference.md:2078 src/api/reference.md:2104 +#: src/api/reference.md:2130 msgid "`sep`" msgstr "`sep`" -#: src/api/reference.md:2094 src/api/reference.md:2120 -#: src/api/reference.md:2146 +#: src/api/reference.md:2079 src/api/reference.md:2105 +#: src/api/reference.md:2131 msgid "`win32`" msgstr "`win32`" -#: src/api/reference.md:2096 +#: src/api/reference.md:2081 msgid "`path/posix`" msgstr "`path/posix`" -#: src/api/reference.md:2122 +#: src/api/reference.md:2107 msgid "`path/win32`" msgstr "`path/win32`" -#: src/api/reference.md:2148 +#: src/api/reference.md:2133 msgid "`perf_hooks`" msgstr "`perf_hooks`" -#: src/api/reference.md:2152 +#: src/api/reference.md:2137 msgid "`Performance`" msgstr "`Performance`" -#: src/api/reference.md:2153 +#: src/api/reference.md:2138 msgid "`PerformanceEntry`" msgstr "`PerformanceEntry`" -#: src/api/reference.md:2154 +#: src/api/reference.md:2139 msgid "`PerformanceMark`" msgstr "`PerformanceMark`" -#: src/api/reference.md:2155 +#: src/api/reference.md:2140 msgid "`PerformanceMeasure`" msgstr "`PerformanceMeasure`" -#: src/api/reference.md:2156 +#: src/api/reference.md:2141 msgid "`PerformanceObserver`" msgstr "`PerformanceObserver`" -#: src/api/reference.md:2157 +#: src/api/reference.md:2142 msgid "`PerformanceObserverEntryList`" msgstr "`PerformanceObserverEntryList`" -#: src/api/reference.md:2158 +#: src/api/reference.md:2143 msgid "`PerformanceResourceTiming`" msgstr "`PerformanceResourceTiming`" -#: src/api/reference.md:2162 +#: src/api/reference.md:2147 msgid "`createHistogram` — module" msgstr "`createHistogram` — módulo" -#: src/api/reference.md:2163 +#: src/api/reference.md:2148 msgid "`disconnect` — instance _(class: `PerformanceObserver`)_" msgstr "`disconnect` — instancia _(clase: `PerformanceObserver`)_" -#: src/api/reference.md:2164 +#: src/api/reference.md:2149 msgid "`eventLoopUtilization` — module" msgstr "`eventLoopUtilization` — módulo" -#: src/api/reference.md:2165 +#: src/api/reference.md:2150 msgid "`monitorEventLoopDelay` — module" msgstr "`monitorEventLoopDelay` — módulo" -#: src/api/reference.md:2166 +#: src/api/reference.md:2151 msgid "`observe` — instance _(class: `PerformanceObserver`)_" msgstr "`observe` — instancia _(clase: `PerformanceObserver`)_" -#: src/api/reference.md:2167 +#: src/api/reference.md:2152 msgid "`takeRecords` — instance _(class: `PerformanceObserver`)_" msgstr "`takeRecords` — instancia _(clase: `PerformanceObserver`)_" -#: src/api/reference.md:2168 +#: src/api/reference.md:2153 msgid "`timerify` — module" msgstr "`timerify` — módulo" -#: src/api/reference.md:2174 +#: src/api/reference.md:2159 msgid "`performance`" msgstr "`performance`" -#: src/api/reference.md:2176 src/contributing/architecture.md:26 +#: src/api/reference.md:2161 src/contributing/architecture.md:26 msgid "`perry`" msgstr "`perry`" -#: src/api/reference.md:2180 +#: src/api/reference.md:2165 msgid "`embeddedFiles` — module" msgstr "`embeddedFiles` — módulo" -#: src/api/reference.md:2181 +#: src/api/reference.md:2166 msgid "`readEmbedded` — module" msgstr "`readEmbedded` — módulo" -#: src/api/reference.md:2191 +#: src/api/reference.md:2176 msgid "`js_ads_banner_create` — module" msgstr "`js_ads_banner_create` — módulo" -#: src/api/reference.md:2192 +#: src/api/reference.md:2177 msgid "`js_ads_banner_destroy` — module" msgstr "`js_ads_banner_destroy` — módulo" -#: src/api/reference.md:2193 +#: src/api/reference.md:2178 msgid "`js_ads_interstitial_load` — module" msgstr "`js_ads_interstitial_load` — módulo" -#: src/api/reference.md:2194 +#: src/api/reference.md:2179 msgid "`js_ads_interstitial_show` — module" msgstr "`js_ads_interstitial_show` — módulo" -#: src/api/reference.md:2195 +#: src/api/reference.md:2180 msgid "`js_ads_request_consent` — module" msgstr "`js_ads_request_consent` — módulo" -#: src/api/reference.md:2196 +#: src/api/reference.md:2181 msgid "`js_ads_rewarded_load` — module" msgstr "`js_ads_rewarded_load` — módulo" -#: src/api/reference.md:2197 +#: src/api/reference.md:2182 msgid "`js_ads_rewarded_show` — module" msgstr "`js_ads_rewarded_show` — módulo" -#: src/api/reference.md:2199 +#: src/api/reference.md:2184 msgid "`perry/audio`" msgstr "`perry/audio`" -#: src/api/reference.md:2203 +#: src/api/reference.md:2188 msgid "`createBus` — module" msgstr "`createBus` — módulo" -#: src/api/reference.md:2204 +#: src/api/reference.md:2189 msgid "`crossfade` — module" msgstr "`crossfade` — módulo" -#: src/api/reference.md:2205 +#: src/api/reference.md:2190 msgid "`destroyBus` — module" msgstr "`destroyBus` — módulo" -#: src/api/reference.md:2206 +#: src/api/reference.md:2191 msgid "`fadeIn` — module" msgstr "`fadeIn` — módulo" -#: src/api/reference.md:2207 +#: src/api/reference.md:2192 msgid "`fadeOut` — module" msgstr "`fadeOut` — módulo" -#: src/api/reference.md:2208 src/api/reference.md:2332 +#: src/api/reference.md:2193 src/api/reference.md:2332 msgid "`getDuration` — module" msgstr "`getDuration` — módulo" -#: src/api/reference.md:2209 +#: src/api/reference.md:2194 msgid "`getPosition` — module" msgstr "`getPosition` — módulo" -#: src/api/reference.md:2210 src/api/reference.md:2334 +#: src/api/reference.md:2195 src/api/reference.md:2334 msgid "`isPlaying` — module" msgstr "`isPlaying` — módulo" -#: src/api/reference.md:2211 +#: src/api/reference.md:2196 msgid "`loadSound` — module" msgstr "`loadSound` — módulo" -#: src/api/reference.md:2212 +#: src/api/reference.md:2197 msgid "`muteBus` — module" msgstr "`muteBus` — módulo" -#: src/api/reference.md:2213 +#: src/api/reference.md:2198 msgid "`onEnded` — module" msgstr "`onEnded` — módulo" -#: src/api/reference.md:2214 +#: src/api/reference.md:2199 msgid "`onLoaded` — module" msgstr "`onLoaded` — módulo" -#: src/api/reference.md:2215 src/api/reference.md:2337 +#: src/api/reference.md:2200 src/api/reference.md:2337 msgid "`pause` — module" msgstr "`pause` — módulo" -#: src/api/reference.md:2216 src/api/reference.md:2338 +#: src/api/reference.md:2201 src/api/reference.md:2338 msgid "`play` — module" msgstr "`play` — módulo" -#: src/api/reference.md:2217 +#: src/api/reference.md:2202 msgid "`resume` — module" msgstr "`resume` — módulo" -#: src/api/reference.md:2218 +#: src/api/reference.md:2203 msgid "`resumeAll` — module" msgstr "`resumeAll` — módulo" -#: src/api/reference.md:2219 +#: src/api/reference.md:2204 msgid "`setMasterVolume` — module" msgstr "`setMasterVolume` — módulo" -#: src/api/reference.md:2220 +#: src/api/reference.md:2205 msgid "`setPan` — module" msgstr "`setPan` — módulo" -#: src/api/reference.md:2221 src/api/reference.md:2341 +#: src/api/reference.md:2206 src/api/reference.md:2341 msgid "`setRate` — module" msgstr "`setRate` — módulo" -#: src/api/reference.md:2222 src/api/reference.md:2342 +#: src/api/reference.md:2207 src/api/reference.md:2342 msgid "`setVolume` — module" msgstr "`setVolume` — módulo" -#: src/api/reference.md:2223 +#: src/api/reference.md:2208 msgid "`soloBus` — module" msgstr "`soloBus` — módulo" -#: src/api/reference.md:2224 src/api/reference.md:2247 +#: src/api/reference.md:2209 src/api/reference.md:2247 #: src/api/reference.md:2276 src/api/reference.md:2289 #: src/api/reference.md:2343 msgid "`stop` — module" msgstr "`stop` — módulo" -#: src/api/reference.md:2225 +#: src/api/reference.md:2210 msgid "`suspend` — module" msgstr "`suspend` — módulo" -#: src/api/reference.md:2226 +#: src/api/reference.md:2211 msgid "`unload` — module" msgstr "`unload` — módulo" -#: src/api/reference.md:2228 +#: src/api/reference.md:2213 msgid "`perry/background`" msgstr "`perry/background`" -#: src/api/reference.md:2232 +#: src/api/reference.md:2217 msgid "`cancel` — module" msgstr "`cancel` — módulo" -#: src/api/reference.md:2233 +#: src/api/reference.md:2218 msgid "`registerTask` — module" msgstr "`registerTask` — módulo" -#: src/api/reference.md:2234 +#: src/api/reference.md:2219 msgid "`schedule` — module" msgstr "`schedule` — módulo" +#: src/api/reference.md:2221 +#, fuzzy +msgid "`perry/component`" +msgstr "`perry/compose`" + +#: src/api/reference.md:2225 +#, fuzzy +msgid "`callComponent` — module" +msgstr "`compose` — módulo" + +#: src/api/reference.md:2226 +#, fuzzy +msgid "`callComponentImport` — module" +msgstr "`composeUp` — módulo" + +#: src/api/reference.md:2227 +#, fuzzy +msgid "`createComponentHostResource` — module" +msgstr "`createInterface` — módulo" + +#: src/api/reference.md:2228 +#, fuzzy +msgid "`createComponentResource` — module" +msgstr "`createInterface` — módulo" + +#: src/api/reference.md:2229 +#, fuzzy +msgid "`disposeComponent` — module" +msgstr "`isContext` — módulo" + +#: src/api/reference.md:2230 +#, fuzzy +msgid "`getComponentHostResourceValue` — module" +msgstr "`executionAsyncResource` — módulo" + +#: src/api/reference.md:2231 +#, fuzzy +msgid "`getComponentResourceValue` — module" +msgstr "`executionAsyncResource` — módulo" + +#: src/api/reference.md:2232 +#, fuzzy +msgid "`loadComponent` — module" +msgstr "`moment` — módulo" + +#: src/api/reference.md:2233 +#, fuzzy +msgid "`registerComponentExports` — module" +msgstr "`registerHooks` — módulo" + +#: src/api/reference.md:2234 +#, fuzzy +msgid "`runComponentCommand` — module" +msgstr "`runInContext` — módulo" + #: src/api/reference.md:2236 msgid "`perry/compose`" msgstr "`perry/compose`" @@ -43918,7 +44166,7 @@ msgstr "`platform`" msgid "`ppid`" msgstr "`ppid`" -#: src/api/reference.md:2794 src/contributing/building.md:52 +#: src/api/reference.md:2794 src/contributing/building.md:59 msgid "`release`" msgstr "`release`" @@ -44716,6 +44964,10 @@ msgstr "`WritableStreamDefaultController`" msgid "`WritableStreamDefaultWriter`" msgstr "`WritableStreamDefaultWriter`" +#: src/api/reference.md:3139 +msgid "`streams`" +msgstr "`streams`" + #: src/api/reference.md:3147 src/api/reference.md:3169 #: src/api/reference.md:3431 msgid "`TextDecoder`" @@ -47026,8 +47278,8 @@ msgstr "`volumes`" #: src/container/containers.md:54 msgid "" -"Volume mounts in `\"host:container[:ro]\"` form, e.g. `[\"./data:/data:ro" -"\"]`." +"Volume mounts in `\"host:container[:ro]\"` form, e.g. `[\"./data:/data:" +"ro\"]`." msgstr "" "Montajes de volúmenes en formato `\"host:container[:ro]\"`, p. ej. `[\"./" "data:/data:ro\"]`." @@ -47158,8 +47410,8 @@ msgid "" msgstr "" "Para una carga de trabajo no confiable (p. ej. ejecutar código proporcionado " "por el usuario o un script de compilación de una fuente no confiable), el " -"punto de partida recomendado es \"eliminar todo y agregar solo lo necesario" -"\":" +"punto de partida recomendado es \"eliminar todo y agregar solo lo " +"necesario\":" #: src/container/containers.md:81 src/container/security.md:46 msgid "" @@ -47483,13 +47735,13 @@ msgstr "Introspección del backend" #: src/container/containers.md:212 msgid "" -"`getBackend()` is synchronous and returns the canonical backend name (`" -"\"docker\"`, `\"podman\"`, `\"apple/container\"`, etc.). It will perform a " +"`getBackend()` is synchronous and returns the canonical backend name " +"(`\"docker\"`, `\"podman\"`, `\"apple/container\"`, etc.). It will perform a " "synchronous in-place probe on first call so the result is always the live " "name; calls after the first hit a cached `OnceLock` and return instantly." msgstr "" -"`getBackend()` es síncrono y devuelve el nombre canónico del backend (`" -"\"docker\"`, `\"podman\"`, `\"apple/container\"`, etc.). Realiza una sonda " +"`getBackend()` es síncrono y devuelve el nombre canónico del backend " +"(`\"docker\"`, `\"podman\"`, `\"apple/container\"`, etc.). Realiza una sonda " "síncrona en el lugar en la primera llamada para que el resultado sea siempre " "el nombre activo; las llamadas posteriores usan un `OnceLock` en caché y " "retornan instantáneamente." @@ -47603,8 +47855,8 @@ msgid "" " image: \"myorg/api:1.0\",\n" " depends_on: { db: { condition: \"service_healthy\" } },\n" " environment: {\n" -" DATABASE_URL: \"postgres://app:changeme@app-db:5432/app" -"\",\n" +" DATABASE_URL: \"postgres://app:changeme@app-db:5432/" +"app\",\n" " },\n" " ports: [\"8080:8080\"],\n" " networks: [\"app-db-net\", \"app-web-net\"],\n" @@ -47657,8 +47909,8 @@ msgstr "" " image: \"myorg/api:1.0\",\n" " depends_on: { db: { condition: \"service_healthy\" } },\n" " environment: {\n" -" DATABASE_URL: \"postgres://app:changeme@app-db:5432/app" -"\",\n" +" DATABASE_URL: \"postgres://app:changeme@app-db:5432/" +"app\",\n" " },\n" " ports: [\"8080:8080\"],\n" " networks: [\"app-db-net\", \"app-web-net\"],\n" @@ -48791,11 +49043,11 @@ msgstr "**Deshabilitar masquerade / NAT** (en el host)" #: src/container/networking.md:178 msgid "" -"`driver_opts: { \"com.docker.network.bridge.enable_ip_masquerade\": \"false" -"\" }`" +"`driver_opts: { \"com.docker.network.bridge.enable_ip_masquerade\": " +"\"false\" }`" msgstr "" -"`driver_opts: { \"com.docker.network.bridge.enable_ip_masquerade\": \"false" -"\" }`" +"`driver_opts: { \"com.docker.network.bridge.enable_ip_masquerade\": " +"\"false\" }`" #: src/container/networking.md:179 msgid "**Custom MTU** (matches host network)" @@ -49076,7 +49328,7 @@ msgid "This matches `docker compose down` semantics:" msgstr "Esto coincide con la semántica de `docker compose down`:" #: src/container/volumes.md:89 src/cli/commands.md:8 -#: src/contributing/building.md:48 +#: src/contributing/building.md:53 msgid "Command" msgstr "Comando" @@ -49395,8 +49647,8 @@ msgid "" "Linux capabilities to add. Specific (e.g. `[\"NET_BIND_SERVICE\"]`), not " "blanket." msgstr "" -"Capacidades de Linux a añadir. Específicas (por ejemplo, `[\"NET_BIND_SERVICE" -"\"]`), no genéricas." +"Capacidades de Linux a añadir. Específicas (por ejemplo, " +"`[\"NET_BIND_SERVICE\"]`), no genéricas." #: src/container/security.md:21 msgid "" @@ -51204,8 +51456,8 @@ msgstr "// Ambos producen ContainerInfo con la misma semántica de campo:" #: src/container/determinism.md:301 msgid "" -"User code reading `info.status` sees `\"running\"` from any backend — not `" -"\"Up 5 seconds\"` from docker vs `\"running\"` from apple." +"User code reading `info.status` sees `\"running\"` from any backend — not " +"`\"Up 5 seconds\"` from docker vs `\"running\"` from apple." msgstr "" "El código de usuario que lee `info.status` ve `\"running\"` desde cualquier " "motor, no `\"Up 5 seconds\"` desde Docker frente a `\"running\"` desde Apple." @@ -52610,9 +52862,9 @@ msgid "" "code determines the **symbol** (`USD` → `$`, `EUR` → `€`, `GBP` → `£`, …; " "codes without a well-known symbol render as the code itself), while the " "locale keeps controlling the **layout** — separators and symbol placement. " -"With `en = \"GBP\"`, English output becomes `£1,234.50`; with `de = \"USD" -"\"`, German output becomes `1.234,50 $`. Locales without an entry (exact " -"locale first, then base language) use their built-in default symbol." +"With `en = \"GBP\"`, English output becomes `£1,234.50`; with `de = " +"\"USD\"`, German output becomes `1.234,50 $`. Locales without an entry " +"(exact locale first, then base language) use their built-in default symbol." msgstr "" "Cuando se llama `Currency(value)`, el código ISO 4217 configurado de la " "localización activa determina la **símbolo** (`USD` → `$`, `EUR` → `€`, " @@ -52687,7 +52939,7 @@ msgstr "" msgid "Example Output" msgstr "Ejemplo de Salida" -#: src/i18n/cli.md:32 +#: src/i18n/cli.md:32 src/testing/ci-tiers.md:267 msgid "Workflow" msgstr "Flujo de Trabajo" @@ -52903,13 +53155,13 @@ msgstr "" #: src/updater/overview.md:28 msgid "" "```typescript\n" -"// import { checkForUpdate, initUpdater, markHealthy } from \"@perry/updater" -"\"\n" +"// import { checkForUpdate, initUpdater, markHealthy } from \"@perry/" +"updater\"\n" "```" msgstr "" "```typescript\n" -"// import { checkForUpdate, initUpdater, markHealthy } from \"@perry/updater" -"\"\n" +"// import { checkForUpdate, initUpdater, markHealthy } from \"@perry/" +"updater\"\n" "```" #: src/updater/overview.md:32 @@ -52926,8 +53178,8 @@ msgstr "" #: src/updater/overview.md:36 msgid "" "```typescript\n" -"// Pseudocode using @perry/updater's wrapper. Drop into a \"Check for updates" -"\"\n" +"// Pseudocode using @perry/updater's wrapper. Drop into a \"Check for " +"updates\"\n" "// menu item or a periodic timer. The manifest URL must serve over HTTPS.\n" "//\n" "// const update = await checkForUpdate({\n" @@ -52951,8 +53203,8 @@ msgid "" "```" msgstr "" "```typescript\n" -"// Pseudocode using @perry/updater's wrapper. Drop into a \"Check for updates" -"\"\n" +"// Pseudocode using @perry/updater's wrapper. Drop into a \"Check for " +"updates\"\n" "// menu item or a periodic timer. The manifest URL must serve over HTTPS.\n" "//\n" "// const update = await checkForUpdate({\n" @@ -53051,8 +53303,8 @@ msgid "" "// \"notes\": \"Bug fixes and performance improvements\",\n" "// \"platforms\": {\n" "// \"darwin-aarch64\": {\n" -"// \"url\": \"https://example.com/app-1.4.0-darwin-aarch64.bin" -"\",\n" +"// \"url\": \"https://example.com/app-1.4.0-darwin-aarch64." +"bin\",\n" "// \"sha256\": \"0123456789abcdef...\",\n" "// \"signature\": \"base64sig==\",\n" "// \"size\": 12345678\n" @@ -53075,8 +53327,8 @@ msgstr "" "// \"notes\": \"Bug fixes and performance improvements\",\n" "// \"platforms\": {\n" "// \"darwin-aarch64\": {\n" -"// \"url\": \"https://example.com/app-1.4.0-darwin-aarch64.bin" -"\",\n" +"// \"url\": \"https://example.com/app-1.4.0-darwin-aarch64." +"bin\",\n" "// \"sha256\": \"0123456789abcdef...\",\n" "// \"signature\": \"base64sig==\",\n" "// \"size\": 12345678\n" @@ -53426,9 +53678,10 @@ msgid "" msgstr "" "Componga un manifiesto final con la salida `sign` a través de `jq` para cada " "activo, luego fusionándose en el diseño por plataforma mostrado " -"anteriormente. Consejo de CI: pase `--secret-key-b64 \"$ED25519_SECRET_KEY" -"\"` en lugar de `--secret-key file` para que el secreto pueda venir de un " -"secreto de repositorio sin golpear el sistema de archivos del trabajador." +"anteriormente. Consejo de CI: pase `--secret-key-b64 " +"\"$ED25519_SECRET_KEY\"` en lugar de `--secret-key file` para que el " +"secreto pueda venir de un secreto de repositorio sin golpear el sistema de " +"archivos del trabajador." #: src/updater/overview.md:237 msgid "Install + rollback flow" @@ -54036,11 +54289,11 @@ msgstr "`getDeviceIdiom()`" #: src/system/overview.md:25 msgid "" -"`\"phone\"`, `\"pad\"`, `\"mac\"`, `\"tv\"`, `\"watch\"`, `\"vision\"`, `" -"\"desktop\"`" +"`\"phone\"`, `\"pad\"`, `\"mac\"`, `\"tv\"`, `\"watch\"`, `\"vision\"`, " +"`\"desktop\"`" msgstr "" -"`\"phone\"`, `\"pad\"`, `\"mac\"`, `\"tv\"`, `\"watch\"`, `\"vision\"`, `" -"\"desktop\"`" +"`\"phone\"`, `\"pad\"`, `\"mac\"`, `\"tv\"`, `\"watch\"`, `\"vision\"`, " +"`\"desktop\"`" #: src/system/overview.md:26 msgid "`getDeviceModel()`" @@ -55944,8 +56197,8 @@ msgstr "" msgid "" "Stub platforms link cleanly against the same FFI surface — code that imports " "`perry/media` compiles on every target. `createPlayer` returns `0` on a stub " -"backend so `if (player === 0)` is the canonical \"feature not available here" -"\" check." +"backend so `if (player === 0)` is the canonical \"feature not available " +"here\" check." msgstr "" "Las plataformas stub enlazan limpiamente contra la misma superficie FFI — el " "código que importa `perry/media` compila en todos los targets. " @@ -56263,8 +56516,8 @@ msgid "" " return `${serverUrl}/rest/stream?${params.toString()}`;\n" "}\n" "\n" -"const player = createPlayer(streamUrl(\"https://music.example.com\", \"alice" -"\", \"secret\", \"12345\"));\n" +"const player = createPlayer(streamUrl(\"https://music.example.com\", " +"\"alice\", \"secret\", \"12345\"));\n" "setNowPlaying(player, \"All These Things That I've Done\", \"The Killers\", " "\"Hot Fuss\",\n" " \"https://music.example.com/rest/getCoverArt?" @@ -56290,8 +56543,8 @@ msgstr "" " return `${serverUrl}/rest/stream?${params.toString()}`;\n" "}\n" "\n" -"const player = createPlayer(streamUrl(\"https://music.example.com\", \"alice" -"\", \"secret\", \"12345\"));\n" +"const player = createPlayer(streamUrl(\"https://music.example.com\", " +"\"alice\", \"secret\", \"12345\"));\n" "setNowPlaying(player, \"All These Things That I've Done\", \"The Killers\", " "\"Hot Fuss\",\n" " \"https://music.example.com/rest/getCoverArt?" @@ -56398,9 +56651,9 @@ msgid "" "`\"no-provider-available\"`, `\"unsupported-platform\"`." msgstr "" "`onError(message)` — se dispara al denegar permisos, por tiempo de espera " -"agotado o por indisponibilidad de la plataforma. Mensajes comunes: `" -"\"permission-denied\"`, `\"no-location\"`, `\"no-provider-available\"`, `" -"\"unsupported-platform\"`." +"agotado o por indisponibilidad de la plataforma. Mensajes comunes: " +"`\"permission-denied\"`, `\"no-location\"`, `\"no-provider-available\"`, " +"`\"unsupported-platform\"`." #: src/system/geolocation.md:42 msgid "`geolocationWatch(callback): number`" @@ -56434,8 +56687,8 @@ msgstr "`geolocationRequestPermission(callback)`" #: src/system/geolocation.md:54 msgid "" "Request location permission. Calls `callback(status)` where status is one of " -"`\"granted\"`, `\"denied\"`, `\"restricted\"`, or `\"unsupported-platform" -"\"`. Safe to call repeatedly — already-granted permissions return " +"`\"granted\"`, `\"denied\"`, `\"restricted\"`, or `\"unsupported-" +"platform\"`. Safe to call repeatedly — already-granted permissions return " "immediately." msgstr "" "Solicita permiso de ubicación. Llama a `callback(status)` donde el estado es " @@ -56484,8 +56737,8 @@ msgstr "**tvOS / watchOS / visionOS / GTK4 / Windows / Web**" #: src/system/geolocation.md:66 msgid "" -"No-op stub — `geolocationGetCurrent` invokes `onError` immediately with `" -"\"unsupported-platform\"`." +"No-op stub — `geolocationGetCurrent` invokes `onError` immediately with " +"`\"unsupported-platform\"`." msgstr "" "Stub sin efecto — `geolocationGetCurrent` invoca `onError` inmediatamente " "con `\"unsupported-platform\"`." @@ -57211,12 +57464,12 @@ msgid "" "identifier (`\"iPhone15,2\"`, `\"MacBookPro18,3\"`, etc. — on macOS this is " "sysctl `hw.model`)." msgstr "" -"`getDeviceIdiom()` devuelve el factor de forma amplia como cadena: `\"phone" -"\"` o `\"pad\"` en iOS (y `\"phone\"` en Android), `\"mac\"` en macOS, `\"tv" -"\"` en tvOS, `\"watch\"` en watchOS, `\"vision\"` en visionOS, y `\"desktop" -"\"` en Windows y Linux. `getDeviceModel()` devuelve el identificador de " -"modelo específico de la plataforma (`\"iPhone15,2\"`, `\"MacBookPro18,3\"`, " -"etc. — en macOS esto es sysctl `hw.model`)." +"`getDeviceIdiom()` devuelve el factor de forma amplia como cadena: " +"`\"phone\"` o `\"pad\"` en iOS (y `\"phone\"` en Android), `\"mac\"` en " +"macOS, `\"tv\"` en tvOS, `\"watch\"` en watchOS, `\"vision\"` en visionOS, y " +"`\"desktop\"` en Windows y Linux. `getDeviceModel()` devuelve el " +"identificador de modelo específico de la plataforma (`\"iPhone15,2\"`, " +"`\"MacBookPro18,3\"`, etc. — en macOS esto es sysctl `hw.model`)." #: src/system/other.md:74 msgid "[UI Overview](../ui/overview.md) — Building UIs" @@ -57686,8 +57939,8 @@ msgid "" "Widget({\n" " kind: \"TemplateLiteralWidget\",\n" " displayName: \"Template Literal\",\n" -" description: \"Template literals compile to Swift string interpolation" -"\",\n" +" description: \"Template literals compile to Swift string " +"interpolation\",\n" " entryFields: {\n" " name: \"string\",\n" " score: \"number\",\n" @@ -57703,8 +57956,8 @@ msgstr "" "Widget({\n" " kind: \"TemplateLiteralWidget\",\n" " displayName: \"Template Literal\",\n" -" description: \"Template literals compile to Swift string interpolation" -"\",\n" +" description: \"Template literals compile to Swift string " +"interpolation\",\n" " entryFields: {\n" " name: \"string\",\n" " score: \"number\",\n" @@ -57736,8 +57989,8 @@ msgid "" " displayName: \"City Weather\",\n" " description: \"Weather for a chosen city\",\n" " config: {\n" -" city: { type: \"string\", displayName: \"City\", default: \"New York" -"\" },\n" +" city: { type: \"string\", displayName: \"City\", default: \"New " +"York\" },\n" " units: {\n" " type: \"enum\",\n" " displayName: \"Units\",\n" @@ -57756,8 +58009,8 @@ msgstr "" " displayName: \"City Weather\",\n" " description: \"Weather for a chosen city\",\n" " config: {\n" -" city: { type: \"string\", displayName: \"City\", default: \"New York" -"\" },\n" +" city: { type: \"string\", displayName: \"City\", default: \"New " +"York\" },\n" " units: {\n" " type: \"enum\",\n" " displayName: \"Units\",\n" @@ -57790,8 +58043,8 @@ msgid "" " displayName: \"Stock Price\",\n" " description: \"Shows current stock price\",\n" " config: {\n" -" symbol: { type: \"string\", displayName: \"Symbol\", default: \"AAPL" -"\" },\n" +" symbol: { type: \"string\", displayName: \"Symbol\", default: " +"\"AAPL\" },\n" " },\n" " entryFields: { price: \"number\", change: \"string\" },\n" " provider: async (config) => {\n" @@ -57817,8 +58070,8 @@ msgstr "" " displayName: \"Stock Price\",\n" " description: \"Shows current stock price\",\n" " config: {\n" -" symbol: { type: \"string\", displayName: \"Symbol\", default: \"AAPL" -"\" },\n" +" symbol: { type: \"string\", displayName: \"Symbol\", default: " +"\"AAPL\" },\n" " },\n" " entryFields: { price: \"number\", change: \"string\" },\n" " provider: async (config) => {\n" @@ -57846,12 +58099,12 @@ msgid "" "issues/195). The verified extract uses the supported inline-options form " "`Text(\"...\", { font: \"title\" })`." msgstr "" -"Nota: los modificadores de estilo de cadena (`.font(\"title\").color(\"green" -"\")`) son rechazados con un diagnóstico de tiempo de compilación para que el " -"estilo no pueda desaparecer silenciosamente; este comportamiento cerrado " -"[\\#195](https://github.com/PerryTS/perry/issues/195). El extracto " -"verificado utiliza las opciones en línea compatibles forma `Text(\"...\", " -"{ font: \"title\" })`." +"Nota: los modificadores de estilo de cadena (`.font(\"title\")." +"color(\"green\")`) son rechazados con un diagnóstico de tiempo de " +"compilación para que el estilo no pueda desaparecer silenciosamente; este " +"comportamiento cerrado [\\#195](https://github.com/PerryTS/perry/" +"issues/195). El extracto verificado utiliza las opciones en línea " +"compatibles forma `Text(\"...\", { font: \"title\" })`." #: src/widgets/creating-widgets.md:192 msgid "Placeholder Data" @@ -57927,13 +58180,13 @@ msgstr "" #: src/widgets/creating-widgets.md:222 msgid "" -"Supported families: `\"systemSmall\"`, `\"systemMedium\"`, `\"systemLarge" -"\"`, `\"accessoryCircular\"`, `\"accessoryRectangular\"`, `\"accessoryInline" -"\"`." +"Supported families: `\"systemSmall\"`, `\"systemMedium\"`, " +"`\"systemLarge\"`, `\"accessoryCircular\"`, `\"accessoryRectangular\"`, " +"`\"accessoryInline\"`." msgstr "" -"Familias compatibles: `\"systemSmall\"`, `\"systemMedium\"`, `\"systemLarge" -"\"`, `\"accessoryCircular\"`, `\"accessoryRectangular\"`, `\"accessoryInline" -"\"`." +"Familias compatibles: `\"systemSmall\"`, `\"systemMedium\"`, " +"`\"systemLarge\"`, `\"accessoryCircular\"`, `\"accessoryRectangular\"`, " +"`\"accessoryInline\"`." #: src/widgets/creating-widgets.md:224 msgid "App Group" @@ -58050,10 +58303,10 @@ msgstr "" "un banner `// widget-bundle-id:` ([\\#194](https://github.com/PerryTS/perry/" "issues/194)); los objetivos de extremo a extremo también requieren su " "plataforma SDK. La sintaxis del modificador se limita deliberadamente a " -"**argumentos de opción-objeto en línea** — e.g. `Text(\"hi\", { font: \"title" -"\", color: \"red\" })` y `VStack([...], { padding: 16 })`. Las cadenas tipo " -"método como `Text(\"hi\").font(\"title\")` son rechazadas con un diagnóstico " -"de tiempo de compilación accionable en lugar de ser ignoradas " +"**argumentos de opción-objeto en línea** — e.g. `Text(\"hi\", { font: " +"\"title\", color: \"red\" })` y `VStack([...], { padding: 16 })`. Las " +"cadenas tipo método como `Text(\"hi\").font(\"title\")` son rechazadas con " +"un diagnóstico de tiempo de compilación accionable en lugar de ser ignoradas " "silenciosamente; ese comportamiento cerró [\\#195](https://github.com/" "PerryTS/perry/issues/195). La referencia de extremo a extremo es [`examples/" "widget_demo.ts`](https://github.com/PerryTS/perry/blob/main/examples/" @@ -58435,8 +58688,8 @@ msgid "" " VStack([\n" " Text(`${entry.steps}`, { font: \"title\", fontWeight: " "\"bold\" }),\n" -" Text(\"steps\", { font: \"caption\", color: \"gray" -"\" }),\n" +" Text(\"steps\", { font: \"caption\", color: " +"\"gray\" }),\n" " ]),\n" " Spacer(),\n" " VStack([\n" @@ -58479,8 +58732,8 @@ msgstr "" " VStack([\n" " Text(`${entry.steps}`, { font: \"title\", fontWeight: " "\"bold\" }),\n" -" Text(\"steps\", { font: \"caption\", color: \"gray" -"\" }),\n" +" Text(\"steps\", { font: \"caption\", color: " +"\"gray\" }),\n" " ]),\n" " Spacer(),\n" " VStack([\n" @@ -58590,8 +58843,8 @@ msgid "" "\n" " provider: async (config: { sortBy: string; dateRange: string }) => {\n" " const res = await fetch(\n" -" `https://api.example.com/stats?sort=${config.sortBy}&range=" -"${config.dateRange}`,\n" +" `https://api.example.com/stats?sort=${config.sortBy}" +"&range=${config.dateRange}`,\n" " )\n" " const data = await res.json()\n" " return {\n" @@ -58602,8 +58855,8 @@ msgid "" "\n" " render: (entry) =>\n" " VStack([\n" -" Text(`${entry.total}`, { font: \"title\", fontWeight: \"bold" -"\" }),\n" +" Text(`${entry.total}`, { font: \"title\", fontWeight: " +"\"bold\" }),\n" " Text(entry.label, { font: \"caption\", color: \"secondary\" }),\n" " ]),\n" "})\n" @@ -58639,8 +58892,8 @@ msgstr "" "\n" " provider: async (config: { sortBy: string; dateRange: string }) => {\n" " const res = await fetch(\n" -" `https://api.example.com/stats?sort=${config.sortBy}&range=" -"${config.dateRange}`,\n" +" `https://api.example.com/stats?sort=${config.sortBy}" +"&range=${config.dateRange}`,\n" " )\n" " const data = await res.json()\n" " return {\n" @@ -58651,8 +58904,8 @@ msgstr "" "\n" " render: (entry) =>\n" " VStack([\n" -" Text(`${entry.total}`, { font: \"title\", fontWeight: \"bold" -"\" }),\n" +" Text(`${entry.total}`, { font: \"title\", fontWeight: " +"\"bold\" }),\n" " Text(entry.label, { font: \"caption\", color: \"secondary\" }),\n" " ]),\n" "})\n" @@ -58719,8 +58972,8 @@ msgstr "" msgid "" "```text\n" "provider: async (config: { sortBy: string; dateRange: string }) => {\n" -" // config.sortBy === \"clicks\" | \"impressions\" | \"ctr\" | \"position" -"\"\n" +" // config.sortBy === \"clicks\" | \"impressions\" | \"ctr\" | " +"\"position\"\n" " // config.dateRange === \"7d\" | \"28d\" | \"90d\"\n" " const url = `https://api.example.com/data?sort=${config.sortBy}`;\n" " const res = await fetch(url);\n" @@ -58731,8 +58984,8 @@ msgid "" msgstr "" "```text\n" "provider: async (config: { sortBy: string; dateRange: string }) => {\n" -" // config.sortBy === \"clicks\" | \"impressions\" | \"ctr\" | \"position" -"\"\n" +" // config.sortBy === \"clicks\" | \"impressions\" | \"ctr\" | " +"\"position\"\n" " // config.dateRange === \"7d\" | \"28d\" | \"90d\"\n" " const url = `https://api.example.com/data?sort=${config.sortBy}`;\n" " const res = await fetch(url);\n" @@ -59014,8 +59267,8 @@ msgid "" " },\n" "\n" " provider: async () => {\n" -" const res = await fetch(\"https://api.weather.example.com/current" -"\")\n" +" const res = await fetch(\"https://api.weather.example.com/" +"current\")\n" " const data = await res.json()\n" " return {\n" " entries: [\n" @@ -59046,8 +59299,8 @@ msgstr "" " },\n" "\n" " provider: async () => {\n" -" const res = await fetch(\"https://api.weather.example.com/current" -"\")\n" +" const res = await fetch(\"https://api.weather.example.com/" +"current\")\n" " const data = await res.json()\n" " return {\n" " entries: [\n" @@ -59237,13 +59490,14 @@ msgstr "`{ after: { minutes: N } }`" #: src/widgets/data-fetching.md:136 msgid "" "Re-fetch after N minutes. Compiles to `.after(Date()." -"addingTimeInterval(N*60))` on iOS/watchOS, `android:updatePeriodMillis=" -"\"N*60000\"` on Android, and `setFreshnessIntervalMillis(N*60000)` on Wear " -"OS." +"addingTimeInterval(N*60))` on iOS/watchOS, `android:" +"updatePeriodMillis=\"N*60000\"` on Android, and " +"`setFreshnessIntervalMillis(N*60000)` on Wear OS." msgstr "" "Vuelve a buscar después de N minutos. Compila a `.after(Date()." -"addingTimeInterval(N*60))` en iOS/watchOS, `android:updatePeriodMillis=" -"\"N*60000\"` en Android, y `setFreshnessIntervalMillis(N*60000)` en Wear OS." +"addingTimeInterval(N*60))` en iOS/watchOS, `android:" +"updatePeriodMillis=\"N*60000\"` en Android, y " +"`setFreshnessIntervalMillis(N*60000)` en Wear OS." #: src/widgets/data-fetching.md:137 msgid "_(omitted)_" @@ -59642,6 +59896,15 @@ msgid "Text fallback" msgstr "Text fallback" #: src/widgets/platforms.md:34 src/widgets/platforms.md:40 +#: src/internals/weakmap-owned-index-design.md:62 +#: src/internals/weakmap-owned-index-design.md:63 +#: src/internals/weakmap-owned-index-design.md:64 +#: src/internals/weakmap-owned-index-design.md:65 +#: src/internals/weakmap-owned-index-design.md:66 +#: src/internals/weakmap-owned-index-design.md:67 +#: src/internals/weakmap-owned-index-design.md:68 +#: src/internals/weakmap-owned-index-design.md:69 +#: src/internals/weakmap-owned-index-design.md:70 msgid "N/A" msgstr "N/A" @@ -61372,8 +61635,8 @@ msgstr "" #: src/plugins/native-extensions.md:95 msgid "" -"Array of LLVM types: `\"i64\"` for pointers/strings, `\"f64\"` for numbers, `" -"\"i32\"` for integers" +"Array of LLVM types: `\"i64\"` for pointers/strings, `\"f64\"` for numbers, " +"`\"i32\"` for integers" msgstr "" "Array de tipos LLVM: `\"i64\"` para punteros/cadenas, `\"f64\"` para " "números, `\"i32\"` para enteros" @@ -62776,11 +63039,35 @@ msgstr "" "No hay deliberadamente ninguna tercera manera. No hay umbral para chocar, no " "hay `--allow-dark`, no hay variable de entorno." -#: src/testing/test-registration.md:115 src/testing/http2-conformance.md:442 +#: src/testing/test-registration.md:115 +msgid "GC witness execution metadata" +msgstr "" + +#: src/testing/test-registration.md:117 +msgid "" +"Registration is not proof that a witness ran under its required conditions. " +"Use `// parity-env: KEY=VALUE ...` for explicit stress settings. The matrix " +"validates its GC-only settings and applies them at compile time and runtime " +"only in `loop_polls`; shipped/default/OFF controls remain unchanged. `// " +"parity-node-argv: --expose-gc` reaches the Node oracle in both harnesses." +msgstr "" + +#: src/testing/test-registration.md:123 +msgid "" +"`// parity-rlimit-as-mb: 2048` requires a 2048 MiB **process address-space** " +"ceiling, not an RSS limit or GC pressure target. Both harnesses validate " +"this positive integer and apply it only to the native witness run (only " +"`loop_polls` in the matrix), never to Node or compilation. Setup/readback " +"failure refuses execution with exit 125. Hosts that cannot enforce " +"`RLIMIT_AS` need native acceptance on a supported host; an uncapped run is " +"not a substitute." +msgstr "" + +#: src/testing/test-registration.md:130 src/testing/http2-conformance.md:442 msgid "Not covered" msgstr "No cubierto" -#: src/testing/test-registration.md:117 +#: src/testing/test-registration.md:132 msgid "" "`tests/*.sh`, `tests/*.py` and `tests/*.ts` have no registry to diff against " "— 143 of the 171 files there are referenced by nothing in the tree. That is " @@ -63024,8 +63311,8 @@ msgid "Menu item" msgstr "Elemento de menú" #: src/testing/geisterhand.md:92 src/cli/perry-toml.md:426 -#: src/internals/node-api-host.md:588 src/internals/node-api-host.md:589 -#: src/internals/node-api-host.md:590 src/internals/node-api-host.md:591 +#: src/internals/node-api-host.md:628 src/internals/node-api-host.md:629 +#: src/internals/node-api-host.md:630 src/internals/node-api-host.md:631 msgid "6" msgstr "6" @@ -63037,8 +63324,8 @@ msgstr "Atajo de teclado" msgid "Data table" msgstr "Tabla de datos" -#: src/testing/geisterhand.md:94 src/internals/node-api-host.md:593 -#: src/internals/node-api-host.md:594 src/internals/node-api-host.md:621 +#: src/testing/geisterhand.md:94 src/internals/node-api-host.md:633 +#: src/internals/node-api-host.md:634 src/internals/node-api-host.md:661 msgid "8" msgstr "8" @@ -64129,8 +64416,8 @@ msgstr "\"Incremento\"" #: src/testing/geisterhand.md:657 #, fuzzy msgid "" -"# {\"handle\":4,\"widget_type\":0,\"callback_kind\":0,\"label\":\"Reset" -"\"},\n" +"# {\"handle\":4,\"widget_type\":0,\"callback_kind\":0,\"label\":" +"\"Reset\"},\n" msgstr "" "# {\"handle\":4,\"widget_type\":0,\"callback_kind\":0,\"label\":\"Reset\"}," @@ -64217,8 +64504,8 @@ msgid "" "**Widget Registration**: As UI widgets are created (Button, TextField, " "Slider, etc.), each one calls `perry_geisterhand_register(handle, " "widget_type, callback_kind, closure_f64, label)` to register its callback in " -"the global registry. This is gated behind `#[cfg(feature = \"geisterhand" -"\")]` so normal builds have zero overhead." +"the global registry. This is gated behind `#[cfg(feature = " +"\"geisterhand\")]` so normal builds have zero overhead." msgstr "" "**Registro de widgets**: A medida que se crean widgets de UI (Button, " "TextField, Slider, etc.), cada uno llama a " @@ -64839,9 +65126,10 @@ msgstr "" "coteja con cada activo fijado en el momento del pin." #: src/testing/node-compat-matrix.md:77 +#, fuzzy msgid "" -"Currently pinned: **Node 26.5.1** (the latest CURRENT stable). This is a " -"separate concern from `.node-version` (26.5.0), which pins the gap-suite / " +"Currently pinned: **Node 26.12.1** (the latest CURRENT stable). This is a " +"separate concern from `.node-version` (26.12.1), which pins the gap-suite / " "node-suite oracle; the compat matrix carries its own \"latest stable\" pin." msgstr "" "En la actualidad: **Nodo 26.5.1** (el último estable de la actualidad). Esta " @@ -65679,8 +65967,8 @@ msgstr "" #: src/testing/http2-conformance.md:232 msgid "" -"`RST_STREAM stream=5 code=7`, `RST_STREAM stream=7 code=7` — REFUSED" -"\\_STREAM, session survives" +"`RST_STREAM stream=5 code=7`, `RST_STREAM stream=7 code=7` — " +"REFUSED\\_STREAM, session survives" msgstr "" #: src/testing/http2-conformance.md:233 @@ -65689,8 +65977,8 @@ msgstr "" #: src/testing/http2-conformance.md:233 msgid "" -"`RST_STREAM stream=1 code=2`, `GOAWAY stream=0 last=3 code=2` — INTERNAL" -"\\_ERROR, connection torn down, `ERR_HTTP2_ERROR errno=-505`" +"`RST_STREAM stream=1 code=2`, `GOAWAY stream=0 last=3 code=2` — " +"INTERNAL\\_ERROR, connection torn down, `ERR_HTTP2_ERROR errno=-505`" msgstr "" #: src/testing/http2-conformance.md:235 @@ -65988,8 +66276,8 @@ msgstr "" #: src/testing/http2-conformance.md:325 msgid "" -"trailers: event order is exactly `[\"response\",\"data\",\"trailers\",\"end" -"\"]`;" +"trailers: event order is exactly `[\"response\",\"data\",\"trailers\"," +"\"end\"]`;" msgstr "" #: src/testing/http2-conformance.md:326 @@ -66318,7 +66606,7 @@ msgstr "" "es `needs: plan` y cerrado en `fromJSON(needs.plan.outputs.plan).jobs." "`." -#: src/testing/ci-tiers.md:13 src/testing/ci-tiers.md:124 +#: src/testing/ci-tiers.md:13 src/testing/ci-tiers.md:187 msgid "tier" msgstr "tier" @@ -66360,9 +66648,11 @@ msgstr "" "cada `push` a `main` (coalimentado) **+ un soporte de cron de dos horas**" #: src/testing/ci-tiers.md:16 +#, fuzzy msgid "" -"post-merge truth for `main`: the PR tier unscoped plus the medium-weight " -"jobs that do not fit the PR budget" +"post-merge truth for `main`: unscoped unit/package tests plus medium-weight " +"jobs; Perry's large integration inventory stays in the nightly/release full " +"tier" msgstr "" "verdad post-fusiones para `main`: el nivel de PR sin alcance más los " "trabajos de peso medio que no se ajustan al presupuesto de PR" @@ -66384,8 +66674,9 @@ msgstr "" "etiquetados `run-extended-tests`" #: src/testing/ci-tiers.md:17 +#, fuzzy msgid "" -"everything, incl. parity, compile-smoke, doc-tests, package smokes, the 8-" +"everything, incl. parity, compile-smoke, doc-tests, package smokes, the 24-" "shard auto-optimize gap suite" msgstr "" "todo, incl. paridad, compile-smoke, doc-tests, humos de paquetes, la suite " @@ -66408,145 +66699,185 @@ msgstr "" "comprueba que esta copia es actual." #: src/testing/ci-tiers.md:24 +msgid "" +"The PR gap tier uses twelve fast-mode shards after a six-way shard exhausted " +"the 110-minute job bound. The full gap tier uses twenty-four shards with " +"auto-optimize enabled. Both retain every fixture and the existing snapshot " +"acceptance gate; CI timings must establish the new margin. Compile-smoke " +"partitions the complete top-level `test-files/*.ts` inventory into four " +"stable round-robin shards, with at most two smoke shards running " +"concurrently. Each file is assigned once before the existing platform " +"exclusions are applied. Every shard retains the default compiler invocation " +"and failure markers; `full-suite-gate` requires the matrix job's aggregate " +"result. These splits address twelve-way gap jobs reaching their 110-minute " +"bound and the unsharded smoke job reaching the hosted six-hour limit. Actual " +"CI durations must still establish the new margin." +msgstr "" + +#: src/testing/ci-tiers.md:37 msgid "job" msgstr "job" -#: src/testing/ci-tiers.md:24 +#: src/testing/ci-tiers.md:37 msgid "pr" msgstr "pr" -#: src/testing/ci-tiers.md:24 src/testing/ci-tiers.md:128 +#: src/testing/ci-tiers.md:37 src/testing/ci-tiers.md:191 msgid "sweep" msgstr "sweep" -#: src/testing/ci-tiers.md:24 src/testing/ci-tiers.md:129 +#: src/testing/ci-tiers.md:37 src/testing/ci-tiers.md:192 msgid "full" msgstr "full" -#: src/testing/ci-tiers.md:26 +#: src/testing/ci-tiers.md:39 msgid "`lint`" msgstr "`lint`" -#: src/testing/ci-tiers.md:26 +#: src/testing/ci-tiers.md:39 msgid "always" msgstr "always" -#: src/testing/ci-tiers.md:27 src/cli/commands.md:11 +#: src/testing/ci-tiers.md:40 src/cli/commands.md:11 msgid "`check`" msgstr "`check`" -#: src/testing/ci-tiers.md:28 +#: src/testing/ci-tiers.md:41 msgid "`warnings`" msgstr "`warnings`" -#: src/testing/ci-tiers.md:29 +#: src/testing/ci-tiers.md:42 msgid "`cargo-test`" msgstr "`cargo-test`" -#: src/testing/ci-tiers.md:30 +#: src/testing/ci-tiers.md:43 #, fuzzy msgid "`cargo-test-perry`" msgstr "`cargo-test`" -#: src/testing/ci-tiers.md:31 +#: src/testing/ci-tiers.md:44 msgid "`gap-suite`" msgstr "`gap-suite`" -#: src/testing/ci-tiers.md:31 -msgid "6x fast" +#: src/testing/ci-tiers.md:44 +#, fuzzy +msgid "12x fast" msgstr "6 veces rápido" -#: src/testing/ci-tiers.md:31 +#: src/testing/ci-tiers.md:44 msgid "3x fast" msgstr "3 veces rápido" -#: src/testing/ci-tiers.md:31 -msgid "8x full" +#: src/testing/ci-tiers.md:44 +#, fuzzy +msgid "24x full" msgstr "8x lleno" -#: src/testing/ci-tiers.md:32 +#: src/testing/ci-tiers.md:45 +#, fuzzy +msgid "`wasi-execution`" +msgstr "`flexDirection`" + +#: src/testing/ci-tiers.md:46 +msgid "`gc-call-effects`" +msgstr "" + +#: src/testing/ci-tiers.md:47 msgid "`gc-stress`" msgstr "`gc-stress`" -#: src/testing/ci-tiers.md:32 +#: src/testing/ci-tiers.md:47 msgid "1x pr" msgstr "" -#: src/testing/ci-tiers.md:32 +#: src/testing/ci-tiers.md:47 msgid "4x all" msgstr "" -#: src/testing/ci-tiers.md:33 +#: src/testing/ci-tiers.md:48 msgid "`e2e-scoped`" msgstr "`e2e-scoped`" -#: src/testing/ci-tiers.md:34 +#: src/testing/ci-tiers.md:49 msgid "`security-audit`" msgstr "`security-audit`" -#: src/testing/ci-tiers.md:34 +#: src/testing/ci-tiers.md:49 msgid "deps only" msgstr "sólo deps" -#: src/testing/ci-tiers.md:35 +#: src/testing/ci-tiers.md:50 msgid "`windows-build`" msgstr "`windows-build`" -#: src/testing/ci-tiers.md:36 +#: src/testing/ci-tiers.md:51 msgid "`windows-arm64-build`" msgstr "`windows-arm64-build`" -#: src/testing/ci-tiers.md:37 +#: src/testing/ci-tiers.md:52 msgid "`compiler-output-regression`" msgstr "`compiler-output-regression`" -#: src/testing/ci-tiers.md:38 +#: src/testing/ci-tiers.md:53 msgid "`repsel-census`" msgstr "`repsel-census`" -#: src/testing/ci-tiers.md:39 +#: src/testing/ci-tiers.md:54 msgid "`harmonyos-smoke`" msgstr "`harmonyos-smoke`" -#: src/testing/ci-tiers.md:40 +#: src/testing/ci-tiers.md:55 msgid "`binary-size`" msgstr "`binary-size`" -#: src/testing/ci-tiers.md:41 +#: src/testing/ci-tiers.md:56 msgid "`parity`" msgstr "`parity`" -#: src/testing/ci-tiers.md:42 +#: src/testing/ci-tiers.md:57 msgid "`compile-smoke`" msgstr "`compile-smoke`" -#: src/testing/ci-tiers.md:43 +#: src/testing/ci-tiers.md:58 msgid "`native-abi-evidence-packet`" msgstr "`native-abi-evidence-packet`" -#: src/testing/ci-tiers.md:44 +#: src/testing/ci-tiers.md:59 msgid "`drizzle-mysql-smoke`" msgstr "`drizzle-mysql-smoke`" -#: src/testing/ci-tiers.md:45 +#: src/testing/ci-tiers.md:60 msgid "`ink-link-smoke`" msgstr "`ink-link-smoke`" -#: src/testing/ci-tiers.md:46 +#: src/testing/ci-tiers.md:61 msgid "`effect-basic-smoke`" msgstr "`effect-basic-smoke`" -#: src/testing/ci-tiers.md:47 +#: src/testing/ci-tiers.md:62 msgid "`doc-tests`" msgstr "`doc-tests`" -#: src/testing/ci-tiers.md:49 +#: src/testing/ci-tiers.md:64 +msgid "" +"`windows-build` also runs `python scripts/run_windows_runtime_regressions." +"py` after building the compiler and both static archives. It compares the " +"Windows path/file-URL, realpath, shell quoting, child `argv0`, platform " +"metadata, and named-pipe shutdown fixtures with the exact Node oracle in `." +"node-version`. The pipe fixtures cover duplex replies and queued writes as " +"well as EOF. A native unread-peer probe also checks that destroying a socket " +"releases the drain's duplicated handle while the JavaScript process remains " +"alive. These fixtures skip their Windows bodies on other hosts; use the full " +"tier (`run-extended-tests`) when reviewing changes to this behavior." +msgstr "" + +#: src/testing/ci-tiers.md:74 msgid "Within the **pr** tier the changed-file list narrows the plan further:" msgstr "" "Dentro de la **pr** nivel la lista de archivos cambiados reduce el plan aún " "más:" -#: src/testing/ci-tiers.md:51 +#: src/testing/ci-tiers.md:76 msgid "" "**docs-only** (only `docs/`, `*.md`, `benchmarks/`, `npm/`, `packaging/`, `." "claude/`, … — see `NON_CORE_GLOBS` in `ci_plan.py`) → only `lint` runs." @@ -66555,7 +66886,7 @@ msgstr "" "claude/`, ... — véase `NON_CORE_GLOBS` en `ci_plan.py`) → sólo `lint` se " "ejecuta." -#: src/testing/ci-tiers.md:53 +#: src/testing/ci-tiers.md:78 msgid "" "**core** (anything that can change the compiler, the runtime, or a test " "outcome) → the whole PR tier." @@ -66563,16 +66894,138 @@ msgstr "" "**core** (cualquier cosa que pueda cambiar el compilador, el tiempo de " "ejecución o un resultado de prueba) → todo el nivel PR." -#: src/testing/ci-tiers.md:55 +#: src/testing/ci-tiers.md:80 +#, fuzzy msgid "" "**deps** (a lockfile, manifest, `deny.toml`, `package.json`, `.claude/`, " -"`skills/`, …) → additionally the `security-audit` reusable workflow." +"`skills/`, …) → additionally the inlined `security-audit` suite." msgstr "" "**deps** (un archivo de bloqueo, manifiesto, `deny.toml`, `package.json`, `." "claude/`, `skills/`, ...) → adicionalmente el flujo de trabajo reutilizable " "`security-audit`." -#: src/testing/ci-tiers.md:58 +#: src/testing/ci-tiers.md:83 +msgid "" +"Within `cargo-test`, runtime changes also select `perry-stdlib` unit tests: " +"those tests exercise runtime GC, arenas, closures, promises and the event " +"loop. The `perry-ext-*` crates remain excluded from dependency fan-out " +"unless directly changed. `scripts/ci_test_scope.py` owns this policy, with " +"regression tests in `lint`." +msgstr "" + +#: src/testing/ci-tiers.md:89 +msgid "Rust test lanes and timeboxes" +msgstr "" + +#: src/testing/ci-tiers.md:91 +msgid "" +"Perry's Cargo suites use the same fast / mid / slow idea as socket-" +"wheelhouse, but their wall times are measured in minutes because Rust " +"compilation and the runtime-linked test binaries dominate these suites. The " +"wheelhouse's 10s / 30s / 60s limits apply to its small Vitest lanes and " +"should not be copied onto Cargo." +msgstr "" + +#: src/testing/ci-tiers.md:96 +msgid "Lane" +msgstr "" + +#: src/testing/ci-tiers.md:96 +#, fuzzy +msgid "What runs" +msgstr "Qué correr" + +#: src/testing/ci-tiers.md:96 +msgid "Expected time" +msgstr "" + +#: src/testing/ci-tiers.md:96 +msgid "Enforced timebox" +msgstr "" + +#: src/testing/ci-tiers.md:98 +msgid "**Fast**" +msgstr "" + +#: src/testing/ci-tiers.md:98 +msgid "" +"PR-scoped crate unit tests (`--lib --bins`), plus the always-on FFI ABI unit " +"check" +msgstr "" + +#: src/testing/ci-tiers.md:98 +msgid "`<10 min` for the scoped Cargo loop" +msgstr "" + +#: src/testing/ci-tiers.md:98 +msgid "" +"`30 min` Cargo job cap; the PR gate targets `≤30 min` wall clock once queued." +msgstr "" + +#: src/testing/ci-tiers.md:99 +#, fuzzy +msgid "**Mid**" +msgstr "**Android**" + +#: src/testing/ci-tiers.md:99 +msgid "" +"Full workspace package tests on main sweeps, including Perry bin/unit tests; " +"Perry integration tests are left to the slow lane" +msgstr "" + +#: src/testing/ci-tiers.md:99 +msgid "" +"`<60 min` target; the prior full Cargo job measured `50–60 min` warm and `90–" +"103 min` cold before removing Perry's serial integration inventory" +msgstr "" + +#: src/testing/ci-tiers.md:99 +msgid "`120 min` Cargo job cap." +msgstr "" + +#: src/testing/ci-tiers.md:100 +msgid "**Slow**" +msgstr "" + +#: src/testing/ci-tiers.md:100 +msgid "" +"Complete Perry integration inventory on nightly, release tags, and opt-in " +"full runs; changed suites run through `e2e-scoped` on PRs" +msgstr "" + +#: src/testing/ci-tiers.md:100 +msgid "Eight round-robin shards" +msgstr "" + +#: src/testing/ci-tiers.md:100 +msgid "" +"`120 min` per shard. The separate scoped e2e job applies `25 min` subprocess " +"bounds where configured." +msgstr "" + +#: src/testing/ci-tiers.md:102 +msgid "" +"The hard caps are failure cutoffs, not performance goals. Although fast and " +"mid share the `cargo-test` job, its timeout comes from the planner tier: 30 " +"minutes for PR scope and 120 minutes for full workspace scope. A manual " +"`workflow_dispatch --tier pr` has full workspace scope without the sharded " +"slow lane, so it retains a 180-minute cap. The main sweep now runs Perry's " +"bin/unit target in the `cargo-test` job while the complete Perry integration " +"inventory stays in the nightly/release shards; this avoids repeating the " +"expensive serial integration loop on every merge without dropping it from " +"the full-suite gate. A run that approaches its cap should trigger a measured " +"build/test optimization, not a larger timeout. Keep `RUST_TEST_THREADS=1` " +"for `perry-runtime`: its tests share process-global GC, arena, timer, and " +"notification state. Keep `CARGO_BUILD_JOBS=1` for the runtime-linked test " +"binaries until runner memory measurements support increasing it. The sccache-" +"backed CI jobs set `CARGO_INCREMENTAL=0`, so sccache can reuse compiler " +"outputs. Mr Boxington-backed release jobs use mbx's default cache policy " +"instead; local `make build-dev` and `make build-prod` leave " +"`MBX_INCREMENTAL` unset so mbx can keep private incremental state for edited " +"crates while sharing unchanged compilations." +msgstr "" + +#: src/testing/ci-tiers.md:121 msgid "" "`e2e-scoped` runs integration suites selected by the diff, but its " "`SUITE_EXCLUSIONS` check is deliberately not scoped: whenever that list is " @@ -66587,7 +67040,7 @@ msgstr "" "hechas en HIR, transformar, u otra dependencia sin añadir la configuración " "Rust a PRs sólo docs." -#: src/testing/ci-tiers.md:64 +#: src/testing/ci-tiers.md:127 msgid "" "An empty or failed file listing is treated as **core** and a failed `plan` " "job fails the gate outright — a broken planner must never turn into " @@ -66597,11 +67050,11 @@ msgstr "" "fallido de `plan` falla en la puerta, un planificador roto nunca debe " "convertirse en \"todo salteado, por lo tanto verde\"." -#: src/testing/ci-tiers.md:68 +#: src/testing/ci-tiers.md:131 msgid "Why it looks like this (measured 2026-08-16)" msgstr "¿Por qué se ve así (medido 2026-08-16)" -#: src/testing/ci-tiers.md:70 +#: src/testing/ci-tiers.md:133 msgid "" "The organisation runs on GitHub's Free plan: **20 concurrent hosted jobs, 5 " "of them macOS**, for the whole org. Before this shape, every PR push fanned " @@ -66614,13 +67067,13 @@ msgstr "" "trabajos / ~650 segundos**, y `main` vio ~66 PR empuja y ~58 fusiona al día. " "Es decir, 1.5–2× capacidad total, así que:" -#: src/testing/ci-tiers.md:75 +#: src/testing/ci-tiers.md:138 msgid "job queue waits were 3–7 h (`conformance-smoke` shards: median 4 h);" msgstr "" "las esperas de la cola de trabajo fueron de 3-7 h (los fragmentos de " "`conformance-smoke`: mediana 4 h);" -#: src/testing/ci-tiers.md:76 +#: src/testing/ci-tiers.md:139 msgid "" "**0 of 66** PR runs of the `Tests` workflow reached a conclusion in the " "sample window — 8 failed, 56 were cancelled by the next push;" @@ -66629,7 +67082,7 @@ msgstr "" "una conclusión en la ventana de muestra: 8 fallaron, 56 fueron canceladas " "por el siguiente empujón;" -#: src/testing/ci-tiers.md:78 +#: src/testing/ci-tiers.md:141 msgid "" "the required contexts included two jobs (`parity`, `compile-smoke`) that " "never ran on a PR and one (`conformance-smoke-complete`) that had been red " @@ -66641,7 +67094,7 @@ msgstr "" "había sido rojo en `main` durante días, así que **cada una de las últimas 12 " "fusiones fue un bypass administrador** con `lint` y `cargo-test` en cola." -#: src/testing/ci-tiers.md:83 +#: src/testing/ci-tiers.md:146 msgid "" "The always-red required-gate incident was tracked in [\\#8092](https://" "github.com/PerryTS/perry/issues/8092). #8087 restored `lint`, \\#8095 made " @@ -66656,20 +67109,21 @@ msgstr "" "Linux, y #8187 reemplazó la fragmentada lista de contexto requerido con el " "solo ventilador `pr-gate` descrito anteriormente." -#: src/testing/ci-tiers.md:89 +#: src/testing/ci-tiers.md:152 msgid "Two specific costs dominated:" msgstr "Dos costes específicos predominaron:" -#: src/testing/ci-tiers.md:91 +#: src/testing/ci-tiers.md:154 +#, fuzzy msgid "" "`conformance-smoke` was 8 shards × ~60 min = **480 job-minutes per push**, " "and 96 % of each shard's test time was ~10 tests at ~200 s each — the auto-" "optimize path rebuilding a feature-stripped runtime per distinct feature " "set, redundantly in every shard. The harness's `PERRY_SKIP_BUILD=1` mode " "runs the same tests against one prebuilt release compiler at ~1.5 s each; " -"that is the `fast` gap mode the PR and sweep tiers use. The 8-shard auto-" -"optimize mode is kept in the full tier because it is the only arm that sees " -"auto-optimize-only link bugs." +"that is the `fast` gap mode the PR and sweep tiers use. The auto-optimize " +"mode is kept in the full tier because it is the only arm that sees auto-" +"optimize-only link bugs." msgstr "" "`conformance-smoke` fue 8 fragmentos × ~60 min = **480 minutos de trabajo " "por empuje**, y el 96 % del tiempo de prueba de cada fragmento fue ~10 " @@ -66682,7 +67136,7 @@ msgstr "" "automática de 8-shard se mantiene en el nivel completo porque es el único " "brazo que ve errores de enlace de sólo auto-optimizar." -#: src/testing/ci-tiers.md:98 +#: src/testing/ci-tiers.md:161 msgid "" "Every job saved a fresh ~0.5–1.3 GB sccache tarball on every PR push (~200 " "GB/day into a 10 GB repo cache budget), evicting every useful entry within " @@ -66697,7 +67151,7 @@ msgstr "" "línea principal; PRs restauran la nueva blob de línea principal. `cache-warm." "yml` se ha ido: el barrido es la compilación productora de caché en `main`." -#: src/testing/ci-tiers.md:104 +#: src/testing/ci-tiers.md:167 msgid "" "A later release run exposed a separate serial bottleneck: its 246 `perry` " "integration-test binaries had not reached their midpoint when `cargo-test` " @@ -66709,7 +67163,7 @@ msgid "" "result is a direct dependency of `full-suite-gate`." msgstr "" -#: src/testing/ci-tiers.md:112 +#: src/testing/ci-tiers.md:175 msgid "" "The **satellite gates** (`gc-ratchet`, `gc-root-dominance`, `gc-native-" "roots`, `gc-moving-witnesses`, `gc-parse-churn-gate`, `gc-ptr-shape-off-" @@ -66733,75 +67187,75 @@ msgstr "" "de cada uno — con cada trabajo omitido, que no cuesta ninguna ranura de " "corredor." -#: src/testing/ci-tiers.md:122 +#: src/testing/ci-tiers.md:185 msgid "Budgets" msgstr "Budgets" -#: src/testing/ci-tiers.md:124 +#: src/testing/ci-tiers.md:187 msgid "typical jobs" msgstr "trabajos típicos" -#: src/testing/ci-tiers.md:124 +#: src/testing/ci-tiers.md:187 msgid "typical runner-minutes" msgstr "Los típicos minutos de corredor" -#: src/testing/ci-tiers.md:124 +#: src/testing/ci-tiers.md:187 msgid "target wall clock" msgstr "reloj de pared objetivo" -#: src/testing/ci-tiers.md:126 +#: src/testing/ci-tiers.md:189 msgid "pr (core)" msgstr "pr (básico)" -#: src/testing/ci-tiers.md:126 +#: src/testing/ci-tiers.md:189 msgid "~13 (6 gap shards)" msgstr "~13 (6 fragmentos de espacio)" -#: src/testing/ci-tiers.md:126 +#: src/testing/ci-tiers.md:189 msgid "~200" msgstr "~200" -#: src/testing/ci-tiers.md:126 +#: src/testing/ci-tiers.md:189 msgid "≤ 30 min once queued" msgstr "≤ 30 min una vez en cola" -#: src/testing/ci-tiers.md:127 +#: src/testing/ci-tiers.md:190 msgid "pr (docs-only)" msgstr "pr (solo docs)" -#: src/testing/ci-tiers.md:127 +#: src/testing/ci-tiers.md:190 msgid "~5" msgstr "~5" -#: src/testing/ci-tiers.md:127 +#: src/testing/ci-tiers.md:190 msgid "≤ 5 min" msgstr "≤ 5 min" -#: src/testing/ci-tiers.md:128 +#: src/testing/ci-tiers.md:191 msgid "~19" msgstr "~19" -#: src/testing/ci-tiers.md:128 +#: src/testing/ci-tiers.md:191 msgid "~300" msgstr "~300" -#: src/testing/ci-tiers.md:128 +#: src/testing/ci-tiers.md:191 msgid "not a target — it coalesces" msgstr "no un objetivo — se funde" -#: src/testing/ci-tiers.md:129 +#: src/testing/ci-tiers.md:192 msgid "~30" msgstr "~30" -#: src/testing/ci-tiers.md:129 +#: src/testing/ci-tiers.md:192 msgid "~1500" msgstr "~1500" -#: src/testing/ci-tiers.md:129 +#: src/testing/ci-tiers.md:192 msgid "not a target" msgstr "no es un objetivo" -#: src/testing/ci-tiers.md:131 +#: src/testing/ci-tiers.md:194 msgid "" "`push` to `main` uses ONE constant concurrency group with `cancel-in-" "progress: false`: GitHub keeps at most one running + one pending run per " @@ -66832,11 +67286,11 @@ msgstr "" "de barrido es por ventana (`previous sweep SHA .. this sweep SHA`), " "exactamente como para las puertas de seis horas." -#: src/testing/ci-tiers.md:142 +#: src/testing/ci-tiers.md:205 msgid "Opting a PR into more" msgstr "Optar por una RRPP en más" -#: src/testing/ci-tiers.md:144 +#: src/testing/ci-tiers.md:207 msgid "" "**`run-cc-parity` label** — runs the [Claude Code bundle parity gate](cc-" "parity.md) on changes to crates, build inputs, or the gate. This " @@ -66845,7 +67299,7 @@ msgid "" "goldens on one macOS runner." msgstr "" -#: src/testing/ci-tiers.md:148 +#: src/testing/ci-tiers.md:211 msgid "" "**`run-extended-tests` label** — promotes the PR's `test.yml` run to the " "`full` tier AND enables the PR arm of every satellite gate. Use it for GC / " @@ -66859,7 +67313,7 @@ msgstr "" "para cualquier cosa que toque una suite de nivel completo. La aplicación de " "la etiqueta reinicia las ejecuciones (`labeled` trigger)." -#: src/testing/ci-tiers.md:152 +#: src/testing/ci-tiers.md:215 msgid "" "**`skip-changelog` label** — skips the changeset step in `lint` (a `crates/` " "change must otherwise add a `changelog.d/-.md` fragment)." @@ -66868,7 +67322,7 @@ msgstr "" "`lint` (un cambio de `crates/` debe añadir de otro modo un fragmento de " "`changelog.d/-.md`)." -#: src/testing/ci-tiers.md:154 +#: src/testing/ci-tiers.md:217 msgid "" "**`workflow_dispatch`** on any branch: `tier` (`pr` / `sweep` / `full`) and " "`update_gap_snapshot`." @@ -66876,11 +67330,11 @@ msgstr "" "**`workflow_dispatch`** en cualquier rama: `tier` (`pr` / `sweep` / `full`) " "y `update_gap_snapshot`." -#: src/testing/ci-tiers.md:157 +#: src/testing/ci-tiers.md:220 msgid "Re-baselining the gap snapshot" msgstr "Rebasado de la instantánea de la brecha" -#: src/testing/ci-tiers.md:159 +#: src/testing/ci-tiers.md:222 msgid "" "`test-parity/gap_snapshot.json` is a both-direction snapshot: any divergence " "— a test that started failing OR started passing — is red. When `main` has " @@ -66893,17 +67347,17 @@ msgstr "" "cambio de oráculo), regenerarlo **de CI**, no desde una computadora portátil " "(la línea de base requerida es Linux, modo `fast`):" -#: src/testing/ci-tiers.md:165 +#: src/testing/ci-tiers.md:228 #, fuzzy msgid "# wait for the run, then:\n" msgstr "# Espera a que corra, entonces:" -#: src/testing/ci-tiers.md:168 +#: src/testing/ci-tiers.md:231 #, fuzzy msgid "# fill in `issue` / `reason` for every new entry, then commit\n" msgstr "# llenar `issue` / `reason` para cada nueva entrada, a continuación," -#: src/testing/ci-tiers.md:172 +#: src/testing/ci-tiers.md:235 msgid "" "New entries land as `category: untriaged`; give each an issue and a reason " "before merging. A crash may never be parked in the snapshot (`run_gap_tests." @@ -66913,11 +67367,11 @@ msgstr "" "problema y una razón antes de fusionarse. Un accidente nunca se puede " "estacionar en la instantánea (`run_gap_tests.sh` se niega)." -#: src/testing/ci-tiers.md:175 +#: src/testing/ci-tiers.md:238 msgid "Branch protection" msgstr "Protección de las subdivisiones" -#: src/testing/ci-tiers.md:177 +#: src/testing/ci-tiers.md:240 msgid "" "Required status checks on `main`: **`pr-gate`** only. Adding, removing or " "renaming a job in `test.yml` never needs a branch-protection edit again; the " @@ -66934,11 +67388,11 @@ msgstr "" "su presupuesto; la propia ejecución de la puerta lleva si ese resultado pasó " "o falló." -#: src/testing/ci-tiers.md:183 +#: src/testing/ci-tiers.md:246 msgid "Release" msgstr "Release" -#: src/testing/ci-tiers.md:185 +#: src/testing/ci-tiers.md:248 msgid "" "`release-packages.yml`'s `await-tests` dispatches `test.yml` with " "`tier=full` on the pinned release branch and polls the SHA for a run whose " @@ -66950,7 +67404,7 @@ msgstr "" "suite-gate`** trabajo succeeded — un barrido verde o PR-tier ejecutar en el " "mismo SHA no cuenta. Véase [Releasing](../contributing/releasing.md)." -#: src/testing/ci-tiers.md:190 +#: src/testing/ci-tiers.md:253 msgid "" "`parity` runs as 8 shards (`run_parity_tests.sh --shard N/8`) after the " "unsharded job was killed by GitHub's 6-hour job cap on 2026-08-16. " @@ -66967,6 +67421,207 @@ msgstr "" "aggregate` sobre el informe fusionado (`scripts/parity_report_merge.py`, que " "rechaza un fragmento faltante en lugar de reducir la suite)." +#: src/testing/ci-tiers.md:261 +msgid "Workflow suite selection" +msgstr "" + +#: src/testing/ci-tiers.md:263 +msgid "" +"The **CI** Actions workflow defaults to `suite=core`, preserving the tiered " +"`pr-gate`, `main-gate`, and `full-suite-gate`. Select `suite=coverage`, " +"`suite=security-audit`, or another auxiliary ID to run that nested workflow " +"independently; `suite=all` adds all auxiliary workflows to core CI. The " +"`tier` selector continues to control core CI." +msgstr "" + +#: src/testing/ci-tiers.md:265 +msgid "" +"The Actions sidebar has six repository workflows. GitHub also registers four " +"independent entries for Dependabot Updates, Dependency Graph, Copilot, and " +"Pages, making ten entries once retired workflow history is cleaned up." +msgstr "" + +#: src/testing/ci-tiers.md:267 +#, fuzzy +msgid "Categories and suite selection" +msgstr "Categorías y puertas de migración" + +#: src/testing/ci-tiers.md:269 +msgid "**CI**" +msgstr "" + +#: src/testing/ci-tiers.md:269 +msgid "" +"Required core CI and auxiliary security/coverage checks; defaults to " +"`suite=core`" +msgstr "" + +#: src/testing/ci-tiers.md:270 +msgid "**Extended Tests** (`compiler-runtime.yml`)" +msgstr "" + +#: src/testing/ci-tiers.md:270 +msgid "" +"Compiler/runtime, compatibility, integration, and performance; choose a " +"category such as `suite=compatibility`, one suite such as `suite=simctl-" +"tests`, or `suite=all`" +msgstr "" + +#: src/testing/ci-tiers.md:271 +msgid "**GC**" +msgstr "" + +#: src/testing/ci-tiers.md:271 +msgid "Six collector suites; choose an individual suite or `suite=all`" +msgstr "" + +#: src/testing/ci-tiers.md:272 +msgid "**Repository** (`maintenance.yml`)" +msgstr "" + +#: src/testing/ci-tiers.md:272 +msgid "" +"Documentation and repository maintenance; defaults to offline " +"`suite=validate`; select `suite=docs-check` for docs checks or `suite=docs` " +"for deployment" +msgstr "" + +#: src/testing/ci-tiers.md:273 +msgid "**Publish to npm / GitHub Release**" +msgstr "" + +#: src/testing/ci-tiers.md:273 +msgid "Compiler packages, platform archives, and GitHub releases" +msgstr "" + +#: src/testing/ci-tiers.md:274 +#, fuzzy +msgid "**Publish to npm / @perryts/hono-server**" +msgstr "`@perryts/hono-server`" + +#: src/testing/ci-tiers.md:274 +msgid "Independent adapter package publication" +msgstr "" + +#: src/testing/ci-tiers.md:276 +msgid "" +"All 38 original suites remain represented. Schedules select their original " +"suites even when several categories share a parent. Category and `all` " +"dispatches use the original suite input defaults; individual suite " +"dispatches accept their custom inputs. Live maintenance tasks must be " +"selected explicitly and dispatched from `main`. Documentation deployment can " +"still be dispatched on a release tag. The release workflows retain their " +"filenames for npm trusted publisher authorization." +msgstr "" + +#: src/testing/ci-tiers.md:278 +msgid "" +"Job display names use lowercase. Nested suite jobs use the stable suite ID " +"as their prefix, for example `docs-check / build-and-validation` and `docs-" +"check / suite result`. Workflow category names retain their sidebar casing. " +"Keep suite prefixes stable: freshness checks, failure monitoring, and " +"release orchestration select jobs by these names. `scripts/" +"check_actions_topology.py` enforces lowercase labels and suite prefixes." +msgstr "" + +#: src/testing/ci-tiers.md:285 +msgid "" +"For example, `gh workflow run compiler-runtime.yml -f suite=performance` " +"runs the performance category; `gh workflow run compiler-runtime.yml -f " +"suite=benchmark` runs only the benchmark suite. Release orchestration " +"dispatches the simulator suite on the exact candidate SHA and checks its " +"actual job result, independently of other Extended Tests jobs." +msgstr "" + +#: src/testing/ci-tiers.md:287 +msgid "" +"After a consolidation lands, Repository automatically deletes completed runs " +"whose repository workflow file no longer exists. It allows queued/running " +"jobs to finish before deleting their history and leaves GitHub's dynamic " +"registrations alone. This removes retired entries from the sidebar as their " +"last runs are cleaned up." +msgstr "" + +#: src/testing/ci-tiers.md:289 +msgid "Required WASI command and component execution" +msgstr "" + +#: src/testing/ci-tiers.md:291 +msgid "" +"`wasi-execution` joins the core PR, sweep and full tiers. On Linux it builds " +"Perry with `target-wasi` and a matching wasm32-wasip2 runtime, checks the IR " +"ABI, then runs all six smoke cases, twenty acceptance cases and ten pinned-" +"Node comparisons. It then builds matching native component tools and " +"instrumented runtimes and runs both component harnesses: native hosting, " +"Perry-authored guests, resource lifetimes, forced moving GC and direct Rust/" +"Perry composition. The job has a 120-minute budget for the combined build " +"and execution. Per-case logs, component phase verdicts, source revision and " +"artifacts are retained. The required `pr-gate` rejects a skipped or missing " +"planned WASI job as well as failures and cancellation. Docs-only PRs skip " +"this build. The wider Windows/macOS matrix remains in the extended suite. " +"Native component execution is currently qualified on Linux." +msgstr "" + +#: src/testing/tak-performance.md:1 +#, fuzzy +msgid "Perry CLI performance reports" +msgstr "Notas de rendimiento" + +#: src/testing/tak-performance.md:3 +msgid "" +"The scheduled and release-triggered `tak Performance Report` workflow " +"measures four local Perry commands: startup/version, help output, a full " +"compile of the JSON parsing app-pattern kernel, and the compiler's `check` " +"path on a second app-pattern kernel. The workloads are declared in [`tak." +"toml`](../../../tak.toml). They read only checked-in sources and do not " +"access the network." +msgstr "" + +#: src/testing/tak-performance.md:9 +msgid "" +"The workflow runs on Ubuntu 24.04 with tak 0.0.14 and the pinned Valgrind " +"package from `external-tools.json`. Cargo sources, Perry build outputs, and " +"the pinned tak binary are cached in CI. The full measurement-series class, " +"including these tool versions and the Rust toolchain, is recorded in `tak." +"toml`. It attaches the measurement summary to the Actions run and uploads " +"JSON plus text output as an artifact. A separate trusted job publishes the " +"exact-SHA measurement into Git notes under `refs/notes/tak`; the build and " +"measurement job itself has no write permission. The run also renders recent " +"measurements and `tak detect`'s instruction-count steps, which name the " +"commit where each step appeared. This starts a history; the first " +"measurement on a runner has nothing to compare against." +msgstr "" + +#: src/testing/tak-performance.md:20 +msgid "" +"The workflow is report-only and does not gate pull requests. Wall-clock " +"samples are informational. tak's instruction counts may be considered for a " +"gate after reviewing a stable history on the same runner class. The class is " +"pinned in `tak.toml` so a toolchain change starts a separate comparison " +"series." +msgstr "" + +#: src/testing/tak-performance.md:25 +msgid "To inspect the configured workloads locally, install tak and run:" +msgstr "" + +#: src/testing/tak-performance.md:32 +msgid "" +"Run and record measurements with `tak run --no-progress --record`. See " +"history with `tak log --limit 10`, or identify instruction-count steps with " +"`tak detect --no-gate`. Instruction counts require Linux and Valgrind; Apple " +"Silicon macOS can report timings only." +msgstr "" + +#: src/testing/tak-performance.md:38 +msgid "" +"This report complements the [app-pattern benchmarks](../../../benchmarks/app-" +"patterns/README.md), which compare generated-program runtime against Bun and " +"Node with checksummed outputs. It is separate from the published [Node/Bun " +"performance baseline](../../../benchmarks/results/public-node-bun-v1.json) " +"and `benchmark.yml`'s release regression gate." +msgstr "" + #: src/testing/cc-parity.md:1 msgid "Claude Code bundle parity" msgstr "" @@ -67023,12 +67678,12 @@ msgstr "Lo que envía un cheque" msgid "" "`tests/cc-parity/manifest.json` pins the npm tarball and extracted `package/" "cli.js` by both size and SHA-256. Only that regular file is extracted; no " -"package install hooks run. The compiler is built first, then the runtime, " -"stdlib, Wasm host, and all native extension archives are built together with " -"`perry-runtime/wasm-host`. This avoids stale runtime copies in extension " -"archives (#6303). Compilation uses `--no-auto-optimize --no-cache --enable-" -"wasm-runtime`, with four LLVM workers (`PERRY_CODEGEN_UNIT_JOBS=4`) to use " -"the Intel runner's four cores within its memory budget." +"package install hooks run. The compiler, runtime, stdlib, Wasm host, and all " +"native extension archives are built together in one Cargo graph. This avoids " +"stale runtime copies in extension archives (#6303). Compilation uses `--no-" +"auto-optimize --no-cache --enable-wasm-runtime`, with four LLVM workers " +"(`PERRY_CODEGEN_UNIT_JOBS=4`) to use the Intel runner's four cores within " +"its memory budget." msgstr "" #: src/testing/cc-parity.md:42 @@ -67326,8 +67981,8 @@ msgid "" "The `github.sha` arm is guarded on `github.event_name == 'push'`. #7856 — " "the change this very document describes — moved the main-line arm from " "`push: branches: [main]` to `schedule:`. The guard stopped matching, the " -"expression fell through to `github.ref` (constant `refs/heads/main`), and **" -"\\#7205 came straight back on the arm \\#7856 created.** Measured " +"expression fell through to `github.ref` (constant `refs/heads/main`), and " +"**\\#7205 came straight back on the arm \\#7856 created.** Measured " "2026-08-12, identically on all ten gates: oldest run `queued` holding the " "group, the next two `cancelled` with `jobs: 0`, newest `pending`. `gate-" "freshness` itself was cancelled the same way." @@ -67335,8 +67990,8 @@ msgstr "" "El brazo `github.sha` está vigilado en `github.event_name == 'push'`. #7856 —" "el cambio que describe este mismo documento— movió el brazo principal de " "`push: branches: [main]` a `schedule:`. El guardia dejó de coincidir, la " -"expresión cayó a través de `github.ref` (constante `refs/heads/main`), y **" -"\\#7205 volvió directamente al brazo creado por \\#7856.** Medido " +"expresión cayó a través de `github.ref` (constante `refs/heads/main`), y " +"**\\#7205 volvió directamente al brazo creado por \\#7856.** Medido " "2026-08-12, idénticamente en las diez puertas: la ejecución más antigua " "`queued` sosteniendo el grupo, las dos siguientes `cancelled` con `jobs: 0`, " "la más reciente `pending`. `gate-freshness` en sí mismo fue cancelado de la " @@ -67359,16 +68014,16 @@ msgstr "" #: src/testing/ci-gate-scheduling.md:85 msgid "" -"**The lesson is about the sentence, not the YAML.** \"Do not fix this again" -"\" is a claim about the future, and a scheduling change three days later " -"invalidated it. A repaired invariant should be written down as an " +"**The lesson is about the sentence, not the YAML.** \"Do not fix this " +"again\" is a claim about the future, and a scheduling change three days " +"later invalidated it. A repaired invariant should be written down as an " "_executable check_, not as an instruction to the next human to stop looking." msgstr "" -"**La lección es sobre la frase, no sobre el YAML.** \"No lo arregles otra vez" -"\" es una afirmación sobre el futuro, y un cambio de programación tres días " -"después lo invalida. Un invariante reparado debe ser escrito como un check_ " -"_ejecutable, no como una instrucción para el próximo humano para dejar de " -"mirar." +"**La lección es sobre la frase, no sobre el YAML.** \"No lo arregles otra " +"vez\" es una afirmación sobre el futuro, y un cambio de programación tres " +"días después lo invalida. Un invariante reparado debe ser escrito como un " +"check_ _ejecutable, no como una instrucción para el próximo humano para " +"dejar de mirar." #: src/testing/ci-gate-scheduling.md:90 msgid "" @@ -67899,8 +68554,8 @@ msgid "**branches that still existed**" msgstr "**ramas que aún existían**" #: src/testing/ci-gate-scheduling.md:253 -#: src/internals/gc-rooting-invariant.md:331 -#: src/internals/gc-rooting-invariant.md:332 +#: src/internals/gc-rooting-invariant.md:358 +#: src/internals/gc-rooting-invariant.md:359 msgid "**2**" msgstr "**2**" @@ -67959,8 +68614,8 @@ msgstr "" #: src/testing/ci-gate-scheduling.md:275 msgid "" -"Why \"the gate was dark\" is not the same as \"the gate would have caught it" -"\"" +"Why \"the gate was dark\" is not the same as \"the gate would have caught " +"it\"" msgstr "" "¿Por qué \"la puerta estaba oscura\" no es lo mismo que \"la puerta lo " "habría atrapado\"" @@ -67992,8 +68647,8 @@ msgstr "" #: src/testing/ci-gate-scheduling.md:285 msgid "" -"The two dimensions that did move — wall time and RSS — are explicitly `" -"\"gating\": false` in the `shared_ci` profile CI runs, with the rationale " +"The two dimensions that did move — wall time and RSS — are explicitly " +"`\"gating\": false` in the `shared_ci` profile CI runs, with the rationale " "recorded in `tolerances.json`. They gate only under `pinned_host`, which CI " "never uses." msgstr "" @@ -68023,6 +68678,41 @@ msgstr "" "un salpicadero de frescura que es completamente verde todavía no lo habría " "atrapado." +#: src/testing/ci-gate-scheduling.md:297 +#, fuzzy +msgid "GitHub Actions category runs" +msgstr "# Ejemplo de acciones GitHub" + +#: src/testing/ci-gate-scheduling.md:299 +msgid "" +"The Actions sidebar is organized around these entrypoints: `CI`, `GC`, " +"`Compiler and Runtime`, `Compatibility`, `Integration`, `Performance`, " +"`Documentation`, `Publish to npm / GitHub Release`, `Publish to npm / Hono " +"Server`, and `Maintenance`. Category runs expose each selected workflow as a " +"nested job. Their schedules remain staggered and unchanged; the router " +"selects only the suite that owns the fired cron." +msgstr "" + +#: src/testing/ci-gate-scheduling.md:301 +msgid "" +"Use the **Run workflow** suite selector for focused manual runs. For " +"example, choose `suite=gc-root-dominance` on **GC**, `suite=node-core-" +"subset` on **Compatibility**, or `suite=simctl-tests` on **Integration**. " +"Choose `suite=all` only when the full category is intended. CI defaults to " +"`suite=core`; select an auxiliary suite such as `coverage` or `security-" +"audit` to run it without the protected core gate. Maintenance defaults to " +"offline validation; choose a live maintenance suite only when its effects " +"are intended." +msgstr "" + +#: src/testing/ci-gate-scheduling.md:303 +msgid "" +"Release automation continues to dispatch the full CI tier and waits for the " +"selected nested simulator job in the Integration run. The parent run may " +"contain unrelated skipped or failed siblings; release gating follows the " +"required subject job." +msgstr "" + #: src/testing/linux-incident-capture.md:1 msgid "Capturing a Linux server hang or memory slope" msgstr "" @@ -68209,7 +68899,7 @@ msgstr "`run`" msgid "Compile and run in one step." msgstr "Recopila y corre en un paso." -#: src/cli/commands.md:22 +#: src/cli/commands.md:22 src/contributing/building.md:56 msgid "`dev`" msgstr "`dev`" @@ -68321,7 +69011,7 @@ msgstr "# O taquigrafía (detecta automáticamente la compilación):" #: src/cli/commands.md:216 src/cli/commands.md:230 src/cli/commands.md:283 #: src/cli/commands.md:295 src/cli/flags.md:80 src/cli/flags.md:143 #: src/cli/flags.md:191 src/cli/flags.md:291 src/cli/flags.md:379 -#: src/cli/flags.md:410 src/cli/flags.md:417 +#: src/cli/flags.md:412 src/cli/flags.md:419 msgid "Flag" msgstr "Flag" @@ -68378,7 +69068,7 @@ msgstr "`--keep-intermediates`" msgid "Keep `.o` and `.asm` files" msgstr "Conserva los archivos `.o` y `.asm`" -#: src/cli/commands.md:56 src/cli/commands.md:103 src/cli/flags.md:419 +#: src/cli/commands.md:56 src/cli/commands.md:103 src/cli/flags.md:421 msgid "`--enable-js-runtime`" msgstr "`--enable-js-runtime`" @@ -68386,7 +69076,7 @@ msgstr "`--enable-js-runtime`" msgid "Enable V8 JavaScript runtime fallback" msgstr "Habilita el fallback al runtime JavaScript de V8" -#: src/cli/commands.md:57 src/cli/commands.md:104 src/cli/flags.md:420 +#: src/cli/commands.md:57 src/cli/commands.md:104 src/cli/flags.md:422 msgid "`--enable-wasm-runtime`" msgstr "`--enable-wasm-runtime`" @@ -68399,7 +69089,7 @@ msgstr "" "automáticamente con el uso de `WebAssembly.*`)" #: src/cli/commands.md:58 src/cli/commands.md:105 src/cli/flags.md:150 -#: src/cli/flags.md:421 +#: src/cli/flags.md:423 msgid "`--type-check`" msgstr "`--type-check`" @@ -68708,8 +69398,8 @@ msgstr "" #: src/cli/commands.md:152 msgid "" "Watches the project root (plus any `--watch` dirs) recursively using the " -"`notify` crate. A 300 ms **debounce** window collapses editor \"save storms" -"\" into one rebuild." +"`notify` crate. A 300 ms **debounce** window collapses editor \"save " +"storms\" into one rebuild." msgstr "" "Observa la raíz del proyecto (más cualquier directorio `--watch`) de forma " "recursiva usando el crate `notify`. Una ventana de **debounce** de 300 ms " @@ -68804,7 +69494,7 @@ msgstr "" "Preservación de estado entre recompilaciones / HMR — \"reinicio rápido\" es " "el objetivo honesto." -#: src/cli/commands.md:175 src/internals/garbage-collector.md:366 +#: src/cli/commands.md:175 src/internals/garbage-collector.md:448 msgid "check" msgstr "check" @@ -69272,7 +69962,7 @@ msgid "`--mode` writes `[update] mode` to `~/.perry/config.toml`:" msgstr "`--mode` escribe `[update] mode` a `~/.perry/config.toml`:" #: src/cli/commands.md:339 src/cli/updates.md:47 -#: src/internals/gc-rooting-invariant.md:327 +#: src/internals/gc-rooting-invariant.md:354 msgid "mode" msgstr "mode" @@ -70274,8 +70964,8 @@ msgstr "" #: src/cli/flags.md:205 msgid "" "```typescript,no-test\n" -"import { embeddedFiles, readEmbedded, isStandaloneExecutable } from \"perry" -"\";\n" +"import { embeddedFiles, readEmbedded, isStandaloneExecutable } from " +"\"perry\";\n" "import { readFileSync } from \"fs\";\n" "\n" "for (const f of embeddedFiles()) {\n" @@ -70289,8 +70979,8 @@ msgid "" "```" msgstr "" "```typescript,no-test\n" -"import { embeddedFiles, readEmbedded, isStandaloneExecutable } from \"perry" -"\";\n" +"import { embeddedFiles, readEmbedded, isStandaloneExecutable } from " +"\"perry\";\n" "import { readFileSync } from \"fs\";\n" "\n" "for (const f of embeddedFiles()) {\n" @@ -70513,10 +71203,10 @@ msgstr "`--debug-symbols`" #: src/cli/flags.md:299 msgid "" "Retain symbols/DWARF (and emit a Windows PDB) instead of stripping the " -"result." +"result, and emit a DWARF **line table** mapping machine code back to your `." +"ts` lines so debuggers can set breakpoints. See [Source-level debugging]" +"(debugging.md)." msgstr "" -"Retener symbols/DWARF (y emitir un Windows PDB) en lugar de eliminar el " -"resultado." #: src/cli/flags.md:300 msgid "`--function-source `" @@ -70605,11 +71295,10 @@ msgstr "`--statepoint-report[=json]`" #: src/cli/flags.md:307 msgid "" -"Report native-stack GC root pressure: calls with live roots, audited " -"non-collecting calls omitted, relocations, plain-map fallbacks, and " -"live-root widths. Research-only; reports the mandatory native " -"statepoint backend (the plain stack-map and explicit-bridge modes it " -"also named are gone)" +"Report native-stack GC root pressure: calls with live roots, audited non-" +"collecting calls omitted, relocations, plain-map fallbacks, and live-root " +"widths. Research-only; reports the mandatory native statepoint backend (the " +"plain stack-map and explicit-bridge modes it also named are gone)" msgstr "" #: src/cli/flags.md:309 @@ -70621,10 +71310,10 @@ msgid "" "llvm` forces a full recompile (the object cache otherwise skips codegen for " "unchanged modules, leaving the trace dir empty)." msgstr "" -"El par `--trace`/`--focus` localiza los errores de \"compiló algo incorrecto" -"\": `perry compile foo.ts --trace hir,llvm --focus parseRow` vuelca " -"únicamente el HIR generado de la función `parseRow` y el IR de LLVM del " -"módulo, para que puedas ver en qué etapa se corrompió sin necesidad de " +"El par `--trace`/`--focus` localiza los errores de \"compiló algo " +"incorrecto\": `perry compile foo.ts --trace hir,llvm --focus parseRow` " +"vuelca únicamente el HIR generado de la función `parseRow` y el IR de LLVM " +"del módulo, para que puedas ver en qué etapa se corrompió sin necesidad de " "recorrer un volcado del módulo completo. `--trace llvm` fuerza una " "recompilación completa (la caché de objetos de lo contrario omite la " "generación de código para módulos sin cambios, dejando el directorio de " @@ -70815,7 +71504,29 @@ msgstr "" "Control fusionado multi-añadir la contracción por separado de la " "reasignación." +#: src/cli/flags.md:387 +msgid "`--record-function-order`" +msgstr "" + +#: src/cli/flags.md:387 +msgid "" +"Build a binary that appends each compiled function's name to " +"`$PERRY_FUNCTION_ORDER_OUT` the first time it runs; see [Function Order]" +"(function-order.md)." +msgstr "" + #: src/cli/flags.md:388 +msgid "`--function-order `" +msgstr "" + +#: src/cli/flags.md:388 +msgid "" +"Place the functions a recording listed first and together, in list order, so " +"startup code shares pages; unknown names are ignored. See [Function Order]" +"(function-order.md)." +msgstr "" + +#: src/cli/flags.md:390 msgid "" "Minification strips comments, collapses whitespace, and mangles local " "variable/parameter/non-exported function names for smaller output." @@ -70824,11 +71535,11 @@ msgstr "" "nombres de variables locales, parámetros y funciones no exportadas para " "obtener una salida más pequeña." -#: src/cli/flags.md:390 +#: src/cli/flags.md:392 msgid "Size-optimized builds" msgstr "Estructuras optimizadas para el tamaño" -#: src/cli/flags.md:392 +#: src/cli/flags.md:394 msgid "" "For the smallest possible native binaries, two opt-in environment variables " "rebuild the auto-optimized runtime/stdlib archives tuned for size instead of " @@ -70841,11 +71552,11 @@ msgstr "" "(requieren una compra de espacio de trabajo Perry, como el resto de auto-" "optimizar):" -#: src/cli/flags.md:399 +#: src/cli/flags.md:401 msgid "`PERRY_SIZE_OPT=z` (or `s`)" msgstr "`PERRY_SIZE_OPT=z` (or `s`)" -#: src/cli/flags.md:399 +#: src/cli/flags.md:401 msgid "" "Rebuild the runtime/stdlib at `-C opt-level=z`/`s` instead of `3`. Roughly " "halves a small program's binary at some runtime-speed cost (compute-heavy " @@ -70858,11 +71569,11 @@ msgstr "" "pueden correr ~2-3× más lento). Los archivos normales y optimizados en " "tamaño se guardan en caché de forma independiente." -#: src/cli/flags.md:400 +#: src/cli/flags.md:402 msgid "`PERRY_SIZE_LTO=fat`" msgstr "`PERRY_SIZE_LTO=fat`" -#: src/cli/flags.md:400 +#: src/cli/flags.md:402 msgid "" "Additionally run whole-archive fat LTO over the rebuilt archives (slower " "rebuild, smaller binary). Only meaningful together with `PERRY_SIZE_OPT`." @@ -70871,11 +71582,11 @@ msgstr "" "reconstruidos (reconstrucción lenta, binario más pequeño). Sólo significante " "junto con `PERRY_SIZE_OPT`." -#: src/cli/flags.md:401 +#: src/cli/flags.md:403 msgid "`PERRY_SIZE_PANIC=abort-immediate`" msgstr "`PERRY_SIZE_PANIC=abort-immediate`" -#: src/cli/flags.md:401 +#: src/cli/flags.md:403 msgid "" "Additionally rebuild the Rust standard library with the `immediate-abort` " "panic strategy when auto-optimize proves that no UI/thread/plugin callback " @@ -70894,7 +71605,7 @@ msgstr "" "luego se aborta sin una retrotraza simbolizada — JS `throw`/`catch`, " "`finally`, las pilas de error y `uncaughtException` no se ven afectadas." -#: src/cli/flags.md:403 +#: src/cli/flags.md:405 msgid "" "A `console.log` hello world on macOS arm64: 4.03 MB default → 2.17 MB with " "`PERRY_SIZE_OPT=z PERRY_SIZE_LTO=fat` → 1.87 MB adding " @@ -70906,15 +71617,15 @@ msgstr "" "`PERRY_SIZE_PANIC=abort-immediate`. Los programas que usan más tiempo de " "ejecución se reducen menos, proporcionalmente." -#: src/cli/flags.md:408 +#: src/cli/flags.md:410 msgid "Testing Flags" msgstr "Flags de pruebas" -#: src/cli/flags.md:412 +#: src/cli/flags.md:414 msgid "`--enable-geisterhand`" msgstr "`--enable-geisterhand`" -#: src/cli/flags.md:412 +#: src/cli/flags.md:414 msgid "" "Embed the [Geisterhand](../testing/geisterhand.md) HTTP server for " "programmatic UI testing (default port 7676)" @@ -70922,26 +71633,26 @@ msgstr "" "Incrustar el servidor HTTP [Geisterhand](../testing/geisterhand.md) para " "pruebas de UI programáticas (puerto predeterminado 7676)" -#: src/cli/flags.md:413 +#: src/cli/flags.md:415 msgid "`--geisterhand-port `" msgstr "`--geisterhand-port `" -#: src/cli/flags.md:413 +#: src/cli/flags.md:415 msgid "" "Set a custom port for the Geisterhand server (implies `--enable-geisterhand`)" msgstr "" "Establecer un puerto personalizado para el servidor Geisterhand (implica `--" "enable-geisterhand`)" -#: src/cli/flags.md:415 +#: src/cli/flags.md:417 msgid "Runtime Flags" msgstr "Flags de runtime" -#: src/cli/flags.md:419 +#: src/cli/flags.md:421 msgid "Enable V8 JavaScript runtime for unsupported npm packages" msgstr "Habilitar el runtime de JavaScript V8 para paquetes npm no compatibles" -#: src/cli/flags.md:420 +#: src/cli/flags.md:422 msgid "" "Force-link the wasmi WebAssembly host runtime (auto-detected when " "`WebAssembly.*` is referenced; needed only when loading via dlopen / FFI " @@ -70951,15 +71662,15 @@ msgstr "" "cuando se referencia `WebAssembly.*`; solo es necesario cuando se carga " "mediante dlopen / FFI sin una referencia estática)" -#: src/cli/flags.md:421 +#: src/cli/flags.md:423 msgid "Enable type checking via tsgo IPC" msgstr "Habilitar la verificación de tipos mediante IPC de tsgo" -#: src/cli/flags.md:422 +#: src/cli/flags.md:424 msgid "`--strict-eval`" msgstr "`--strict-eval`" -#: src/cli/flags.md:422 +#: src/cli/flags.md:424 msgid "" "Fail the build if any runtime-unknown `eval(...)` / `new Function()` site is reachable. By default such a site is compiled to a deferred " @@ -70976,11 +71687,11 @@ msgstr "" "(package.json o perry.toml). `PERRY_ALLOW_EVAL=1` lo obliga a retirarse. " "Véase [Limitations](../language/limitations.md#no-eval-or-dynamic-code)." -#: src/cli/flags.md:423 +#: src/cli/flags.md:425 msgid "`--strict-dynamic-import`" msgstr "`--strict-dynamic-import`" -#: src/cli/flags.md:423 +#: src/cli/flags.md:425 msgid "" "Fail the build if a dynamic `import(...)` has a runtime-computed (non-" "resolvable) specifier. By default such a site is compiled to a rejected " @@ -71004,11 +71715,11 @@ msgstr "" "afectadas. Véase [Limitations](../language/limitations.md#no-eval-or-dynamic-" "code)." -#: src/cli/flags.md:424 +#: src/cli/flags.md:426 msgid "`--strict-unimplemented`" msgstr "`--strict-unimplemented`" -#: src/cli/flags.md:424 +#: src/cli/flags.md:426 msgid "" "Fail at compile time when a recognized but unimplemented Node/stdlib API is " "referenced instead of emitting a deferred runtime error." @@ -71017,23 +71728,23 @@ msgstr "" "stdlib reconocida pero no implementada en lugar de emitir un error de tiempo " "de ejecución diferido." -#: src/cli/flags.md:425 +#: src/cli/flags.md:427 msgid "`--emit-attest`" msgstr "`--emit-attest`" -#: src/cli/flags.md:425 +#: src/cli/flags.md:427 msgid "Emit `.attest.json`; see [Binary attestation](emit-attest.md)." msgstr "" "Emite `.attest.json`; véase [Declaración binaria](emit-attest.md)." -#: src/cli/flags.md:426 +#: src/cli/flags.md:428 msgid "" "Emit the platform sandbox sidecar; see [Sandbox profiles](emit-sandbox.md)." msgstr "" "Emite el sidecar de la plataforma Sandbox; véase [Perfiles de caja de arena]" "(emit-sandbox.md)." -#: src/cli/flags.md:427 +#: src/cli/flags.md:429 msgid "" "Refuse reachable arbitrary-code-execution surfaces; see [Lockdown](lockdown." "md)." @@ -71041,31 +71752,41 @@ msgstr "" "Rechazar superficies de ejecución de código arbitrario accesibles; véase " "[Lockdown](lockdown.md)." -#: src/cli/flags.md:429 src/cli/perry-toml.md:512 +#: src/cli/flags.md:431 +msgid "" +"`--type-check` requires a project `tsconfig.json` and the verified preview " +"build: install with `npm install --save-dev @typescript/native-preview@7.0.0-" +"dev.20260612.1`. It reports configuration, syntax, and type errors and stops " +"compilation on errors. If tsgo is missing or has an unsupported version, " +"Perry warns and continues without checking. The preview API has no version " +"handshake, so other builds are explicitly refused before IPC." +msgstr "" + +#: src/cli/flags.md:433 src/cli/perry-toml.md:512 msgid "Environment Variables" msgstr "Variables de entorno" -#: src/cli/flags.md:433 src/cli/perry-toml.md:520 +#: src/cli/flags.md:437 src/cli/perry-toml.md:520 msgid "`PERRY_LICENSE_KEY`" msgstr "`PERRY_LICENSE_KEY`" -#: src/cli/flags.md:433 +#: src/cli/flags.md:437 msgid "Perry Hub license key for `perry publish`" msgstr "Clave de licencia de Perry Hub para `perry publish`" -#: src/cli/flags.md:434 src/cli/perry-toml.md:522 +#: src/cli/flags.md:438 src/cli/perry-toml.md:522 msgid "`PERRY_APPLE_CERTIFICATE_PASSWORD`" msgstr "`PERRY_APPLE_CERTIFICATE_PASSWORD`" -#: src/cli/flags.md:434 +#: src/cli/flags.md:438 msgid "Password for .p12 certificate" msgstr "Contraseña para el certificado .p12" -#: src/cli/flags.md:435 +#: src/cli/flags.md:439 msgid "`PERRY_TARGET_CPU`" msgstr "`PERRY_TARGET_CPU`" -#: src/cli/flags.md:435 +#: src/cli/flags.md:439 msgid "" "CPU baseline for generated machine code (same values as `--march`; the flag " "and perry.toml `[build] march` win over the env var)" @@ -71074,62 +71795,62 @@ msgstr "" "valores que `--march`; el indicador y perry.toml `[build] march` ganan sobre " "el var env)" -#: src/cli/flags.md:436 src/cli/updates.md:146 +#: src/cli/flags.md:440 src/cli/updates.md:146 msgid "`PERRY_NO_UPDATE_CHECK=1`" msgstr "`PERRY_NO_UPDATE_CHECK=1`" -#: src/cli/flags.md:436 +#: src/cli/flags.md:440 msgid "Disable automatic update checks" msgstr "Deshabilitar las comprobaciones automáticas de actualizaciones" -#: src/cli/flags.md:437 src/cli/updates.md:147 +#: src/cli/flags.md:441 src/cli/updates.md:147 msgid "`NO_UPDATE_NOTIFIER`" msgstr "`NO_UPDATE_NOTIFIER`" -#: src/cli/flags.md:437 +#: src/cli/flags.md:441 msgid "The same, using the ecosystem-wide spelling" msgstr "Lo mismo, usando la ortografía de todo el ecosistema" -#: src/cli/flags.md:438 src/cli/updates.md:148 +#: src/cli/flags.md:442 src/cli/updates.md:148 msgid "`PERRY_UPDATE_MODE`" msgstr "`PERRY_UPDATE_MODE`" -#: src/cli/flags.md:438 +#: src/cli/flags.md:442 msgid "`off`/`notify`/`prompt`/`auto` for one run — see [Updates](updates.md)" msgstr "" "`off`/`notify`/`prompt`/`auto` para una carrera — véase [Updates](updates.md)" -#: src/cli/flags.md:439 src/cli/updates.md:149 +#: src/cli/flags.md:443 src/cli/updates.md:149 msgid "`PERRY_UPDATE_SERVER`" msgstr "`PERRY_UPDATE_SERVER`" -#: src/cli/flags.md:439 +#: src/cli/flags.md:443 msgid "Custom update server URL" msgstr "URL de servidor de actualizaciones personalizado" -#: src/cli/flags.md:440 +#: src/cli/flags.md:444 msgid "`CI=true`" msgstr "`CI=true`" -#: src/cli/flags.md:440 +#: src/cli/flags.md:444 msgid "Auto-skip update checks (set by most CI systems)" msgstr "" "Omitir automáticamente las comprobaciones de actualizaciones (establecido " "por la mayoría de los sistemas CI)" -#: src/cli/flags.md:441 +#: src/cli/flags.md:445 msgid "`RUST_LOG`" msgstr "`RUST_LOG`" -#: src/cli/flags.md:441 +#: src/cli/flags.md:445 msgid "Debug logging level (`debug`, `info`, `trace`)" msgstr "Nivel de registro de depuración (`debug`, `info`, `trace`)" -#: src/cli/flags.md:442 +#: src/cli/flags.md:446 msgid "`PERRY_OPT_REPORT`" msgstr "`PERRY_OPT_REPORT`" -#: src/cli/flags.md:442 +#: src/cli/flags.md:446 msgid "" "`1`/`text` or `json` — same as `--opt-report[=json]`, for driving the report " "from an environment where adding a flag is awkward" @@ -71137,7 +71858,7 @@ msgstr "" "`1`/`text` o `json` — lo mismo que `--opt-report[=json]`, para conducir el " "informe desde un entorno donde añadir un indicador es incómodo" -#: src/cli/flags.md:444 +#: src/cli/flags.md:448 msgid "" "The native-stack GC root-pressure report has **no** environment spelling: " "use `--statepoint-report[=json]`. The `PERRY_STATEPOINT_REPORT` variable is " @@ -71152,15 +71873,15 @@ msgstr "" "usuario — era un quinto botón de env GC sin brazo CI, y fue eliminado bajo " "la política de matar del pomo GC de CLAUDE.md." -#: src/cli/flags.md:450 +#: src/cli/flags.md:454 msgid "Configuration Files" msgstr "Archivos de configuración" -#: src/cli/flags.md:452 +#: src/cli/flags.md:456 msgid "perry.toml (project)" msgstr "perry.toml (proyecto)" -#: src/cli/flags.md:454 +#: src/cli/flags.md:458 msgid "" "```toml\n" "[project]\n" @@ -71240,11 +71961,11 @@ msgstr "" "category = \"Development\"\n" "```" -#: src/cli/flags.md:492 +#: src/cli/flags.md:496 msgid "~/.perry/config.toml (global)" msgstr "~/.perry/config.toml (global)" -#: src/cli/flags.md:494 +#: src/cli/flags.md:498 msgid "" "```toml\n" "[apple]\n" @@ -71266,76 +71987,76 @@ msgstr "" "key_alias = \"my-key\"\n" "```" -#: src/cli/flags.md:507 +#: src/cli/flags.md:511 #, fuzzy msgid "# Simple CLI program\n" msgstr "# Programa CLI simple" -#: src/cli/flags.md:509 +#: src/cli/flags.md:513 #, fuzzy msgid "# iOS app for simulator\n" msgstr "# iOS aplicación para simulador" -#: src/cli/flags.md:512 +#: src/cli/flags.md:516 #, fuzzy msgid "# visionOS app for simulator\n" msgstr "# visionOS aplicación para simulador" -#: src/cli/flags.md:515 +#: src/cli/flags.md:519 #, fuzzy msgid "# Web app (WASM with DOM bridge — alias: --target wasm)\n" msgstr "# Aplicación web (WASM con puente DOM — alias: --target wasm)" -#: src/cli/flags.md:518 +#: src/cli/flags.md:522 #, fuzzy msgid "# Plugin shared library\n" msgstr "# Librería compartida de complementos" -#: src/cli/flags.md:521 +#: src/cli/flags.md:525 #, fuzzy msgid "# iOS widget with bundle ID\n" msgstr "# iOS widget con ID de paquete" -#: src/cli/flags.md:524 +#: src/cli/flags.md:528 #, fuzzy msgid "# Debug compilation\n" msgstr "# Compilación de depuración" -#: src/cli/flags.md:527 +#: src/cli/flags.md:531 #, fuzzy msgid "# Verbose compilation\n" msgstr "# Compilación de verbos" -#: src/cli/flags.md:530 +#: src/cli/flags.md:534 #, fuzzy msgid "# Type-checked compilation\n" msgstr "# Compilación verificada por el tipo" -#: src/cli/flags.md:533 +#: src/cli/flags.md:537 #, fuzzy msgid "# Raw WASM binary (no HTML wrapper)\n" msgstr "# Raw WASM binario (sin envoltorio HTML)" -#: src/cli/flags.md:536 +#: src/cli/flags.md:540 #, fuzzy msgid "# Minified web output (compresses embedded JS bridge)\n" msgstr "# Salida web minimizada (comprime el puente JS integrado)" -#: src/cli/flags.md:543 +#: src/cli/flags.md:547 msgid "[Commands](commands.md) — All CLI commands" msgstr "[Comandos](commands.md) — Todos los comandos de la CLI" -#: src/cli/flags.md:544 +#: src/cli/flags.md:548 msgid "[Platform Overview](../platforms/overview.md) — Platform targets" msgstr "" "[Descripción general de plataformas](../platforms/overview.md) — Plataformas " "disponibles" -#: src/cli/flags.md:546 +#: src/cli/flags.md:550 msgid "Typed-feedback profile replay" msgstr "" -#: src/cli/flags.md:548 +#: src/cli/flags.md:552 msgid "" "`--typed-feedback-profile ` supplies an **advisory** profile to native " "LLVM lowering. Default builds do not read a profile. The first supported " @@ -71345,13 +72066,13 @@ msgid "" "explained." msgstr "" -#: src/cli/flags.md:554 +#: src/cli/flags.md:558 msgid "" "Capture a workload, then replay it with the **same compiler executable, " "source, target and lowering options**:" msgstr "" -#: src/cli/flags.md:568 +#: src/cli/flags.md:572 msgid "" "The conversion utility is in the Perry source checkout. Pair the catalog " "with the trace from that exact capture build. It retains only observed " @@ -71362,120 +72083,120 @@ msgid "" "normal binary cannot restore omitted instrumentation." msgstr "" -#: src/cli/flags.md:575 +#: src/cli/flags.md:579 msgid "The JSON replay schema is version 1:" msgstr "" -#: src/cli/flags.md:579 +#: src/cli/flags.md:583 #, fuzzy msgid "\"schema_version\"" msgstr "`schemaVersion`" -#: src/cli/flags.md:580 +#: src/cli/flags.md:584 #, fuzzy msgid "\"compiler\"" msgstr "compile" -#: src/cli/flags.md:580 +#: src/cli/flags.md:584 msgid "\"sha256:\"" msgstr "" -#: src/cli/flags.md:581 src/cli/perry-audit-sbom.md:48 +#: src/cli/flags.md:585 src/cli/perry-audit-sbom.md:48 msgid "\"modules\"" msgstr "\"módulos\"" -#: src/cli/flags.md:582 +#: src/cli/flags.md:586 #, fuzzy msgid "\"identity\"" msgstr "Identidad caché" -#: src/cli/flags.md:583 +#: src/cli/flags.md:587 #, fuzzy msgid "\"module\"" msgstr "\"módulos\"" -#: src/cli/flags.md:583 +#: src/cli/flags.md:587 msgid "\"app.ts\"" msgstr "" -#: src/cli/flags.md:584 +#: src/cli/flags.md:588 #, fuzzy msgid "\"source_hash\"" msgstr "\"fuente\"" -#: src/cli/flags.md:584 +#: src/cli/flags.md:588 msgid "\"sha256:\"" msgstr "" -#: src/cli/flags.md:585 +#: src/cli/flags.md:589 #, fuzzy msgid "\"hir_hash\"" msgstr "\"snippet_hash\"" -#: src/cli/flags.md:585 +#: src/cli/flags.md:589 msgid "\"\"" msgstr "" -#: src/cli/flags.md:586 +#: src/cli/flags.md:590 #, fuzzy msgid "\"lowering_hash\"" msgstr "\"lodash\"" -#: src/cli/flags.md:586 +#: src/cli/flags.md:590 msgid "\"\"" msgstr "" -#: src/cli/flags.md:587 +#: src/cli/flags.md:591 #, fuzzy msgid "\"target\"" msgstr "\"objetivos\"" -#: src/cli/flags.md:587 +#: src/cli/flags.md:591 msgid "\"x86_64-unknown-linux-gnu\"" msgstr "" -#: src/cli/flags.md:589 +#: src/cli/flags.md:593 msgid "\"sites\"" msgstr "" -#: src/cli/flags.md:590 +#: src/cli/flags.md:594 #, fuzzy msgid "\"site_id\"" msgstr "\"client_id\"" -#: src/cli/flags.md:591 +#: src/cli/flags.md:595 #, fuzzy msgid "\"function\"" msgstr "\"funciones\"" -#: src/cli/flags.md:591 +#: src/cli/flags.md:595 #, fuzzy msgid "\"perry_fn_app_ts__read\"" msgstr "\"libperry_appreview.a\"" -#: src/cli/flags.md:592 +#: src/cli/flags.md:596 #, fuzzy msgid "\"array_element\"" msgstr "\"Incremento\"" -#: src/cli/flags.md:593 +#: src/cli/flags.md:597 #, fuzzy msgid "\"operation\"" msgstr "\"caption\"" -#: src/cli/flags.md:593 +#: src/cli/flags.md:597 msgid "\"array[index]\"" msgstr "" -#: src/cli/flags.md:594 +#: src/cli/flags.md:598 msgid "\"observation_kind\"" msgstr "" -#: src/cli/flags.md:594 +#: src/cli/flags.md:598 msgid "\"numeric_array_element\"" msgstr "" -#: src/cli/flags.md:600 +#: src/cli/flags.md:604 msgid "" "Use generated identities, rather than copying this illustrative site ID. " "Site IDs identify deterministic lowering sites within an exact module/" @@ -71489,7 +72210,7 @@ msgid "" "replay is attempted." msgstr "" -#: src/cli/flags.md:610 +#: src/cli/flags.md:614 msgid "" "Malformed or unreadable explicit input is a compilation error naming the " "profile and how to create it. Well-formed schema/compiler/target/source/HIR/" @@ -71503,7 +72224,7 @@ msgid "" "lowering are deterministic for identical inputs." msgstr "" -#: src/cli/flags.md:620 +#: src/cli/flags.md:624 msgid "" "Profiles and TypeScript annotations never authorize an unchecked operation. " "Every replay-selected read rechecks the live receiver, array representation, " @@ -71516,11 +72237,11 @@ msgid "" "materialization record for every claimed profile selection." msgstr "" -#: src/cli/flags.md:630 +#: src/cli/flags.md:634 msgid "Unused re-export collection" msgstr "" -#: src/cli/flags.md:632 +#: src/cli/flags.md:636 msgid "" "Collection prunes unused `export { name } from`, `export * from`, and " "namespace re-export edges by default when the exporting file and every " @@ -71546,14 +72267,14 @@ msgid "" "deferred." msgstr "" -#: src/cli/flags.md:654 +#: src/cli/flags.md:658 msgid "" "Set `PERRY_NO_REEXPORT_PRUNE=1` to disable this collection pass for an A/B " "build. The compile summary reports unique omitted modules in the proven " "static dependency trees, excluding modules retained by another importer." msgstr "" -#: src/cli/flags.md:658 +#: src/cli/flags.md:662 msgid "" "Set `PERRY_COLLECT_ONLY=1` to stop after collection and write `/" "audit.json` and `module-graph.json` (paths, eager/deferred initialization, " @@ -71562,6 +72283,185 @@ msgid "" "checks. For example:" msgstr "" +#: src/cli/flags.md:673 +msgid "Linux hot text, including the Rust runtime" +msgstr "" + +#: src/cli/flags.md:675 +msgid "" +"Ordering changes layout only: every unlisted function remains available at " +"the same optimization level. Normal builds without an order keep the " +"original link arguments and startup code." +msgstr "" + +#: src/cli/flags.md:679 +msgid "" +"For a hot runtime profile, compile with `PERRY_KEEP_SYMBOLS=1`, then run " +"`scripts/record_function_order.py -o app.order -- ./app representative-" +"args`. The companion recorder samples the whole executable with Linux perf " +"and emits raw ELF names, including Rust runtime and stdlib archive " +"functions. Each sampled code body includes all of its symbol aliases, so a " +"folded Rust function still selects its canonical input section. Aliases stay " +"adjacent and the byte estimate counts each existing body once; no function " +"copies are introduced. The default coverage is 90% of executable samples; " +"use `--coverage` to choose another fraction. Shared-library code is " +"excluded. The existing `--record-function-order` build still records exact " +"generated first-call order with `PERRY_FUNCTION_ORDER_OUT`; its binary can " +"also be sampled by the companion, but a plain symbol-preserving binary " +"avoids instrumentation in the sample run." +msgstr "" + +#: src/cli/flags.md:692 +msgid "" +"Apply either list with `--function-order app.order`. On Linux the linker " +"places listed generated and Rust function sections together at the beginning " +"of text, retains ordinary ELF alignment and backs only complete aligned 2 " +"MiB pages inside the selected prefix after PIE relocation. Partial boundary " +"pages retain their original file mapping. No padding is inserted between " +"selected and unlisted code; rodata, RELRO and writable LOADs keep ordinary " +"page alignment. A prefix smaller than 2 MiB returns before policy reads, " +"copying or collapse. For eligible pages, startup tries file-backed " +"`MADV_COLLAPSE`; if unavailable it prepares an anonymous executable copy and " +"moves it into place. The additional anonymous memory is bounded by complete " +"selected pages, rather than total text size. qb6 lacks " +"`CONFIG_READ_ONLY_THP_FOR_FS`, so file collapse returns `EINVAL` there and " +"the anonymous fallback is required for eligible prefixes. System or process " +"THP disablement skips the operation. Linux kernels without collapse support " +"can still allocate THP via `MADV_HUGEPAGE`. On other targets there is no " +"huge-page startup call. Unknown names remain harmless; ELF linker " +"metacharacters are rejected." +msgstr "" + +#: src/cli/debugging.md:1 +msgid "Source-level Debugging (`--debug-symbols`)" +msgstr "" + +#: src/cli/debugging.md:3 +msgid "" +"`perry compile --debug-symbols` (or `PERRY_DEBUG_SYMBOLS=1`) emits a DWARF " +"**line table** that maps the generated machine code back to lines of your " +"TypeScript source. Any DWARF debugger — lldb (Xcode, VS Code's [CodeLLDB]" +"(https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)), " +"gdb — can then stop at `file.ts:line` breakpoints and show where a program " +"is in the TypeScript source when it stops or crashes." +msgstr "" + +#: src/cli/debugging.md:17 +msgid "" +"On macOS the compiler also runs `dsymutil`, writing `app.dSYM` next to the " +"binary. Apple's linker does not copy debug info into the executable, and the " +"intermediate objects it would otherwise point at are deleted after linking, " +"so keep the `.dSYM` beside the binary (lldb finds it there by UUID)." +msgstr "" + +#: src/cli/debugging.md:22 +msgid "" +"On Windows (MSVC targets) the same line information is emitted as CodeView " +"into the PDB instead of DWARF. This path is not validated on Windows yet." +msgstr "" + +#: src/cli/debugging.md:25 +#, fuzzy +msgid "Xcode" +msgstr "\"código\"" + +#: src/cli/debugging.md:27 +msgid "" +"Add a build rule (or a Run Script phase) that compiles your `.ts` with `--" +"debug-symbols` into the product the scheme runs, e.g." +msgstr "" + +#: src/cli/debugging.md:31 +msgid "\"$SCRIPT_INPUT_FILE\"" +msgstr "" + +#: src/cli/debugging.md:31 +msgid "\"$BUILT_PRODUCTS_DIR/app\"" +msgstr "" + +#: src/cli/debugging.md:34 +msgid "" +"Open the `.ts` file in Xcode and click in the gutter to set breakpoints." +msgstr "" + +#: src/cli/debugging.md:36 +msgid "VS Code (CodeLLDB)" +msgstr "" + +#: src/cli/debugging.md:40 +msgid "\"lldb\"" +msgstr "" + +#: src/cli/debugging.md:41 +#, fuzzy +msgid "\"request\"" +msgstr "pull_request" + +#: src/cli/debugging.md:41 +msgid "\"launch\"" +msgstr "" + +#: src/cli/debugging.md:42 +msgid "\"Debug Perry binary\"" +msgstr "" + +#: src/cli/debugging.md:43 +#, fuzzy +msgid "\"program\"" +msgstr "Programa" + +#: src/cli/debugging.md:43 +msgid "\"${workspaceFolder}/app\"" +msgstr "" + +#: src/cli/debugging.md:44 +msgid "\"preLaunchTask\"" +msgstr "" + +#: src/cli/debugging.md:44 +#, fuzzy +msgid "\"perry: compile --debug-symbols\"" +msgstr "`--debug-symbols`" + +#: src/cli/debugging.md:48 +msgid "Breakpoints set in the `.ts` editor bind once the binary is loaded." +msgstr "" + +#: src/cli/debugging.md:50 +#, fuzzy +msgid "What is and is not covered" +msgstr "Qué no funciona" + +#: src/cli/debugging.md:52 +msgid "This is a first slice — **lines and function frames only**:" +msgstr "" + +#: src/cli/debugging.md:54 +msgid "" +"Lines are recorded where an expression carries a source position — calls, " +"`new`, and property reads. A line holding only arithmetic on locals has no " +"code of its own in the table; debuggers slide a breakpoint on it to the next " +"line that does." +msgstr "" + +#: src/cli/debugging.md:58 +msgid "" +"**Variables cannot be inspected** yet (no DWARF variable/type info). " +"Stepping and backtraces work; `frame variable` shows nothing useful." +msgstr "" + +#: src/cli/debugging.md:60 +msgid "" +"Function frames are named by their generated symbol " +"(`perry_fn___`)." +msgstr "" + +#: src/cli/debugging.md:61 +msgid "" +"The optimizer still runs, so stepping can jump between lines the way it does " +"in any optimized native build." +msgstr "" + #: src/cli/cache-dir.md:1 msgid "Cache directory" msgstr "Directorio caché" @@ -71854,8 +72754,8 @@ msgstr "# Mantenga la reasociación de --fast-math pero bloque FMA contracción. #: src/cli/fast-math.md:55 msgid "" -"The same setting is available through `PERRY_FP_CONTRACT=off|on|fast` or `" -"\"perry\": { \"fpContract\": \"on\" }` in package.json. Explicit package, " +"The same setting is available through `PERRY_FP_CONTRACT=off|on|fast` or " +"`\"perry\": { \"fpContract\": \"on\" }` in package.json. Explicit package, " "env, or CLI `fpContract` values override the `--fast-math` implied default." msgstr "" "La misma configuración está disponible a través de `PERRY_FP_CONTRACT=off|on|" @@ -72180,6 +73080,136 @@ msgstr "" "para trabajo de verdadero determinismo — pero es un orden de magnitud mejor " "que el ~30% con el flag activado." +#: src/cli/function-order.md:1 +msgid "Function Order (`--record-function-order`, `--function-order`)" +msgstr "" + +#: src/cli/function-order.md:3 +msgid "" +"A compiled program's machine code is laid out in the order the compiler " +"emitted it, which has nothing to do with when the code runs. A large program " +"that runs a few thousand functions while it starts touches pages spread over " +"its whole text, and each first touch reads a whole chunk of the file into " +"memory. Laying out the functions that run first, together and in the order " +"they first run, keeps far less of the binary resident and needs fewer page " +"faults." +msgstr "" + +#: src/cli/function-order.md:11 +msgid "The order comes from one real run, in two steps." +msgstr "" + +#: src/cli/function-order.md:13 +#, fuzzy +msgid "1. Record" +msgstr "Registros de DOP" + +#: src/cli/function-order.md:17 +msgid "app.fnorder" +msgstr "" + +#: src/cli/function-order.md:17 +#, fuzzy +msgid "# use the app as usual\n" +msgstr "# Assert la aplicación sigue siendo saludable" + +#: src/cli/function-order.md:20 +msgid "" +"The recording build calls a small hook the first time each compiled function " +"runs, and the hook appends the function's name to the file named by " +"`PERRY_FUNCTION_ORDER_OUT`: one name per line, in first-execution order. " +"Each name is written as soon as the function first runs, so stopping the " +"program at any point (even with `kill -9`) keeps everything recorded up to " +"then. The file is appended to, so delete it before a fresh recording. " +"Without `PERRY_FUNCTION_ORDER_OUT` the recording build records nothing." +msgstr "" + +#: src/cli/function-order.md:28 +msgid "" +"Record the part of the program whose memory and start-up time matter: up to " +"the first screen for a CLI or TUI, or through a typical request for a " +"server. The recording build is a little slower; don't ship it." +msgstr "" + +#: src/cli/function-order.md:32 +#, fuzzy +msgid "2. Build with the list" +msgstr "Compilar con geisterhand" + +#: src/cli/function-order.md:38 +msgid "" +"The listed functions are placed first in the text, together, in list order. " +"Every other function keeps its usual place. The list only changes where code " +"sits, never what it does: names the program doesn't define are ignored and " +"missing names fall back to the usual order, so a list recorded from an older " +"version of the program is harmless. It just orders less." +msgstr "" + +#: src/cli/function-order.md:44 +msgid "" +"Normal builds carry no recording code; `--function-order` costs nothing at " +"run time on non-Linux targets. Ordered Linux executables make one bounded " +"backing call at startup: prefixes smaller than 2 MiB return immediately, and " +"only complete selected 2 MiB pages are eligible for huge-page backing. The " +"linker keeps ordinary ELF alignment and does not pad the selected prefix. " +"After PIE relocation, backing covers only complete aligned pages inside " +"selected code; partial boundary pages retain their original file mapping." +msgstr "" + +#: src/cli/function-order.md:54 +msgid "How the order is applied" +msgstr "" + +#: src/cli/function-order.md:56 +msgid "Linux (GNU ld, the default `cc`)" +msgstr "" + +#: src/cli/function-order.md:56 +msgid "" +"The linker script collects ranked generated sections and native runtime " +"function sections at the start of `.text`, with ordinary ELF alignment." +msgstr "" + +#: src/cli/function-order.md:57 +#, fuzzy +msgid "Linux/Android with lld" +msgstr "Compilaciones Android" + +#: src/cli/function-order.md:57 +msgid "The same sections plus `--symbol-ordering-file`." +msgstr "" + +#: src/cli/function-order.md:58 +#, fuzzy +msgid "macOS / iOS (ld64)" +msgstr "**macOS / iOS**" + +#: src/cli/function-order.md:58 +msgid "`-order_file` with the list (Mach-O names add the leading `_`)." +msgstr "" + +#: src/cli/function-order.md:59 +#, fuzzy +msgid "Windows, WebAssembly" +msgstr "WebAssembly" + +#: src/cli/function-order.md:59 +msgid "Not applied; the build is unchanged." +msgstr "" + +#: src/cli/function-order.md:61 +#, fuzzy +msgid "The list format" +msgstr "El formulario `.other`" + +#: src/cli/function-order.md:63 +msgid "" +"Plain text, one function symbol per line, as the recording build writes it. " +"Blank lines and lines starting with `#` are ignored; if a name appears " +"twice, its first position counts. You can edit the list by hand, for example " +"to merge two recordings." +msgstr "" + #: src/cli/dynamic-dispatch.md:1 msgid "Dynamic Stdlib Dispatch (`--lockdown`)" msgstr "Envío dinámico de Stdlib (`--lockdown`)" @@ -72207,8 +73237,9 @@ msgstr "" #: src/cli/dynamic-dispatch.md:11 msgid "" "is the standard string-based obfuscation pattern used by malicious npm " -"packages: `process[\"bind\" + \"ing\"](\"dns\")`, `globalThis[atob(\"ZXZhbA==" -"\")]()`, `fs[methodName]()` where `methodName` is computed at runtime." +"packages: `process[\"bind\" + \"ing\"](\"dns\")`, " +"`globalThis[atob(\"ZXZhbA==\")]()`, `fs[methodName]()` where `methodName` is " +"computed at runtime." msgstr "" "es el patrón estándar de obfuscación basado en cadenas utilizado por " "paquetes npm maliciosos: `process[\"bind\" + \"ing\"](\"dns\")`, " @@ -72503,14 +73534,14 @@ msgstr "" #: src/cli/dynamic-dispatch.md:143 msgid "" "See [`#503`](https://github.com/PerryTS/perry/issues/503) for design " -"discussion and the broader supply-chain hardening series (\\[`#495`–`#506`" -"\\] (https://github.com/PerryTS/perry/issues?q=is%3Aissue+label%3Aenhancement" -"+security))." +"discussion and the broader supply-chain hardening series (\\[`#495`–" +"`#506`\\] (https://github.com/PerryTS/perry/issues?" +"q=is%3Aissue+label%3Aenhancement+security))." msgstr "" "Ver [`#503`](https://github.com/PerryTS/perry/issues/503) para la discusión " "de diseño y la serie más amplia de refuerzo de la cadena de suministro " -"(\\[`#495`–`#506`\\] (https://github.com/PerryTS/perry/issues?q=is%3Aissue" -"+label%3Aenhancement+security))." +"(\\[`#495`–`#506`\\] (https://github.com/PerryTS/perry/issues?" +"q=is%3Aissue+label%3Aenhancement+security))." #: src/cli/allow-js-runtime.md:1 msgid "JS Runtime Opt-In (`perry.allowJsRuntime`)" @@ -72654,8 +73685,8 @@ msgid "" "PerryTS/perry/issues?q=is%3Aissue+label%3Aenhancement+security))." msgstr "" "La serie más amplia de refuerzo de la cadena de suministro ([`#495`–`#506`]" -"(https://github.com/PerryTS/perry/issues?q=is%3Aissue+label%3Aenhancement" -"+security))." +"(https://github.com/PerryTS/perry/issues?" +"q=is%3Aissue+label%3Aenhancement+security))." #: src/cli/sandbox-buildrs.md:3 msgid "" @@ -73455,8 +74486,8 @@ msgstr "Composición con el resto de la serie de seguridad" #: src/cli/lockdown.md:65 msgid "" "Lockdown is the umbrella mode for the wider supply-chain hardening series " -"([`#495`–`#506`](https://github.com/PerryTS/perry/issues?q=is%3Aissue+label" -"%3Aenhancement+security)):" +"([`#495`–`#506`](https://github.com/PerryTS/perry/issues?" +"q=is%3Aissue+label%3Aenhancement+security)):" msgstr "" "Lockdown es el modo paraguas para la serie más amplia de endurecimiento de " "la cadena de suministro ([`#495`–`#506`](https://github.com/PerryTS/perry/" @@ -73882,8 +74913,8 @@ msgstr "\"*\"" #: src/cli/capabilities.md:39 msgid "" -"Keys are exact npm package names (`@scope/pkg` accepted) or the universal `" -"\"*\"` default." +"Keys are exact npm package names (`@scope/pkg` accepted) or the universal " +"`\"*\"` default." msgstr "" "Las claves son nombres exactos de paquetes npm (`@scope/pkg` aceptado) o el " "comodín universal `\"*\"`." @@ -75017,9 +76048,9 @@ msgid "" "`PERRY_TARGET_CPU`." msgstr "" "Línea de base de CPU para el código de máquina generado: un nombre de CPU " -"LLVM (`\"x86-64-v2\"`, `\"x86-64-v3\"`, `\"znver2\"`, `\"apple-m1\"`, ...), `" -"\"native\"` (en función del conjunto completo de instrucciones de la máquina " -"de construcción), o `\"generic\"` (la línea de base portátil de la " +"LLVM (`\"x86-64-v2\"`, `\"x86-64-v3\"`, `\"znver2\"`, `\"apple-m1\"`, ...), " +"`\"native\"` (en función del conjunto completo de instrucciones de la " +"máquina de construcción), o `\"generic\"` (la línea de base portátil de la " "arquitectura de destino). Fijar esto cuando el binario se ejecuta en " "máquinas distintas de la caja de compilación — una construcción de origen-" "host sin fijar en una máquina AVX-512 se bloquea con SIGILL en CPUs x86-64 " @@ -75036,11 +76067,11 @@ msgstr "bool" #: src/cli/perry-toml.md:160 msgid "" -"Boolean shorthand for `march`: `true` → `\"native\"`, `false` → `\"generic" -"\"`. Ignored when `march` is set." +"Boolean shorthand for `march`: `true` → `\"native\"`, `false` → " +"`\"generic\"`. Ignored when `march` is set." msgstr "" -"Taquigrafía booleana para `march`: `true` → `\"native\"`, `false` → `" -"\"generic\"`. Ignorado cuando `march` está configurado." +"Taquigrafía booleana para `march`: `true` → `\"native\"`, `false` → " +"`\"generic\"`. Ignorado cuando `march` está configurado." #: src/cli/perry-toml.md:162 msgid "" @@ -75204,8 +76235,8 @@ msgstr "`notarize_signing_identity`" msgid "" "Signing identity for notarization (only used with `distribute = \"both\"`)" msgstr "" -"Identidad de firma para notarización (solo se usa con `distribute = \"both" -"\"`)" +"Identidad de firma para notarización (solo se usa con `distribute = " +"\"both\"`)" #: src/cli/perry-toml.md:194 msgid "`installer_certificate`" @@ -75746,8 +76777,8 @@ msgstr "`permissions`" #: src/cli/perry-toml.md:340 msgid "" -"Android permissions (e.g., `[\"INTERNET\", \"CAMERA\", \"ACCESS_FINE_LOCATION" -"\"]`)" +"Android permissions (e.g., `[\"INTERNET\", \"CAMERA\", " +"\"ACCESS_FINE_LOCATION\"]`)" msgstr "" "Permisos de Android (p. ej., `[\"INTERNET\", \"CAMERA\", " "\"ACCESS_FINE_LOCATION\"]`)" @@ -75804,11 +76835,11 @@ msgstr "Formato de paquete: `\"appimage\"`, `\"deb\"` o `\"rpm\"`" #: src/cli/perry-toml.md:356 msgid "" -"Desktop application category (e.g., `\"Development\"`, `\"Utility\"`, `\"Game" -"\"`)" +"Desktop application category (e.g., `\"Development\"`, `\"Utility\"`, " +"`\"Game\"`)" msgstr "" -"Categoría de la aplicación de escritorio (p. ej., `\"Development\"`, `" -"\"Utility\"`, `\"Game\"`)" +"Categoría de la aplicación de escritorio (p. ej., `\"Development\"`, " +"`\"Utility\"`, `\"Game\"`)" #: src/cli/perry-toml.md:357 msgid "Application description for package metadata" @@ -76011,11 +77042,11 @@ msgstr "`\"all\"`" #: src/cli/perry-toml.md:417 msgid "" -"Filter findings by severity: `\"all\"`, `\"critical\"`, `\"high\"`, `\"medium" -"\"`, `\"low\"`" +"Filter findings by severity: `\"all\"`, `\"critical\"`, `\"high\"`, " +"`\"medium\"`, `\"low\"`" msgstr "" -"Filtra los hallazgos por severidad: `\"all\"`, `\"critical\"`, `\"high\"`, `" -"\"medium\"`, `\"low\"`" +"Filtra los hallazgos por severidad: `\"all\"`, `\"critical\"`, `\"high\"`, " +"`\"medium\"`, `\"low\"`" #: src/cli/perry-toml.md:418 msgid "`ignore`" @@ -77856,8 +78887,8 @@ msgid "" "`recordEmbeddedResponse` reads the body according to your configured " "`source`, so a registry answering a `gh-releases` request is rejected rather " "than read as version `\"\"`. A version that does not parse is also rejected " -"— one malformed answer would otherwise become a permanent \"update available" -"\" your users cannot dismiss." +"— one malformed answer would otherwise become a permanent \"update " +"available\" your users cannot dismiss." msgstr "" "`recordEmbeddedResponse` lee el cuerpo de acuerdo con su configuración " "`source`, por lo que un registro que responde a una solicitud `gh-releases` " @@ -77879,9 +78910,9 @@ msgid "" "Perry sends no telemetry unless you accept the first-run prompt (or " "explicitly set `telemetry.enabled = true` in `~/.perry/config.toml`). This " "setting is the master consent gate for every telemetry channel. If it is " -"false or missing, nothing is sent, even when `compatibility_reports = \"on" -"\"`. The environment overrides `PERRY_NO_TELEMETRY=1` and `CI=true` always " -"win as well." +"false or missing, nothing is sent, even when `compatibility_reports = " +"\"on\"`. The environment overrides `PERRY_NO_TELEMETRY=1` and `CI=true` " +"always win as well." msgstr "" #: src/cli/telemetry.md:9 @@ -78704,7 +79735,7 @@ msgstr "" "bisección de benchmarks/depuración. Sin definir, `=1`, `=on` y `=true` " "mantienen las barreras habilitadas." -#: src/internals/memory-model.md:174 src/internals/garbage-collector.md:332 +#: src/internals/memory-model.md:174 src/internals/garbage-collector.md:413 msgid "`PERRY_GC_DIAG=1`" msgstr "`PERRY_GC_DIAG=1`" @@ -79136,299 +80167,2187 @@ msgstr "" "encabezado RSS sobrestiman lo que el proceso realmente se mantendría bajo " "presión." -#: src/internals/memory-model.md:294 -msgid "" -"**`__DATA` dirty is not the inline caches any more.** Every property-access " -"site used to own a 96-byte `[12 x i64]` cache global — 25 MB of `__bss` on a " -"Claude Code build, 18.7 MB of it dirty at idle because a page is dirtied by " -"the first cache touched on it (#9708). A site now owns an 8-byte pointer " -"**slot** (`@perry_ic_N = private global ptr null`); the cache words are " -"allocated from a runtime arena on the site's first _priming_ miss and " -"published into the slot, so an unexecuted site costs its zero-filled slot " -"and nothing resident. The arena is one row of `PERRY_GC_CENSUS`'s " -"`side_tables` (`ic.lazy_caches`: resolved sites, arena bytes); a program " -"that reports `0` there executed no property site that could prime." +#: src/internals/memory-model.md:294 +msgid "" +"**`__DATA` dirty is not the inline caches any more.** Every property-access " +"site used to own a 96-byte `[12 x i64]` cache global — 25 MB of `__bss` on a " +"Claude Code build, 18.7 MB of it dirty at idle because a page is dirtied by " +"the first cache touched on it (#9708). A site now owns an 8-byte pointer " +"**slot** (`@perry_ic_N = private global ptr null`); the cache words are " +"allocated from a runtime arena on the site's first _priming_ miss and " +"published into the slot, so an unexecuted site costs its zero-filled slot " +"and nothing resident. The arena is one row of `PERRY_GC_CENSUS`'s " +"`side_tables` (`ic.lazy_caches`: resolved sites, arena bytes); a program " +"that reports `0` there executed no property site that could prime." +msgstr "" + +#: src/internals/memory-model.md:305 +msgid "Source map" +msgstr "Mapa de fuentes" + +#: src/internals/memory-model.md:307 +msgid "" +"Paths, not line numbers: a line number is a claim nothing re-derives, and " +"every row of this table once pointed into a `gc.rs` that no longer exists." +msgstr "" +"Rutas, no números de línea: un número de línea es una reclamación que no " +"vuelve a derivarse, y cada fila de esta tabla una vez apuntaba a un `gc.rs` " +"que ya no existe." + +#: src/internals/memory-model.md:310 +msgid "Topic" +msgstr "Tema" + +#: src/internals/memory-model.md:310 +msgid "Symbol to look for" +msgstr "Símbolo a buscar" + +#: src/internals/memory-model.md:312 +msgid "NaN-boxing tags" +msgstr "NaN-boxing tags" + +#: src/internals/memory-model.md:312 +msgid "`crates/perry-runtime/src/value/tags.rs`" +msgstr "`crates/perry-runtime/src/value/tags.rs`" + +#: src/internals/memory-model.md:312 +msgid "`POINTER_TAG`, `STRING_TAG`" +msgstr "`POINTER_TAG`, `STRING_TAG`" + +#: src/internals/memory-model.md:313 +msgid "`GcHeader`, type/flag constants" +msgstr "`GcHeader`, constantes de tipo/flag" + +#: src/internals/memory-model.md:313 +msgid "`crates/perry-runtime/src/gc/types.rs`" +msgstr "`crates/perry-runtime/src/gc/types.rs`" + +#: src/internals/memory-model.md:313 +msgid "`GcHeader`" +msgstr "`GcHeader`" + +#: src/internals/memory-model.md:314 +msgid "`gc_malloc`" +msgstr "`gc_malloc`" + +#: src/internals/memory-model.md:314 +msgid "`crates/perry-runtime/src/gc/malloc.rs`" +msgstr "`crates/perry-runtime/src/gc/malloc.rs`" + +#: src/internals/memory-model.md:315 +msgid "Shadow frames (fallback root lowering)" +msgstr "Marcos de sombras (reducción de la raíz de retroceso)" + +#: src/internals/memory-model.md:315 +msgid "`crates/perry-runtime/src/gc/roots/shadow_stack.rs`" +msgstr "`crates/perry-runtime/src/gc/roots/shadow_stack.rs`" + +#: src/internals/memory-model.md:315 +msgid "`js_shadow_frame_push`" +msgstr "`js_shadow_frame_push`" + +#: src/internals/memory-model.md:316 +msgid "Registered root scanners" +msgstr "Escáneres de raíces registrados" + +#: src/internals/memory-model.md:316 +msgid "`crates/perry-runtime/src/gc/roots.rs`" +msgstr "`crates/perry-runtime/src/gc/roots.rs`" + +#: src/internals/memory-model.md:316 +msgid "`gc_register_mutable_root_scanner`" +msgstr "`gc_register_mutable_root_scanner`" + +#: src/internals/memory-model.md:317 +msgid "Copying minor" +msgstr "Copiar menor" + +#: src/internals/memory-model.md:317 +msgid "`crates/perry-runtime/src/gc/copying.rs`" +msgstr "`crates/perry-runtime/src/gc/copying.rs`" + +#: src/internals/memory-model.md:317 +msgid "`move_young`" +msgstr "`move_young`" + +#: src/internals/memory-model.md:318 +msgid "Whole-block in-place promotion" +msgstr "Promoción de todo el bloque en el lugar" + +#: src/internals/memory-model.md:318 +msgid "`crates/perry-runtime/src/arena/promote.rs`" +msgstr "`crates/perry-runtime/src/arena/promote.rs`" + +#: src/internals/memory-model.md:318 +msgid "`finish_in_place_promotion`" +msgstr "`finish_in_place_promotion`" + +#: src/internals/memory-model.md:319 +msgid "Promotion policy" +msgstr "Política de promoción" + +#: src/internals/memory-model.md:319 +msgid "`crates/perry-runtime/src/gc/promote_in_place.rs`" +msgstr "`crates/perry-runtime/src/gc/promote_in_place.rs`" + +#: src/internals/memory-model.md:319 +msgid "`PROMOTE_SURVIVAL_THRESHOLD_PERMILLE`" +msgstr "`PROMOTE_SURVIVAL_THRESHOLD_PERMILLE`" + +#: src/internals/memory-model.md:320 +msgid "Adaptive tenuring threshold" +msgstr "Umbral de mantenimiento adaptativo" + +#: src/internals/memory-model.md:320 +msgid "`crates/perry-runtime/src/gc/tenuring.rs`" +msgstr "`crates/perry-runtime/src/gc/tenuring.rs`" + +#: src/internals/memory-model.md:320 +msgid "`tenuring_survivals`" +msgstr "`tenuring_survivals`" + +#: src/internals/memory-model.md:321 +msgid "Write barriers" +msgstr "Barreras de escritura" + +#: src/internals/memory-model.md:321 +msgid "`crates/perry-runtime/src/gc/barrier_store.rs`" +msgstr "`crates/perry-runtime/src/gc/barrier_store.rs`" + +#: src/internals/memory-model.md:321 +msgid "`runtime_write_barrier_slot`" +msgstr "`runtime_write_barrier_slot`" + +#: src/internals/memory-model.md:322 +msgid "Explicit pinning" +msgstr "Pinzas explícitas" + +#: src/internals/memory-model.md:322 +msgid "`crates/perry-runtime/src/gc/pin.rs`" +msgstr "`crates/perry-runtime/src/gc/pin.rs`" + +#: src/internals/memory-model.md:322 +msgid "`pin_object`" +msgstr "`pin_object`" + +#: src/internals/memory-model.md:323 +msgid "Conservative-pin predicate" +msgstr "Conservador-pin predicado" + +#: src/internals/memory-model.md:323 +msgid "`crates/perry-runtime/src/gc/verify.rs`" +msgstr "`crates/perry-runtime/src/gc/verify.rs`" + +#: src/internals/memory-model.md:323 +msgid "`is_conservatively_pinned`" +msgstr "`is_conservatively_pinned`" + +#: src/internals/memory-model.md:324 +msgid "Collection triggers and pacing" +msgstr "Detonadores de recogida y estimulación" + +#: src/internals/memory-model.md:324 +msgid "`crates/perry-runtime/src/gc/policy.rs`" +msgstr "`crates/perry-runtime/src/gc/policy.rs`" + +#: src/internals/memory-model.md:324 +msgid "`gc_check_trigger`" +msgstr "`gc_check_trigger`" + +#: src/internals/memory-model.md:325 +msgid "Current operations page" +msgstr "Operaciones actuales página" + +#: src/internals/memory-model.md:325 +msgid "`docs/src/internals/garbage-collector.md`" +msgstr "`docs/src/internals/garbage-collector.md`" + +#: src/internals/memory-model.md:326 +msgid "Design plan (historical)" +msgstr "Plan de diseño (histórico)" + +#: src/internals/memory-model.md:326 +msgid "`docs/generational-gc-plan.md`" +msgstr "`docs/generational-gc-plan.md`" + +#: src/internals/memory-model.md:340 +msgid "" +"Those rows are not decorative: each is bound to a `gc-symbol` marker above " +"and re-derived by `scripts/check_gc_doc_claims.py`, so a rename that leaves " +"this table behind fails `lint` instead of quietly pointing readers at " +"nothing." +msgstr "" +"Esas filas no son decorativas: cada una está unida a un marcador `gc-symbol` " +"arriba y re-derivada por `scripts/check_gc_doc_claims.py`, por lo que un " +"renombrado que deja esta mesa detrás falla `lint` en lugar de señalar " +"tranquilamente a los lectores a nada." + +#: src/internals/retained-function-source.md:3 +msgid "" +"Permanent compiled function infos can name independent 4 KiB raw-DEFLATE " +"frames in the retained-source section. `FN_SOURCE_BLOCKS`, together with " +"`FN_HAS_SOURCE`, describes this immutable representation. Each frame has two " +"little-endian `u32` lengths (compressed, decoded), followed by its payload. " +"Frames are adjacent; the next header is at `frame + 8 + compressed_len`." +msgstr "" + +#: src/internals/retained-function-source.md:9 +msgid "" +"The info directly owns the first frame's signed displacement from the info, " +"the offset within that decoded frame, and the exact source byte length. When " +"there is no versioned clone, these occupy the existing idle versioned " +"fields: `versioned_captures` is the source length and the mask's storage " +"holds an `i32` displacement followed by a `u32` decoded offset. Common infos " +"remain 64 bytes. A versioned clone instead licenses a 16-byte source tail " +"containing displacement, decoded offset, source length and padding. Name and " +"constructor tails follow that authoritative layout. Raw legacy info ranges " +"remain readable." +msgstr "" + +#: src/internals/retained-function-source.md:18 +msgid "" +"A source read decodes into call-local scratch storage, copies the requested " +"intersection, then follows adjacent headers if the range spans frames. The " +"last frame produces only the prefix through the requested range end; its " +"unneeded suffix is not inflated. Fully traversed frames still validate " +"stream completion and lengths. Frames are trusted compiler-owned image data. " +"No decoded block, decoder state or runtime lookup index survives the call. " +"Nested ranges share frames. Frame boundaries may split Unicode sequences; " +"byte slicing and assembly happen before the original range becomes a string. " +"Nothing normalizes, replaces or truncates the original source bytes." +msgstr "" + +#: src/internals/retained-function-source.md:28 +msgid "" +"A function whose own source is at most 512 bytes " +"(`RETAINED_SOURCE_RAW_MAX_BYTES`) is not framed: its info names a raw copy " +"in the ordinary retained-source blob, the legacy layout without " +"`FN_SOURCE_BLOCKS`. This is a fixed size rule on the function itself, not a " +"hot/cold split and not a parent-size rule; the bytes also stay inside any " +"longer parent's frames. It needs no runtime table or cache." +msgstr "" + +#: src/internals/retained-function-source.md:34 +msgid "" +"Classes, raw method/accessor bodies, runtime source overrides and unloadable " +"images keep their existing raw registration and ownership contracts. In " +"particular, module initialization does not eagerly decode retained source." +msgstr "" + +#: src/internals/retained-function-source.md:38 +#, fuzzy +msgid "Reflection census" +msgstr "Sin reflexión" + +#: src/internals/retained-function-source.md:40 +msgid "" +"Set `PERRY_SOURCE_READ_COUNT=1` when running a program to report these " +"counters on stderr at natural exit or explicit `process.exit()`:" +msgstr "" + +#: src/internals/retained-function-source.md:43 +msgid "" +"`function_to_string`: ordinary closure source requests, including implicit " +"string coercion;" +msgstr "" + +#: src/internals/retained-function-source.md:45 +msgid "" +"`class_source`: class source requests, including default coercion and error " +"formatting;" +msgstr "" + +#: src/internals/retained-function-source.md:47 +msgid "" +"`retained_info`: requests actually served by a source-bearing function info;" +msgstr "" + +#: src/internals/retained-function-source.md:48 +msgid "" +"`framed`: the part of `retained_info` that decoded DEFLATE frames; the rest " +"read raw bytes (functions whose own source is at most 512 bytes);" +msgstr "" + +#: src/internals/retained-function-source.md:49 +msgid "" +"`class_error`: the subset of class requests used by readonly-static errors." +msgstr "" + +#: src/internals/retained-function-source.md:51 +msgid "" +"Class closures use the class counter rather than counting twice. Counters " +"overlap where an ordinary function request is served by its info. The census " +"is off by default, owns no source or GC pointers, and does not affect " +"emitted code or object-cache identity. If no source helper runs, no census " +"line is registered and all counts are zero. The environment setting is read " +"on the first source request and is fixed for that process's census." +msgstr "" + +#: src/internals/regexp-program-cache.md:3 +msgid "" +"JavaScript RegExp construction uses Perex directly. There is one engine; " +"lookbehind, backreferences, and other accepted patterns share the same " +"construction path. `perex_construct.rs` retains eager syntax checking, so " +"invalid patterns still throw at construction and the first search does not " +"inherit deferred compilation work." +msgstr "" + +#: src/internals/regexp-program-cache.md:9 +msgid "" +"`regex/perex_cache.rs` retains immutable programs by source plus canonical " +"flags. The first lookup uses the source `StringHeader` identity and reads no " +"pattern bytes. An identity miss hashes the original bytes, then verifies " +"exact equality within the hash bucket. Independently allocated equal strings " +"share a program. Flags remain part of both keys; canonical ordering makes " +"`ig` and `gi` equivalent. Every new RegExp still owns its original source/" +"flags and independent `lastIndex`. Retained source strings are marked shared " +"to prevent unique-string append from modifying the cached pattern or " +"OriginalSource." +msgstr "" + +#: src/internals/regexp-program-cache.md:18 +msgid "" +"The cache holds at most 512 entries and 32 MiB of source/program payload. " +"Least-recently-used entries are evicted individually. Programs above the " +"byte limit remain usable through their RegExp owner without cache retention. " +"The cache registers its scanner before publishing its first root, so " +"programs that never construct a RegExp add no cache scanner work. Source and " +"program slots are mutable GC roots; evacuation rewrites them and rebuilds " +"the source-identity index. Content hashes are address independent." +msgstr "" + +#: src/internals/regexp-program-cache.md:26 +msgid "" +"Perex's `ProgramWitness` lives beside the immutable words in each program GC " +"cell (upstream #10166/#10183). The first binding validates the words; " +"subsequent bindings use that witness in constant work, including bindings " +"from another RegExp sharing the cached program. Each operation still roots " +"its own program, so eviction, collection, and reentrant receiver " +"recompilation cannot invalidate an active search. No borrowed program slice " +"survives a safepoint. Scratch buffers remain operation-owned and charged to " +"the existing memory budget." +msgstr "" + +#: src/internals/regexp-program-cache.md:34 +msgid "" +"Compound split/replace/match operations retain program and subject bindings " +"in `perex_api::Reuse`, checking the current receiver and program cell before " +"reuse. Within a compound operation, the previous position is reused only " +"with the same subject binding. Across JavaScript calls, upstream's four-" +"entry scalar position table can reuse a non-ASCII string's cursor when its " +"concealed address, lengths and heap generation still agree. Heap changes or " +"in-place length changes invalidate that identity. The table does not retain " +"a string or program. Validated heap strings use the existing counted-subject " +"path." +msgstr "" + +#: src/internals/regexp-program-cache.md:43 +msgid "" +"The fast builtin dispatch guard contains only immutable ShapeIds, field " +"indices, and epochs, with no untraced GC address. It verifies the current " +"builtin `exec` value, the receiver's metadata, expando table, and prototype. " +"Empty-string replacement additionally verifies builtin flags getters and " +"`Symbol.replace`, and requires primitive strings and numeric `lastIndex`. " +"Observable overrides take the ordinary dispatch path. Admitted replacements " +"use full-subject UTF-16 spans and preserve global/sticky index updates and " +"Unicode empty-match advancement, without allocating exec result arrays." +msgstr "" + +#: src/internals/regexp-program-cache.md:52 +msgid "" +"`PERRY_REGEX_DIAG=1` reports compile and validation counts, identity/content " +"hits, bytes hashed, canonical dispatches, searches, and scratch allocation " +"and growth counts. Set it while compiling as well as while running: it is " +"served by perry-runtime's `hot-diag` feature, which an auto-optimized build " +"only links when the knob (or `PERRY_GC_INSTRUMENTS=1`) is set at compile " +"time, and a binary built without it aborts at startup rather than report " +"nothing. Diagnostics deliberately inspect source bytes for attribution; " +"measure timings with diagnostics disabled. Cache payload lives in traced GC " +"cells; the census separately reports native cache metadata as `regex." +"program_cache`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:3 +msgid "" +"Status: owned-storage and conditional-ephemeron implementation is complete; " +"performance acceptance is blocked by TypeScript cycles. See [implementation " +"validation](weakmap-owned-index-validation.md) for the fresh qb6 program " +"matrix, floors, GC counts, and THP-disabled check. Rebased onto " +"`68e41faa0f9145d8b8ab67ecb0cf414eaf13420b`, including c85c2db93 (#12105). " +"The coordinator authorized the redesign on 2026-10-06 and filed the " +"conditional tracing defect as #12087. The original design and diagnostic " +"baseline below were recorded against " +"`4c2e7fa2b53e8721ec01aa0d1a7a0921148ca6b4`; they are historical evidence, " +"not acceptance measurements for the implementation." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:14 +#, fuzzy +msgid "Implemented representation" +msgstr "Representación de los nativos" + +#: src/internals/weakmap-owned-index-design.md:16 +msgid "" +"WeakMap and WeakSet constructors add their internal brand to the Shape's " +"private brand facts. A spare Shape flag summarizes those facts without " +"changing the Shape record or ordinary object header size. Transitions retain " +"the brand. The object owns a tagged `GC_TYPE_WEAK_STORAGE` edge through " +"`ObjectMeta.native_state`; empty maps allocate that metadata lazily." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:22 +msgid "" +"The storage cell holds key/value pairs, twice-capacity open-addressed bucket " +"offsets, and a reverse bucket offset per entry. The reverse offsets make " +"delete and budgeted weak clearing constant work after lookup. Empty entries " +"reuse their value word as a scalar free-list offset. No owner-address index, " +"last-key cache, or extra copies of key pointer bits survive outside the " +"cell. Growth discards the lookup view, roots all call arguments, reloads " +"after allocation, and publishes the replacement through the existing meta " +"barrier." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:30 +msgid "" +"Collectors discover the cell through its owner edge. Conditional closure " +"traces values only for independently live keys, including cross-map and " +"Proxy chains. The copying collector repairs authoritative pairs and rebuilds " +"buckets before returning to the mutator. Budgeted non-moving closure and " +"clearing charge entries individually. Weak pair publication maintains old to " +"young coverage without unconditionally shading copied keys or values. Mark " +"verification checks enabled values; rewrite and coverage verification " +"continue to inspect both words." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:39 +#, fuzzy +msgid "Measured baseline and verification" +msgstr "Auditoría y verificación" + +#: src/internals/weakmap-owned-index-design.md:41 +msgid "" +"Fresh Linux release build: `perry`, `perry-runtime-static` and `perry-stdlib-" +"static`, in this lane's `target-main`. All 35,590 tracked source files " +"matched the local baseline before building and after the diagnostic test was " +"removed. Compiler and archive hashes are retained with the evidence. The " +"host is the shared Ryzen 7 7700X, Node 26.5.1 and Bun 1.3.14." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:47 +msgid "" +"These are **full-static diagnostic baselines**, compiled with " +"`PERRY_KEEP_SYMBOLS=1 --no-cache --no-auto-optimize`. This mode differs from " +"the auto-specialized baseline in LEVERS.md, especially in startup and RSS. " +"It is not an A/B gate for a proposed performance patch. The exact `import " +"{ Schema } from \"effect\"` source passes on this baseline, with `ok=20000`; " +"the direct-import substitute was unnecessary." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:54 +msgid "" +"Each main row is the median of ten runs, interleaved with ten runs of the " +"identical binary, ASLR disabled and CPU 2 pinned. Performance counters and " +"peak RSS are uninstrumented. GC counts beside RSS come from three separate " +"trace runs and were identical across those runs. CPU is perf task-clock in " +"milliseconds; **cycles**, not task-clock, are the owner's CPU gate axis." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:60 +#, fuzzy +msgid "Main instructions:u, M" +msgstr "Instrucciones de Compilación" + +#: src/internals/weakmap-owned-index-design.md:60 +msgid "Main cycles:u, M" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:60 +msgid "Main CPU, ms" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:60 +msgid "Main RSS, MiB" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:60 +#, fuzzy +msgid "Minor/full GC" +msgstr "GC menor" + +#: src/internals/weakmap-owned-index-design.md:60 +#, fuzzy +msgid "Fix" +msgstr "fix" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "weakmap-get, 1M" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "831.579" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "282.587" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "61.11" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +msgid "24.473" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:62 +#: src/internals/weakmap-owned-index-design.md:63 +#: src/internals/weakmap-owned-index-design.md:65 +#: src/internals/weakmap-owned-index-design.md:66 +#: src/internals/weakmap-owned-index-design.md:67 +#: src/internals/weakmap-owned-index-design.md:68 +#, fuzzy +msgid "0/0" +msgstr "500" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "weakmap-hit-pair, 1M" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "1625.579" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "554.027" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "116.97" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:63 +msgid "24.340" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "Effect, exact source" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "29081.772" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "17622.809" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "3589.69" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "194.000" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:64 +msgid "18/2" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:65 +#: src/internals/weakmap-owned-index-validation.md:79 +#: src/internals/weakmap-owned-index-validation.md:101 +#, fuzzy +msgid "hello" +msgstr "Shell" + +#: src/internals/weakmap-owned-index-design.md:65 +msgid "1.317" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:65 +msgid "2.574" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:65 +msgid "2.99" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:65 +msgid "14.547" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +#: src/internals/weakmap-owned-index-validation.md:80 +#: src/internals/weakmap-owned-index-validation.md:102 +msgid "07_object_create" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +msgid "33.112" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +msgid "21.591" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +msgid "7.67" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:66 +msgid "26.996" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +#: src/internals/weakmap-owned-index-validation.md:81 +#: src/internals/weakmap-owned-index-validation.md:103 +msgid "09_method_calls" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +msgid "61.479" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +msgid "124.527" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +msgid "28.29" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:67 +msgid "23.691" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:68 +#: src/internals/weakmap-owned-index-validation.md:82 +#: src/internals/weakmap-owned-index-validation.md:104 +#, fuzzy +msgid "14_closure" +msgstr "Closures" + +#: src/internals/weakmap-owned-index-design.md:68 +msgid "251.326" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:68 +msgid "156.094" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:68 +msgid "34.14" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:68 +msgid "14.660" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +#: src/internals/weakmap-owned-index-validation.md:83 +#: src/internals/weakmap-owned-index-validation.md:105 +msgid "bench_object_property" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +msgid "181.586" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +msgid "75.679" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +msgid "19.19" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +msgid "34.695" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:69 +#, fuzzy +msgid "1/0" +msgstr "10" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "Zod" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "5359.568" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "3236.034" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "659.80" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "55.082" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:70 +msgid "27/0" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:72 +msgid "" +"TypeScript, qs parse/stringify, commander and fastify are **unmeasured** in " +"this design fallback. The first TypeScript setup accidentally omitted the " +"captures harness's explicit `typescript` AOT setting, selected the native " +"shim and failed reading `ScriptTarget.ES2022`; that run is invalid, not a " +"TypeScript-source baseline failure. The explicit setting was restored; the " +"real-source TypeScript build was not run. The copied captures harness " +"contained no qs/commander/fastify drivers, and no replacement workload was " +"substituted. The full real-program gate remains required for implementation. " +"`bench_object_property.ts`, absent from this snapshot's benchmark directory, " +"was copied unchanged from the captures lane along with its Zod/TypeScript " +"drivers." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:84 +msgid "" +"Identical-binary floor/main median deltas exceeded +0.5% for Effect cycles " +"(+1.185%) and RSS (+0.600%), and hello cycles (+0.982%). Instruction deltas " +"were below 0.01% on every measured program. These controls expose host " +"noise; they do not expand the owner's tolerance or establish a passing gate." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:89 +msgid "" +"Three-run instruction slopes at 1M and 2M iterations are **830.0 per get** " +"and **1624.0 per has/get pair**. Node's get slope at 100M/200M is 122.9; " +"Bun's is 60.6. These include loop/key-selection/checksum scaffolding. Exact " +"Effect three-run references are Node 3727.945M user instructions, 773.44ms " +"CPU, 204.773MiB RSS, and Bun 3276.357M, 684.84ms, 158.598MiB. The full-" +"static Perry/Node instruction ratio is 7.80x; Perry/Bun is 8.88x." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:96 +msgid "" +"DWARF captures used `-F 1999 --call-graph dwarf,8192` for time and `-e " +"instructions:u -c 100003 --call-graph dwarf,8192` for instructions. No lost " +"samples were reported. Caller extraction uses `perf script --no-inline` to " +"avoid expensive addr2line expansion; sampled instruction weights are checked " +"against perf's reported event total. Inline attribution and truncated deep " +"stacks are not claimed as complete ancestry." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:103 +msgid "" +"The standalone instruction profile puts 28.92% in `js_array_length`, 22.22% " +"in `js_array_get_f64`, 18.63% in `js_weakmap_get` self and 17.83% in " +"`weakref::index::find` self. The get ancestry contains both " +"`js_array_get_f64 -> index::find -> js_weakmap_get` and the second " +"`js_array_get_f64 -> js_weakmap_get` extraction. Within exact Effect, these " +"three validated-array/index leaves account for 181.805M (`find`), 141.004M " +"(`array_get`) and 104.603M (`array_length`) sampled user instructions under " +"WeakMap calls. The memoizer ancestry is directly recovered:" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:123 +msgid "" +"All recovered WeakMap ancestry, including insertion/allocation descendants, " +"is 3.748% of sampled Effect instructions and 3.307% of time samples. This is " +"an inclusive observation, not an exclusive saving budget. Never interpret " +"LLVM-merged hash symbols literally without checking their callers." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:128 +#, fuzzy +msgid "Verification:" +msgstr "Notificación local" + +#: src/internals/weakmap-owned-index-design.md:130 +msgid "" +"Pristine `cargo test --release -p perry-runtime -- --test-threads=1`: 5,118 " +"passed, five ignored; integration test passed; eight doctests ignored." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:132 +msgid "" +"Six of seven existing `*weak*.ts` files match Node stdout and exits. " +"`test_issue_2656_weakref_finalization_gc.ts` already differs on main: Perry " +"clears two WeakRefs while Node keeps them live. No runtime code was changed " +"in this lane, so no previously matching test was altered." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:136 +msgid "" +"The new diagnostic behavior matrix matches Node byte-for-byte: primitives, " +"registered/fresh/well-known symbols, delete/re-set, buffer, typed array, " +"URLSearchParams, Proxy identity, function/class keys, subclasses, borrowed " +"methods and forged/Proxy receiver brand rejection. Existing index tests " +"cover many keys and movement." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:141 +msgid "" +"The added Rust ephemeron witness **fails on baseline**, after its actual " +"copying-minor assertion passes: entry count is 1, expected 0. A separate C " +"fixture linked against the pristine archives independently reports " +"`holder_moved=1 control_dead=1 value_backedge_key_dead=0`; its trace copied " +"13 objects. The Rust witness was then removed and all source hashes " +"rechecked. The failing witness is retained as evidence, not committed as a " +"passing or ignored test." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:148 +msgid "" +"`cargo fmt --all -- --check` already fails on pristine main at `buffer/" +"view_tests.rs:262`. Node-version consistency passes. Codegen tests and GC " +"call-effect checks are inapplicable: no codegen, FFI signature or runtime " +"effect changed. Conflict-marker and patch whitespace checks are empty." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:154 +msgid "" +"Evidence and the proposed Rust/C witnesses are retained locally under `/" +"Users/amlug/projects/perry/secret-tests/scratchpad/codex-small/weakmap/`. " +"Raw perf captures and benchmark binaries remain under `/root/codex-lanes/cx-" +"weakmap/`. Build target directories are removed after collection, as " +"required by the lane brief." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:160 +#, fuzzy +msgid "Why the widened request needs a redesign" +msgstr "¿Por qué la solicitud es suya" + +#: src/internals/weakmap-owned-index-design.md:162 +msgid "The current successful get path does the following:" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:164 +msgid "Validate the receiver through `weak_wrapper_class_id`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:165 +msgid "Root the receiver and key and obtain its entries array." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:166 +msgid "Read generic array length in `index::find`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:167 +msgid "Find the owner in `WEAK_COLLECTION_INDEXES`, a thread-local hash table." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:168 +msgid "Read generic array length again in `with_index`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:169 +msgid "Probe the per-owner key hash table." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:170 +msgid "Read the entry through `js_array_get_f64` and verify its key." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:171 +msgid "" +"Return its integer slot, then read that same entry through " +"`js_array_get_f64` again in `find_entry`." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:173 +msgid "Run the weak read barriers for key and value." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:175 +msgid "" +"`has` repeats the same lookup and keeps the key barrier. An overwriting " +"`set` and a successful `delete` repeat the entry extraction too. Insertion " +"calls `find`, `take_free`, allocation and `inserted`; allocation can move " +"every relevant object and discard the index. A view valid before allocation " +"cannot be carried into the publication step." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:181 +msgid "" +"The duplicate loads are removable on a callback-free path. However, just " +"returning the validated entry pointer and bypassing generic array access " +"would retain the address-keyed owner registry in `weakref/index.rs`. That " +"does not satisfy the widened requirement that the collection own all of its " +"storage and object facts live in Shapes." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:187 +msgid "" +"The existing ordinary object header has no owned-index field. Subclasses " +"retain their own class IDs, use parent-class registry traversal for weak " +"branding, and find `__perry_wk_entries` through a potentially allocating by-" +"name property access. Native payloads are also not a drop-in replacement: " +"`native_payload.rs` and `docs/native-payload-pattern.md` forbid JS values, " +"NaN-boxed bits and GC pointers in `Box`. Nothing traces or rewrites those " +"contents. Moving the current raw key index there would invalidate its " +"relocation and address-reuse safety argument." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:196 +#, fuzzy +msgid "Proposed ownership" +msgstr "Propiedad de Arena" + +#: src/internals/weakmap-owned-index-design.md:198 +msgid "" +"The Shape must carry the actual internal collection brand, storage location " +"and entry layout. This is initialized by the builtin constructor or " +"`super()`, not inferred from names or a prototype chain. Preserve these " +"facts through own-property changes, dictionary transitions, representation " +"changes and `Object.setPrototypeOf`. Inheriting `WeakMap.prototype` alone " +"must never install the brand. A Proxy over a WeakMap does not acquire its " +"internal slots." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:205 +msgid "" +"Keep the user-visible object and its existing header layout. Add an owned, " +"GC-managed storage cell reachable through a dedicated internal edge. Decide " +"the exact attachment representation together with the Shape schema: an " +"internal slot must not become a writable user property or depend on a " +"reserved spelling. Do not add a word or allocation to ordinary objects. " +"`ObjectMeta.native_state` is a candidate attachment point, but using it " +"needs an explicit typed-storage contract and audit of its current owners; it " +"is not permission to violate the native payload contract." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:214 +msgid "The storage cell owns:" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:216 +msgid "The authoritative entry storage and its capacity/live/free counts." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:217 +msgid "" +"Open-addressed buckets containing entry offsets and empty/tombstone scalars, " +"not extra copies of GC pointer bits." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:219 +msgid "Reusable entry offsets, with no owner-address lookup." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:221 +msgid "" +"Each occupied bucket selects an authoritative entry. Compare that entry's " +"current key to resolve collisions and recognize tombstones. No separate last-" +"key cache or memo is needed. Key and value words remain GC-visible under " +"their weak/conditional semantics. Dead owners release all storage by " +"ordinary reachability, without a persistent owner registry or cleanup latch." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:227 +msgid "" +"The existing Shape kind uses all eight codes in its three-bit encoding. " +"Collection branding must be a deliberate Shape identity extension, not an " +"unreviewed ninth kind, a numeric collision or a parallel brand map. Prefer a " +"sparse extension for collection Shapes; measure its cost and preservation " +"through transitions before choosing its final encoding." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:233 +msgid "One operation, one proof" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:235 +msgid "" +"Build a scoped `WeakCollectionView` from one receiver classification and " +"Shape lookup. The view carries a resolved storage pointer, entries pointer, " +"length/capacity and the exact layout needed for direct bounded loads. " +"Resolve forwarding before constructing it. It lives only within a proven non-" +"collecting, callback-free region." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:241 +msgid "" +"An internal brand does not prove which method a JS call selected. Own and " +"prototype overrides, accessors and their invalidation remain ordinary " +"dispatch. Construct the fast view only after the genuine intrinsic was " +"selected; borrowed intrinsic methods still perform the internal brand check." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:246 +msgid "" +"Classify the key once into a valid weak identity or an invalid primitive. " +"Retain non-registered and well-known symbol keys, and reject registered " +"symbols. Preserve every currently supported object representation: ordinary " +"objects, closures, class references, native objects, stream/async resources, " +"typed arrays, buffers and Proxy identities. Primitive insertion throws " +"TypeError; primitive `get`, `has` and `delete` return undefined/false. Avoid " +"probing symbol registries for receivers whose own header proves that they " +"are another kind." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:255 +msgid "" +"Probe once and return a validated entry/key/value result, not an offset that " +"the caller must independently revalidate. Keep collision equality, bounds, " +"key liveness and the existing key/value weak read barriers. A pending weak " +"slice may have tombstoned a bucket's entry since the previous JS operation; " +"that validation is necessary even when length has not changed." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:261 +msgid "" +"`has(a)` and `get(a)` remain two independent JS operations. Each pays one " +"lookup. There is no cross-call proof or cached pointer surviving a " +"safepoint. Rooted slow paths remain for allocation, storage growth and " +"foreign receiver delegation. Insertion reloads roots and reconstructs its " +"view after every collecting operation before publishing the new bucket." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:267 +msgid "Collector work required" +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:269 +msgid "" +"Moving GC must repair authoritative live keys and values and then rehash " +"address-dependent buckets before the mutator resumes. Rebuild in place from " +"entry offsets using the existing capacity; do not allocate a second index or " +"retain stale address bits until a later call. Integrate this ordering with " +"copying nursery, promotion, full relocation and evacuation verification. " +"Weak processing between incremental slices must tombstone both entry words; " +"subsequent reads still validate the entry and reclaim its bucket/free slot." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:277 +msgid "" +"Discover collection storage through traced Shape-owned internal edges. " +"Collector-local pending work can hold the storage during a cycle; it must " +"not become a persistent mutator-side collection registry. Remove WeakMap/ " +"WeakSet entry dependence on `WEAK_HOLDERS` as part of this migration while " +"preserving WeakRef and FinalizationRegistry behavior outside this lane." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:283 +msgid "" +"There is a confirmed correctness gap to resolve before claiming ephemeron " +"preservation. `is_weak_branded_target_trace_slot` excludes entry field 0 " +"(the key), but field 1 (the value) is visited as a strong edge. " +"`process_weak_entry_after_mark` clears that value only after key liveness " +"has been decided. A value-to-key backedge preserves its own key on baseline. " +"The retained diagnostic witness tests `wm.set(key, key)` with only the map " +"rooted and asserts an actual copying collection before checking that the " +"entry cleared. Its measured outcome is recorded with the lane evidence." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:292 +msgid "" +"A correct ephemeron collector traces the value only once its key is " +"independently live. Pending ephemerons need a fixed point: a value can keep " +"another collection's key alive. Cover full tracing, copying minors, old-key/ " +"young-value entries, remembered-set scanning, incremental writes and reads, " +"remark, and deletion. Simply making both words weak would lose live values; " +"tracing values unconditionally would keep dead key cycles alive. This work " +"changes the collector protocol and cannot be hidden in an array accessor " +"optimization." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:301 +#, fuzzy +msgid "Implementation and acceptance sequence" +msgstr "Nota sobre la aplicación" + +#: src/internals/weakmap-owned-index-design.md:303 +msgid "" +"Add deterministic GC witnesses for direct/indirect value-to-key cycles, " +"multi-map ephemeron chains, strongly live keys and movement. Assert that the " +"tested collector actually copied or completed the relevant weak phase." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:306 +msgid "" +"Establish Shape-owned internal branding and storage attachment, including " +"subclasses, transition preservation, Proxy brand rejection and reflection." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:308 +msgid "" +"Implement owned buckets and the collector trace/rewrite/rehash protocol. " +"Delete the address-keyed index and its clearing hooks in the same change." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:310 +msgid "" +"Implement the scoped view and validated-hit return for get/has/overwrite/ " +"delete, then the rooted insertion path. Keep foreign receiver dispatch." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:312 +msgid "" +"Run Node 26.5.1 parity for invalid keys, fresh/registered/well-known " +"symbols, identity, deletion, re-set, many keys, subclasses, borrowed " +"methods, forged prototypes and exotic receiver/key cases." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:315 +msgid "" +"Run the runtime suite single-threaded and all scoped gap tests. Run codegen " +"tests if codegen changes, formatting, Node-version consistency and the " +"current GC effect checker if FFI signatures or effects change." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:318 +msgid "" +"Build pristine main and fix in separate targets with identical package sets. " +"Verify source and archive hashes. Compile the exact Effect barrel benchmark " +"when it works on main; otherwise retain the diagnostic import and clearly " +"report the exact-source blocker." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:322 +msgid "" +"Interleave at least ten runs per arm with ASLR disabled and CPU affinity " +"fixed. Include identical-binary controls, uninstrumented instruction/cycle/ " +"RSS measurements and separate GC counts. Required matrix: weakmap-get, " +"Effect, hello, object-create, method-calls, closure, object-property, Zod, " +"TypeScript, qs parse/stringify, commander and fastify. Reuse the real-" +"program harness, not a replacement workload with different semantics." +msgstr "" + +#: src/internals/weakmap-owned-index-design.md:329 +msgid "" +"The owner-approved PERF_POLICY_2026-10-06.md replaces the old fixed " +"percentage/byte gates. The 2026-10-07 coordinator requests five interleaved " +"runs per label and ten for TypeScript, on qb6 measurement cores under the " +"shared lock, with ASLR disabled. Real-program deltas beyond same-binary " +"floors need named mechanisms; a larger real-program regression goes to the " +"owner. The current validation records the unresolved TypeScript CPU issue. " +"Historical design measurements above do not establish an implementation pass." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:1 +msgid "WeakMap owned storage: implementation validation" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:3 +msgid "" +"**Status: implementation complete; performance acceptance blocked by " +"TypeScript cycles. This is an unaccepted review candidate, not a shippable " +"performance change.**" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:6 +msgid "" +"The implementation is rebased onto pristine main " +"`68e41faa0f9145d8b8ab67ecb0cf414eaf13420b`. This includes c85c2db93 " +"(#12105), the LLVM statepoint-root correction. The rebase preserves main's " +"persistent-symbol GC type and census initializer; owned weak storage uses " +"the next free GC type (33). The root-holder inventory keeps both current-" +"main audits and conditional-tracing audits." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:12 +#, fuzzy +msgid "Root cause and implementation" +msgstr "Estado de la aplicación y la utilización de instrumentos" + +#: src/internals/weakmap-owned-index-validation.md:14 +msgid "" +"A hit previously revalidated generic array lengths and elements, searched an " +"external owner-address index, and then extracted the entry again. The GC " +"also followed a WeakMap value strongly before establishing independent key " +"liveness, allowing a value-to-key cycle to retain its own key (#12087)." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:19 +msgid "" +"WeakMap/WeakSet now own one GC storage cell through their object metadata. " +"Their intrinsic brand lives in the Shape and survives Shape transitions. " +"Authoritative key/value words remain in the cell; buckets and reverse " +"offsets contain scalar indices. Every get, has, set, and delete classifies " +"the key once, carries one validated view, and probes once. Growth roots " +"arguments and reloads them after allocation. The has/get pattern uses two " +"inexpensive independent probes without a last-key cache or external " +"ownership registry." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:27 +msgid "" +"Conditional ephemeron closure follows values only after independently live " +"keys. Moving collectors rewrite both words and rebuild identity buckets " +"before resuming the mutator. Weak writes maintain generational coverage " +"without unconditionally shading copied entries. Receiver-brand, exotic-key, " +"symbol, WeakRef, and FinalizationRegistry checks remain in place." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:33 +msgid "Measurement method" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:35 +msgid "" +"Fresh main and fix compiler/runtime/stdlib static wrappers use separate " +"targets on qb6. Compiles use CPUs 0–55 and at most eight workers. All source " +"files in both remote arms were checked against the local Git/source hashes " +"before building; TypeScript is explicitly compiled from its actual npm " +"source rather than routed to a native shim. The real-program sources were " +"copied unchanged from the captures2 lane; nothing was written there." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:42 +msgid "" +"Each acceptance row uses five main, five fix, and five identical-main floor " +"runs, with randomized interleaving; TypeScript has ten of each. Measurement " +"batches hold qb6's MEASURE.lock, pin CPU 56 within the reserved 56–63 set, " +"and disable ASLR. Batches are limited to 45 minutes with TypeScript, " +"otherwise 30 minutes. `instructions:u` and `cycles:u` are perf user-mode " +"counters. CPU is perf task-clock in milliseconds and is informational; RSS " +"is GNU time peak KiB. Acceptance follows the owner-approved " +"PERF_POLICY_2026-10-06.md, which replaces fixed per-axis ceilings: explain " +"real-program deltas beyond the same-binary floor, retain correct Shape/" +"ownership architecture, and name a fix-forward plan for any small " +"architectural regression. Signed identical-main floors are reported " +"separately for instructions, cycles, and RSS." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:54 +msgid "" +"GC counts accompany RSS but come from three separate runs of the same " +"uninstrumented executable. A ptrace reader stops its own child only at exec " +"and exit, then reads the runtime's existing GC_STATS TLS. It adds no mutator " +"counter or collection hook. The constant-output hello binary contains no " +"runtime and performs zero collections. Diagnostic GC logs and DWARF profiles " +"are separate from acceptance counter/RSS runs." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:61 +msgid "" +"The Effect input uses exactly `import { Schema } from \"effect\"`, pinned to " +"4.0.0-beta.83, constructs 2000 schemas and decodes 20000 values. Both arms " +"must print `ok=20000`. Zod runs 5000 parses. Package versions are Node " +"26.5.1, Bun 1.3.14, Zod 3.25.76, TypeScript 5.9.3, qs 6.16.0, Commander " +"15.0.0, and Fastify 5.12.5." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:66 +msgid "" +"The coordinator-directed buffer_heavy/worker_heavy skips are recorded: both " +"fail on main and belong to other sessions. They were not patched or " +"substituted." +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:69 +msgid "A/B medians" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "Instructions M main → fix (Δ%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "Cycles M main → fix (Δ%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "CPU ms main → fix" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "RSS KiB main → fix (Δ KiB)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:71 +msgid "Minor/full GC main → fix" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +#: src/internals/weakmap-owned-index-validation.md:95 +msgid "weakmap-get" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +msgid "825.229 → 240.689 (-70.834%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +msgid "287.808 → 84.158 (-70.759%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +msgid "79.770 → 25.680" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +#: src/internals/weakmap-owned-index-validation.md:75 +msgid "24304 → 23868 (-436)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:73 +#: src/internals/weakmap-owned-index-validation.md:74 +#: src/internals/weakmap-owned-index-validation.md:75 +#: src/internals/weakmap-owned-index-validation.md:76 +#: src/internals/weakmap-owned-index-validation.md:77 +#: src/internals/weakmap-owned-index-validation.md:79 +#: src/internals/weakmap-owned-index-validation.md:80 +#: src/internals/weakmap-owned-index-validation.md:81 +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "0/0 → 0/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +#: src/internals/weakmap-owned-index-validation.md:96 +msgid "weakmap-hit-pair" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +msgid "1613.228 → 432.439 (-73.194%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +msgid "564.394 → 148.638 (-73.664%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +msgid "154.790 → 42.670" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:74 +msgid "24308 → 23868 (-440)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:75 +#: src/internals/weakmap-owned-index-validation.md:97 +msgid "weakmap-set" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:75 +msgid "1193.232 → 278.189 (-76.686%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:75 +msgid "239.388 → 57.333 (-76.050%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:75 +msgid "66.010 → 17.750" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +#: src/internals/weakmap-owned-index-validation.md:98 +msgid "weakset-has" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +msgid "822.230 → 231.189 (-71.883%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +msgid "160.580 → 45.933 (-71.396%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +msgid "45.940 → 15.050" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:76 +#: src/internals/weakmap-owned-index-validation.md:77 +msgid "23860 → 24312 (+452)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:77 +#: src/internals/weakmap-owned-index-validation.md:99 +msgid "weakset-add" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:77 +msgid "1330.230 → 294.189 (-77.884%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:77 +msgid "265.585 → 59.065 (-77.760%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:77 +msgid "73.290 → 18.190" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "24436.351 → 22754.859 (-6.881%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "8839.858 → 8271.501 (-6.429%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "2375.020 → 2224.220" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "189392 → 181676 (-7716)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:78 +msgid "18/2 → 24/1" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:79 +msgid "0.250 → 0.250 (+0.000%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:79 +msgid "0.390 → 0.391 (+0.256%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:79 +msgid "0.870 → 0.880" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:79 +msgid "1592 → 1592 (+0)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:80 +msgid "32.734 → 32.734 (-0.000%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:80 +msgid "17.377 → 17.111 (-1.532%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:80 +msgid "7.050 → 6.960" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:80 +msgid "26968 → 26556 (-412)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:81 +msgid "61.129 → 61.129 (+0.001%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:81 +msgid "121.627 → 121.611 (-0.013%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:81 +msgid "34.470 → 34.450" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:81 +msgid "23900 → 23776 (-124)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "250.981 → 250.982 (+0.000%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "151.436 → 151.478 (+0.028%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "41.910 → 41.940" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:82 +msgid "14588 → 14724 (+136)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "174.054 → 174.087 (+0.019%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "39.675 → 39.389 (-0.719%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "13.680 → 13.520" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "34136 → 33692 (-444)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:83 +msgid "1/0 → 1/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +#: src/internals/weakmap-owned-index-validation.md:106 +msgid "zod" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "1328.640 → 1331.206 (+0.193%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "434.689 → 435.059 (+0.085%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "118.850 → 118.900" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "50724 → 50748 (+24)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:84 +msgid "6/0 → 6/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +#: src/internals/weakmap-owned-index-validation.md:107 +msgid "tsc" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +msgid "256258.986 → 256757.935 (+0.195%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +msgid "94816.300 → 98686.655 (+4.082%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +msgid "25311.570 → 26327.035" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +msgid "271152 → 271512 (+360)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:85 +#: src/internals/weakmap-owned-index-validation.md:224 +msgid "26/14 → 26/14" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +#: src/internals/weakmap-owned-index-validation.md:108 +msgid "qs_parse_nested" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "22306.853 → 21645.601 (-2.964%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "7955.556 → 7618.069 (-4.242%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "2115.530 → 2026.040" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "52608 → 52436 (-172)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:86 +msgid "129/0 → 130/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +#: src/internals/weakmap-owned-index-validation.md:109 +msgid "qs_stringify_nested" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +msgid "57116.054 → 51186.191 (-10.382%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +msgid "17106.529 → 15278.690 (-10.685%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +msgid "4537.630 → 4055.180" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +msgid "54020 → 52216 (-1804)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:87 +#: src/internals/weakmap-owned-index-validation.md:225 +msgid "439/0 → 408/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +#: src/internals/weakmap-owned-index-validation.md:110 +#, fuzzy +msgid "commander_parse_argv" +msgstr "commander (análisis de CLI)" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "7151.612 → 7156.157 (+0.064%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "2694.822 → 2706.840 (+0.446%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "718.050 → 720.570" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "46124 → 46264 (+140)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:88 +msgid "31/0 → 31/0" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +#: src/internals/weakmap-owned-index-validation.md:111 +#, fuzzy +msgid "fastify_inject" +msgstr "`fastify`" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "109761.894 → 109700.164 (-0.056%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "43309.484 → 43223.539 (-0.198%)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "11531.300 → 11506.350" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "254544 → 254868 (+324)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:89 +msgid "11/1 → 11/1" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:91 +msgid "Signed identical-main floor/main median deltas:" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:93 +#, fuzzy +msgid "Instructions floor %" +msgstr "Instrucciones de Compilación" + +#: src/internals/weakmap-owned-index-validation.md:93 +msgid "Cycles floor %" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:93 +msgid "RSS floor % (KiB)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:95 +msgid "\\-0.00009" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:95 +msgid "+0.429" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:95 +#: src/internals/weakmap-owned-index-validation.md:96 +#: src/internals/weakmap-owned-index-validation.md:98 +#: src/internals/weakmap-owned-index-validation.md:99 +#: src/internals/weakmap-owned-index-validation.md:101 +#: src/internals/weakmap-owned-index-validation.md:102 +#: src/internals/weakmap-owned-index-validation.md:103 +#: src/internals/weakmap-owned-index-validation.md:105 +#: src/internals/weakmap-owned-index-validation.md:106 +#: src/internals/weakmap-owned-index-validation.md:108 +#: src/internals/weakmap-owned-index-validation.md:109 +msgid "+0.000 (+0)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:96 +msgid "+0.00008" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:96 +msgid "\\-1.643" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:97 +msgid "\\-0.00005" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:97 +msgid "\\-0.149" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:97 +msgid "+0.016 (+4)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:98 +msgid "\\-0.00002" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:98 +msgid "+0.671" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:99 +msgid "+0.00001" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:99 +msgid "\\-0.227" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:100 +msgid "\\-0.00052" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:100 +msgid "+1.863" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:100 +msgid "\\-0.106 (-200)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:101 +msgid "+0.00040" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:101 +msgid "\\-0.369" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:102 +msgid "+0.00049" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:102 +msgid "\\-1.402" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:103 +msgid "\\-0.00003" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:103 +msgid "\\-0.046" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:104 +#, fuzzy +msgid "\\-0.00000" +msgstr "\"#000000\"" + +#: src/internals/weakmap-owned-index-validation.md:104 +msgid "\\-0.025" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:104 +msgid "\\-0.027 (-4)" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:105 +msgid "\\-0.00012" msgstr "" -#: src/internals/memory-model.md:305 -msgid "Source map" -msgstr "Mapa de fuentes" +#: src/internals/weakmap-owned-index-validation.md:105 +msgid "+0.466" +msgstr "" -#: src/internals/memory-model.md:307 -msgid "" -"Paths, not line numbers: a line number is a claim nothing re-derives, and " -"every row of this table once pointed into a `gc.rs` that no longer exists." +#: src/internals/weakmap-owned-index-validation.md:106 +msgid "\\-0.00080" msgstr "" -"Rutas, no números de línea: un número de línea es una reclamación que no " -"vuelve a derivarse, y cada fila de esta tabla una vez apuntaba a un `gc.rs` " -"que ya no existe." -#: src/internals/memory-model.md:310 -msgid "Topic" -msgstr "Tema" +#: src/internals/weakmap-owned-index-validation.md:106 +msgid "\\-0.104" +msgstr "" -#: src/internals/memory-model.md:310 -msgid "Symbol to look for" -msgstr "Símbolo a buscar" +#: src/internals/weakmap-owned-index-validation.md:107 +msgid "+0.00204" +msgstr "" -#: src/internals/memory-model.md:312 -msgid "NaN-boxing tags" -msgstr "NaN-boxing tags" +#: src/internals/weakmap-owned-index-validation.md:107 +msgid "\\-0.186" +msgstr "" -#: src/internals/memory-model.md:312 -msgid "`crates/perry-runtime/src/value/tags.rs`" -msgstr "`crates/perry-runtime/src/value/tags.rs`" +#: src/internals/weakmap-owned-index-validation.md:107 +msgid "+0.641 (+1738)" +msgstr "" -#: src/internals/memory-model.md:312 -msgid "`POINTER_TAG`, `STRING_TAG`" -msgstr "`POINTER_TAG`, `STRING_TAG`" +#: src/internals/weakmap-owned-index-validation.md:108 +msgid "+0.00078" +msgstr "" -#: src/internals/memory-model.md:313 -msgid "`GcHeader`, type/flag constants" -msgstr "`GcHeader`, constantes de tipo/flag" +#: src/internals/weakmap-owned-index-validation.md:108 +msgid "+1.638" +msgstr "" -#: src/internals/memory-model.md:313 -msgid "`crates/perry-runtime/src/gc/types.rs`" -msgstr "`crates/perry-runtime/src/gc/types.rs`" +#: src/internals/weakmap-owned-index-validation.md:109 +msgid "+0.00134" +msgstr "" -#: src/internals/memory-model.md:313 -msgid "`GcHeader`" -msgstr "`GcHeader`" +#: src/internals/weakmap-owned-index-validation.md:109 +msgid "\\-0.464" +msgstr "" -#: src/internals/memory-model.md:314 -msgid "`gc_malloc`" -msgstr "`gc_malloc`" +#: src/internals/weakmap-owned-index-validation.md:110 +msgid "+0.01583" +msgstr "" -#: src/internals/memory-model.md:314 -msgid "`crates/perry-runtime/src/gc/malloc.rs`" -msgstr "`crates/perry-runtime/src/gc/malloc.rs`" +#: src/internals/weakmap-owned-index-validation.md:110 +msgid "\\-0.056" +msgstr "" -#: src/internals/memory-model.md:315 -msgid "Shadow frames (fallback root lowering)" -msgstr "Marcos de sombras (reducción de la raíz de retroceso)" +#: src/internals/weakmap-owned-index-validation.md:110 +msgid "\\-0.009 (-4)" +msgstr "" -#: src/internals/memory-model.md:315 -msgid "`crates/perry-runtime/src/gc/roots/shadow_stack.rs`" -msgstr "`crates/perry-runtime/src/gc/roots/shadow_stack.rs`" +#: src/internals/weakmap-owned-index-validation.md:111 +msgid "+0.01990" +msgstr "" -#: src/internals/memory-model.md:315 -msgid "`js_shadow_frame_push`" -msgstr "`js_shadow_frame_push`" +#: src/internals/weakmap-owned-index-validation.md:111 +msgid "\\-0.144" +msgstr "" -#: src/internals/memory-model.md:316 -msgid "Registered root scanners" -msgstr "Escáneres de raíces registrados" +#: src/internals/weakmap-owned-index-validation.md:111 +msgid "\\-0.024 (-60)" +msgstr "" -#: src/internals/memory-model.md:316 -msgid "`crates/perry-runtime/src/gc/roots.rs`" -msgstr "`crates/perry-runtime/src/gc/roots.rs`" +#: src/internals/weakmap-owned-index-validation.md:113 +msgid "Why Effect performs more minor collections" +msgstr "" -#: src/internals/memory-model.md:316 -msgid "`gc_register_mutable_root_scanner`" -msgstr "`gc_register_mutable_root_scanner`" +#: src/internals/weakmap-owned-index-validation.md:115 +msgid "" +"The historical 10 → 25 total was 8 minor/2 full → 24 minor/1 full. The main " +"arm then retained value-to-key cycles because WeakMap values were strongly " +"traced before key liveness was known. Conditional tracing removes that false " +"reachability. The existing nursery retuner shrinks after two cycles with " +"less than 1% Eden survival; the historical fix consequently shrunk from " +"scale 16/4 to 1/4, while that main run ended before satisfying both low-" +"survival cycles. More roughly 4 MiB minors were expected from this unchanged " +"policy, rather than additional JS work or a new pacing heuristic." +msgstr "" -#: src/internals/memory-model.md:317 -msgid "Copying minor" -msgstr "Copiar menor" +#: src/internals/weakmap-owned-index-validation.md:124 +msgid "" +"The baseline-shifting #12105 merge requires fresh counts. On the current " +"baseline they are 18 minor/2 full → 24 minor/1 full (20 → 25 total), and " +"both arms eventually shrink their nursery. The fix's avoided second full is " +"partly replaced by small minors. At the first full, main retains 15,914,632 " +"bytes (15,333,120 mature), versus 6,011,240 (5,999,016 mature) with " +"conditional tracing. Allocation debt at that point is nearly equal: " +"134,987,032 versus 135,084,352 bytes (+0.072%). The fix shrinks 16/4 → 1/4 " +"at 4200 Eden-live bytes; its resulting nursery band is 3,783,262 bytes." +msgstr "" -#: src/internals/memory-model.md:317 -msgid "`crates/perry-runtime/src/gc/copying.rs`" -msgstr "`crates/perry-runtime/src/gc/copying.rs`" +#: src/internals/weakmap-owned-index-validation.md:133 +msgid "" +"The storage representation also moves the identity buckets into GC " +"ownership: large GC allocation accounting at the first full is 1,540,352 → " +"5,435,840 bytes. The old external index bytes were outside that accounting. " +"This is a representation change, not an external cache or independently " +"retained key. No nursery sizing, tenuring, full-GC threshold, or reclaim " +"policy was changed. The whole-program instruction/cycle/RSS measurements " +"decide the net cost; collection count alone is not a performance regression." +msgstr "" -#: src/internals/memory-model.md:317 -msgid "`move_young`" -msgstr "`move_young`" +#: src/internals/weakmap-owned-index-validation.md:141 +msgid "Mechanisms and remaining acceptance issue" +msgstr "" -#: src/internals/memory-model.md:318 -msgid "Whole-block in-place promotion" -msgstr "Promoción de todo el bloque en el lugar" +#: src/internals/weakmap-owned-index-validation.md:143 +msgid "" +"Effect and the WeakMap/WeakSet repros remove repeated generic entries-array " +"validation, the address-owner index, and entry extraction after lookup. The " +"instruction profiles identify `index::find`, `js_array_length`, and " +"`js_array_get_f64` below the old WeakMap hits; those descendants disappear " +"from the new hits. On sampled Effect instructions, weak-operation ancestry " +"falls from 4.31% to 0.87%. These are sampled ancestry shares, not additive " +"whole-program counter budgets: recording was throttled and does not cover " +"the whole executed instruction stream. Unprofiled perf-stat rows above are " +"the acceptance measurements." +msgstr "" -#: src/internals/memory-model.md:318 -msgid "`crates/perry-runtime/src/arena/promote.rs`" -msgstr "`crates/perry-runtime/src/arena/promote.rs`" +#: src/internals/weakmap-owned-index-validation.md:153 +msgid "" +"The qs drivers execute `side-channel-weakmap` through borrowed prototype " +"methods. Both time profiles show its calls below get/has/set; the old " +"`index::find`/free-slot index paths disappear in fix. Stringify also " +"allocates fewer GC entry objects: its minor count falls 439 to 408, with no " +"full collection in either arm. Parse has 129 to 130 minors, but its " +"instructions, cycles, and RSS all decrease. The extra minor is a collection-" +"boundary change, not a new pacing policy. The THP-disabled stringify check " +"is recorded below because its primary RSS delta is close to 2 MiB." +msgstr "" -#: src/internals/memory-model.md:318 -msgid "`finish_in_place_promotion`" -msgstr "`finish_in_place_promotion`" +#: src/internals/weakmap-owned-index-validation.md:162 +msgid "" +"Zod's +0.193% instructions and Commander's +0.064% are small architectural " +"costs in ordinary-object workloads: intrinsic weak-brand admission now reads " +"the Shape instead of accepting inherited class identity, and traced objects " +"encounter the additional owned-weak-storage type decision. Zod executes " +"96,351 `collection_brand` calls in a separate GDB count; main executes " +"228,608 parent-class queries across all callers. Its instruction profile " +"moves the parent-class-query self share from 1.13% to 0.57% and introduces " +"0.67% Shape-brand reads. Both arms have six minor collections. This " +"identifies the changed admission/trace work; it is not a claim that " +"profiling apportions every one of the 2.57M extra instructions exactly. " +"Commander likewise keeps 31 minor/0 full collections. Fix-forward: " +"coordinate with native-family to carry one admitted ObjectHeader/Shape proof " +"through weak-brand dispatch, and with the GC scan owner to carry the already-" +"read GC kind into conditional tracing. Keep all wrong-brand and exotic-" +"receiver checks; add no cache or name-based shortcut." +msgstr "" -#: src/internals/memory-model.md:319 -msgid "Promotion policy" -msgstr "Política de promoción" +#: src/internals/weakmap-owned-index-validation.md:178 +msgid "" +"Fastify's instruction/cycle decreases are small, but exceed their recorded " +"floors. Its generic method dispatch now uses the Shape weak-brand negative " +"check; profiles show parent-class-query self share 0.51% to 0.34% and the " +"new Shape read at 0.19%. The full/minor regime remains 1/11. Its +324 KiB " +"peak RSS is accompanied by +336 KiB file-backed residency in the separate " +"exit snapshot, consistent with changed code residency. Zod (+24 KiB) and " +"Commander (+140 KiB) also have unchanged GC regimes and larger file-backed " +"residency; no ordinary-object or Shape header was enlarged." +msgstr "" -#: src/internals/memory-model.md:319 -msgid "`crates/perry-runtime/src/gc/promote_in_place.rs`" -msgstr "`crates/perry-runtime/src/gc/promote_in_place.rs`" +#: src/internals/weakmap-owned-index-validation.md:187 +msgid "" +"The short controls have file-backed residency changes, not a per-object " +"storage tax. For the closure control, the sampled RSS peak has 8784 to 8788 " +"KiB anonymous memory, while file residency changes by hundreds of KiB. " +"WeakSet-has has exactly 17004 KiB anonymous memory at both sampled peaks; " +"its file-backed peak varies with code-page residency. The linked text grows " +"by 15,184 bytes for WeakSet-has and 15,160 bytes for the closure control; " +"ordinary ObjectHeader and ShapeRecord remain 64 bytes. Primary micro RSS " +"increases are +452 KiB for both WeakSet rows and +136 KiB for closure. These " +"are logged under the replacement policy, not rejected using the old " +"percentage/256-KiB gate. Follow-up for the layout owner: measure transient " +"bootstrap image residency and placement on these tiny executables." +msgstr "" -#: src/internals/memory-model.md:319 -msgid "`PROMOTE_SURVIVAL_THRESHOLD_PERMILLE`" -msgstr "`PROMOTE_SURVIVAL_THRESHOLD_PERMILLE`" +#: src/internals/weakmap-owned-index-validation.md:199 +msgid "" +"TypeScript is the unresolved acceptance issue. Its ten-run primary row is " +"+0.195% instructions, +4.082% cycles, +360 KiB RSS; the identical-main " +"floors are +0.00204% instructions, -0.186% cycles, and +1738 KiB RSS. Both " +"arms have 26 minor and 14 full collections. All 31,025 generated TypeScript " +"functions have equal sizes; 30,782 change addresses by -1648 bytes when the " +"runtime is relinked. A separate three-round hardware-counter diagnostic " +"reproduces +4.46% cycles and shows cache misses 388.9M to 448.0M (+15.2%), " +"versus an identical-main floor of -5.0%; branch misses rise 107.7M to " +"119.1M. This points to changed code/data placement and cache locality, " +"rather than extra JS work or additional collections. It does not yet isolate " +"which placement change is responsible. The THP-disabled diagnostic below " +"tests the page-step alternative. A remaining multi-percent real-program CPU " +"regression requires owner review under policy section 4; it is not silently " +"accepted because instructions are primary or because the other workloads " +"improve." +msgstr "" -#: src/internals/memory-model.md:320 -msgid "Adaptive tenuring threshold" -msgstr "Umbral de mantenimiento adaptativo" +#: src/internals/weakmap-owned-index-validation.md:214 +msgid "THP-disabled diagnostics" +msgstr "" -#: src/internals/memory-model.md:320 -msgid "`crates/perry-runtime/src/gc/tenuring.rs`" -msgstr "`crates/perry-runtime/src/gc/tenuring.rs`" +#: src/internals/weakmap-owned-index-validation.md:216 +msgid "" +"The original TypeScript RSS floor is +1738 KiB and stringify's RSS delta is " +"\\-1804 KiB, so both were checked with per-process `PR_SET_THP_DISABLE`, " +"without changing the host's global THP policy. The child snapshots confirm " +"**AnonHugePages=0 KiB** in both arms. These are additional diagnostics, not " +"substitutes for the ten-run TypeScript primary row." +msgstr "" -#: src/internals/memory-model.md:320 -msgid "`tenuring_survivals`" -msgstr "`tenuring_survivals`" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "Program / runs per label" +msgstr "" -#: src/internals/memory-model.md:321 -msgid "Write barriers" -msgstr "Barreras de escritura" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "Instructions M main → fix (Δ%; floor)" +msgstr "" -#: src/internals/memory-model.md:321 -msgid "`crates/perry-runtime/src/gc/barrier_store.rs`" -msgstr "`crates/perry-runtime/src/gc/barrier_store.rs`" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "Cycles M main → fix (Δ%; floor)" +msgstr "" -#: src/internals/memory-model.md:321 -msgid "`runtime_write_barrier_slot`" -msgstr "`runtime_write_barrier_slot`" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "RSS KiB main → fix (Δ KiB; floor)" +msgstr "" -#: src/internals/memory-model.md:322 -msgid "Explicit pinning" -msgstr "Pinzas explícitas" +#: src/internals/weakmap-owned-index-validation.md:222 +msgid "Minor/full main → fix" +msgstr "" -#: src/internals/memory-model.md:322 -msgid "`crates/perry-runtime/src/gc/pin.rs`" -msgstr "`crates/perry-runtime/src/gc/pin.rs`" +#: src/internals/weakmap-owned-index-validation.md:224 +#, fuzzy +msgid "TypeScript / 3" +msgstr "TypeScript" -#: src/internals/memory-model.md:322 -msgid "`pin_object`" -msgstr "`pin_object`" +#: src/internals/weakmap-owned-index-validation.md:224 +msgid "256204.837 → 256750.533 (+0.213%; +0.00233%)" +msgstr "" -#: src/internals/memory-model.md:323 -msgid "Conservative-pin predicate" -msgstr "Conservador-pin predicado" +#: src/internals/weakmap-owned-index-validation.md:224 +msgid "96511.768 → 98725.429 (+2.294%; -1.021%)" +msgstr "" -#: src/internals/memory-model.md:323 -msgid "`crates/perry-runtime/src/gc/verify.rs`" -msgstr "`crates/perry-runtime/src/gc/verify.rs`" +#: src/internals/weakmap-owned-index-validation.md:224 +msgid "233788 → 234044 (+256; 0)" +msgstr "" -#: src/internals/memory-model.md:323 -msgid "`is_conservatively_pinned`" -msgstr "`is_conservatively_pinned`" +#: src/internals/weakmap-owned-index-validation.md:225 +#, fuzzy +msgid "qs stringify / 5" +msgstr "JSON-stringify" -#: src/internals/memory-model.md:324 -msgid "Collection triggers and pacing" -msgstr "Detonadores de recogida y estimulación" +#: src/internals/weakmap-owned-index-validation.md:225 +msgid "57116.016 → 51191.512 (-10.373%; +0.01536%)" +msgstr "" -#: src/internals/memory-model.md:324 -msgid "`crates/perry-runtime/src/gc/policy.rs`" -msgstr "`crates/perry-runtime/src/gc/policy.rs`" +#: src/internals/weakmap-owned-index-validation.md:225 +msgid "17080.877 → 15294.530 (-10.458%; -0.124%)" +msgstr "" -#: src/internals/memory-model.md:324 -msgid "`gc_check_trigger`" -msgstr "`gc_check_trigger`" +#: src/internals/weakmap-owned-index-validation.md:225 +msgid "27872 → 27096 (-776; 0)" +msgstr "" -#: src/internals/memory-model.md:325 -msgid "Current operations page" -msgstr "Operaciones actuales página" +#: src/internals/weakmap-owned-index-validation.md:227 +msgid "" +"Stringify still reduces RSS with THP disabled. The larger primary -1804 KiB " +"reduction is sensitive to huge-page residency; exit AnonHugePages is not a " +"measurement of residency at the RSS peak. TypeScript still has a multi-" +"percent cycle regression beyond its same-binary floor. Cache misses also " +"remain elevated with THP disabled (420.9M → 468.9M, +11.4%, versus a " +"\\-5.17% identical-main floor). The page-step hypothesis does not remove the " +"CPU blocker." +msgstr "" -#: src/internals/memory-model.md:325 -msgid "`docs/src/internals/garbage-collector.md`" -msgstr "`docs/src/internals/garbage-collector.md`" +#: src/internals/weakmap-owned-index-validation.md:235 +#, fuzzy +msgid "Node and Bun references" +msgstr "Barreras y referencias débiles" -#: src/internals/memory-model.md:326 -msgid "Design plan (historical)" -msgstr "Plan de diseño (histórico)" +#: src/internals/weakmap-owned-index-validation.md:237 +msgid "" +"Separate three-run exact-Effect references on the measurement core: Node " +"26.5.1: 3677.870M user instructions, 595.870 ms CPU, 211868 KiB RSS; Bun " +"1.3.14: 3303.585M user instructions, 516.430 ms CPU, 158780 KiB RSS. All " +"print `ok=20000`. Perry main/fix are 24436.351M / 22754.859M above." +msgstr "" -#: src/internals/memory-model.md:326 -msgid "`docs/generational-gc-plan.md`" -msgstr "`docs/generational-gc-plan.md`" +#: src/internals/weakmap-owned-index-validation.md:242 +msgid "" +"The same WeakMap-get source, with startup subtracted by instruction slopes, " +"costs **824.000 → 239.500 user instructions/iteration** on Perry (five runs " +"at 1M and 2M); current Node/Bun three-run slopes at 100M and 200M are " +"128.942 / 61.009. These are complete loop/selection/checksum pattern costs, " +"not naked runtime-helper counts, and Node's JIT tiers add variability. The " +"Perry/Node gap drops from 6.39x to 1.86x on this baseline. The historical " +"842/114 table remains historical rather than a fresh-baseline comparison." +msgstr "" -#: src/internals/memory-model.md:340 +#: src/internals/weakmap-owned-index-validation.md:250 +msgid "Acceptance and next work" +msgstr "" + +#: src/internals/weakmap-owned-index-validation.md:252 msgid "" -"Those rows are not decorative: each is bound to a `gc-symbol` marker above " -"and re-derived by `scripts/check_gc_doc_claims.py`, so a rename that leaves " -"this table behind fails `lint` instead of quietly pointing readers at " -"nothing." +"This change removes the external owner-address WeakMap index and strong " +"value tracing, replacing them with collection-owned storage and conditional " +"ephemeron tracing." msgstr "" -"Esas filas no son decorativas: cada una está unida a un marcador `gc-symbol` " -"arriba y re-derivada por `scripts/check_gc_doc_claims.py`, por lo que un " -"renombrado que deja esta mesa detrás falla `lint` en lugar de señalar " -"tranquilamente a los lectores a nada." -#: src/internals/regexp-program-cache.md:3 +#: src/internals/weakmap-owned-index-validation.md:256 msgid "" -"JavaScript RegExp construction uses Perex directly. There is one engine; " -"lookbehind, backreferences, and other accepted patterns share the same " -"construction path. `perex_construct.rs` retains eager syntax checking, so " -"invalid patterns still throw at construction and the first search does not " -"inherit deferred compilation work." +"The old control-RSS percentage gate no longer applies. All required programs " +"were built and measured, including the previously OOM-blocked actual " +"TypeScript package. The remaining blocker is its +4.082% primary cycles " +"(+2.294% with THP disabled), with instruction increases of +0.195% / " +"+0.213%. Section 4 of the replacement policy sends a larger real-program " +"regression to the owner; this result is neither an automatic pass nor the " +"old blanket +0.5%/256-KiB rejection. Increased cache misses are measured, " +"but the specific placement conflict is not isolated. Next work for the " +"layout/GC/native-family owners is to locate the added miss sites and " +"separate linking placement from necessary admission/trace work. Retain the " +"owned storage and conditional semantics; do not regain speed with an owner-" +"address registry, a last-key cache, a name-based shortcut, or unconditional " +"value tracing." msgstr "" -#: src/internals/regexp-program-cache.md:9 +#: src/internals/weakmap-owned-index-validation.md:269 msgid "" -"`regex/perex_cache.rs` retains immutable programs by source plus canonical " -"flags. The first lookup uses the source `StringHeader` identity and reads no " -"pattern bytes. An identity miss hashes the original bytes, then verifies " -"exact equality within the hash bucket. Independently allocated equal strings " -"share a program. Flags remain part of both keys; canonical ordering makes " -"`ig` and `gi` equivalent. Every new RegExp still owns its original source/" -"flags and independent `lastIndex`. Retained source strings are marked shared " -"to prevent unique-string append from modifying the cached pattern or " -"OriginalSource." +"The two-commit series and bundle preserve this complete implementation for " +"review. They are explicitly unaccepted until the CPU issue is resolved or " +"the owner decides the explained trade. Build targets are removed after all " +"evidence is copied. No push or PR is performed." msgstr "" -#: src/internals/regexp-program-cache.md:18 +#: src/internals/weakmap-owned-index-validation.md:274 +#, fuzzy +msgid "Correctness and repository checks" +msgstr "Números de corrección" + +#: src/internals/weakmap-owned-index-validation.md:276 msgid "" -"The cache holds at most 512 entries and 32 MiB of source/program payload. " -"Least-recently-used entries are evicted individually. Programs above the " -"byte limit remain usable through their RegExp owner without cache retention. " -"The cache registers its scanner before publishing its first root, so " -"programs that never construct a RegExp add no cache scanner work. Source and " -"program slots are mutable GC roots; evacuation rewrites them and rebuilds " -"the source-identity index. Content hashes are address independent." +"Fresh release runtime suite: fix **5208 passed, 0 failed, 5 ignored**; " +"integration test **1 passed**. Main: **5195 passed, 1 failed, 5 ignored**. " +"Main's pre-existing failure is `gc::tests::native_payload_streams::" +"z8_churn_releases_every_codec_at_completion_and_drops_every_payload`: all " +"4000 codecs/cells were released/finalized, but the anonymous-RSS warmup " +"threshold assertion saw 4,333,568 bytes growth. Fix's full suite passes; " +"there is no new runtime failure to excuse." msgstr "" -#: src/internals/regexp-program-cache.md:26 +#: src/internals/weakmap-owned-index-validation.md:284 msgid "" -"Perex's `ProgramWitness` lives beside the immutable words in each program GC " -"cell (upstream #10166/#10183). The first binding validates the words; " -"subsequent bindings use that witness in constant work, including bindings " -"from another RegExp sharing the cached program. Each operation still roots " -"its own program, so eviction, collection, and reentrant receiver " -"recompilation cannot invalidate an active search. No borrowed program slice " -"survives a safepoint. Scratch buffers remain operation-owned and charged to " -"the existing memory budget." +"Both #12087 witnesses compile on pristine main, pass their movement/control " +"preconditions, and fail at the intended assertions: the conditional value " +"keeps its own key alive (raw key remains non-undefined; the entry remains " +"live). Both pass with fix. The filtered fix run also passes indirect/cross-" +"map and Proxy-chain witnesses (four tests total). Main's source file is " +"restored by a trap after the failure proof." msgstr "" -#: src/internals/regexp-program-cache.md:34 +#: src/internals/weakmap-owned-index-validation.md:291 msgid "" -"Compound split/replace/match operations retain program and subject bindings " -"in `perex_api::Reuse`, checking the current receiver and program cell before " -"reuse. Within a compound operation, the previous position is reused only " -"with the same subject binding. Across JavaScript calls, upstream's four-" -"entry scalar position table can reuse a non-ASCII string's cursor when its " -"concealed address, lengths and heap generation still agree. Heap changes or " -"in-place length changes invalidate that identity. The table does not retain " -"a string or program. Validated heap strings use the existing counted-subject " -"path." +"All six previously Node-matching weak-area files still match. The new 72-" +"line behavior matrix matches Node on fix both normally and under " +"`PERRY_GC_STRESS_SEED=7 PERRY_GC_STRESS_RATE=1 PERRY_GC_TRACE=1`: 57 actual " +"copying minors move **38,421 objects**. The existing " +"`test_issue_2656_weakref_finalization_gc.ts` differs from Node on both arms; " +"it is not a newly matching file or a newly introduced mismatch." msgstr "" -#: src/internals/regexp-program-cache.md:43 +#: src/internals/weakmap-owned-index-validation.md:298 msgid "" -"The fast builtin dispatch guard contains only immutable ShapeIds, field " -"indices, and epochs, with no untraced GC address. It verifies the current " -"builtin `exec` value, the receiver's metadata, expando table, and prototype. " -"Empty-string replacement additionally verifies builtin flags getters and " -"`Symbol.replace`, and requires primitive strings and numeric `lastIndex`. " -"Observable overrides take the ordinary dispatch path. Admitted replacements " -"use full-subject UTF-16 spans and preserve global/sticky index updates and " -"Unicode empty-match advancement, without allocating exec result arrays." +"`cargo fmt --all -- --check` and Node-version consistency pass. The root-" +"holder inventory has the same four pre-existing unregistered thread-local " +"declarations on main/fix: IN_SAMPLER, BLOCK_PERSIST_FORCE_MARKS, " +"TAPE_REGISTRY, TAPE_REGISTRY_NONEMPTY. Address-class audit failures match " +"main apart from source line shifts; file-size audit has the same six " +"offending paths/line counts on both arms. Their raw main/fix logs and " +"comparison proofs are retained. Do not present those existing failures as " +"green checks. No codegen file or extern-C signature/effect changed, so the " +"conditional codegen-suite and gc_call_effects requirements do not apply." msgstr "" -#: src/internals/regexp-program-cache.md:52 +#: src/internals/weakmap-owned-index-validation.md:308 msgid "" -"`PERRY_REGEX_DIAG=1` reports compile and validation counts, identity/content " -"hits, bytes hashed, canonical dispatches, searches, and scratch allocation " -"and growth counts. Diagnostics deliberately inspect source bytes for " -"attribution; measure timings with diagnostics disabled. Cache payload lives " -"in traced GC cells; the census separately reports native cache metadata as " -"`regex.program_cache`." +"Build inputs, compiler/static-wrapper/binary hashes, raw perf/time runs, " +"three-run GC snapshots, Node output parity, witness failures, and tests are " +"retained under scratchpad `weakmap/evidence-oct7`. The main source archive " +"comes from 68e41faa; the two targets are separate. No push or PR was made." msgstr "" #: src/internals/garbage-collector.md:1 @@ -79492,16 +82411,19 @@ msgid "Collection paths" msgstr "Rutas de recogida" #: src/internals/garbage-collector.md:27 -msgid "New GC-managed allocations normally enter 1 MiB nursery blocks" +#, fuzzy +msgid "" +"New GC-managed allocations normally enter nursery blocks of one aligned " +"region (2 MiB on Linux, 1 MiB elsewhere)" msgstr "" "Las nuevas asignaciones gestionadas por GC normalmente entran en 1 bloque de " "viveros MiB" -#: src/internals/garbage-collector.md:29 +#: src/internals/garbage-collector.md:30 msgid "A collection can take one of three paths:" msgstr "Una colección puede tomar uno de tres caminos:" -#: src/internals/garbage-collector.md:31 +#: src/internals/garbage-collector.md:32 msgid "" "**Copying minor.** At a precise safepoint, live young objects are copied, " "roots and heap slots are rewritten, and whole from-space blocks are reset. " @@ -79514,7 +82436,7 @@ msgstr "" "promovidos a `OLD_ARENA`. Este es el camino rápido del vivero, y tiene una " "variante de bloque entero que se describe a continuación." -#: src/internals/garbage-collector.md:35 +#: src/internals/garbage-collector.md:36 msgid "" "**Non-moving minor/fallback.** When collection begins somewhere that cannot " "safely relocate every live reference, the nursery is marked and swept in " @@ -79527,7 +82449,7 @@ msgstr "" "también utilizan una ruta que no se mueve. Esta es la ruta de los " "`HAS_SURVIVED` plano → `TENURED` par de bandera envejece objetos en." -#: src/internals/garbage-collector.md:39 +#: src/internals/garbage-collector.md:40 msgid "" "**Full mark-sweep.** Major pacing, critical host pressure, explicit full " "work, or `PERRY_GEN_GC=0` trace both generations and reclaim dead old " @@ -79537,7 +82459,7 @@ msgstr "" "del huésped, el trabajo completo explícito, o `PERRY_GEN_GC=0` trazan ambas " "generaciones y recuperan objetos viejos muertos, así como basura de vivero." -#: src/internals/garbage-collector.md:43 +#: src/internals/garbage-collector.md:44 msgid "" "**Block-granular reclamation in the full sweep.** A synchronous full sweep " "reclaims an arena block without entering it when the cycle's exact pointer " @@ -79551,13 +82473,30 @@ msgid "" "and bytes on each sweep's `[gc] blocks:` line." msgstr "" -#: src/internals/garbage-collector.md:56 +#: src/internals/garbage-collector.md:57 +msgid "" +"**The allocation-point trigger check.** `gc_check_trigger` runs on every " +"`gc_malloc` and every arena block fill, and nearly always finds nothing due. " +"An evaluation of its ladder (old-gen reclaim, whole arena, young scavenge " +"cap, malloc count) that finds nothing due publishes a watermark: the malloc-" +"count threshold, and the young cap re-expressed as a bound on the inline " +"allocator's current-block offset — the only two ladder quantities that move " +"without a runtime write. Until one is crossed, the next check is two loads " +"and two compares instead of the ladder. Every other input is a " +"`TriggerInput` cell whose writes retire the watermark, and heap-generation " +"advances and Eden block switches retire it too, so a skipped check is one " +"that would have returned without acting. Unit-test builds re-derive every " +"fast-path answer with the full ladder and fail on a mismatch (`crates/perry-" +"runtime/src/gc/trigger_watermark.rs`)." +msgstr "" + +#: src/internals/garbage-collector.md:72 msgid "" "**Per-live-object cost of a synchronous full.** Three parts of a full scale " "with the live set, and each has a cheaper exact form:" msgstr "" -#: src/internals/garbage-collector.md:59 +#: src/internals/garbage-collector.md:75 msgid "" "_Membership._ The census answers \"is this address an arena object start?\" " "from one object-start bitmap per censused block (one bit per 8-byte " @@ -79566,23 +82505,24 @@ msgid "" "one bit test." msgstr "" -#: src/internals/garbage-collector.md:64 +#: src/internals/garbage-collector.md:80 msgid "" -"_Remembered-set rebuild._ When no young object is marked or pinned after the " -"mark and the malloc registry is empty, the old→young rebuild could only " -"produce an empty set, so the full installs an empty set without walking the " -"old generation. `PERRY_GC_DIAG=1` prints `[gc-remembered-rebuild] full " -"skipped=young_generation_unmarked`." +"_Remembered-set rebuild._ Full mark drains record live old parents' strong " +"old→young and old→malloc slots through the same descriptor visit that marks " +"their children. The cycle buffers these entries until the remembered-set " +"clear, including entries from final remark and the sweep-entry seed drain. " +"The pre-clear dirty snapshot repair still covers later stores into parents " +"already traced. No second old-generation walk is needed." msgstr "" -#: src/internals/garbage-collector.md:69 +#: src/internals/garbage-collector.md:89 msgid "" "_Sweep page accounting._ Consecutive single-page old objects are summed and " "applied to their page's metadata once, before any page-index flush that " "could zero it." msgstr "" -#: src/internals/garbage-collector.md:76 +#: src/internals/garbage-collector.md:95 msgid "" "**Promoted-cohort fulls.** Old-reclaim pacing credits every promotion to its " "growth baseline, so old-gen garbage that a minor promoted and that died " @@ -79605,7 +82545,7 @@ msgid "" "`[gc-trigger]` lines and a `[gc-promoted-cohort]` line per cohort full." msgstr "" -#: src/internals/garbage-collector.md:99 +#: src/internals/garbage-collector.md:118 msgid "" "**One pass per block in a synchronous full.** An unbudgeted census and an " "unbudgeted sweep parse each arena block themselves instead of calling the " @@ -79619,7 +82559,7 @@ msgid "" "that is not a forwarding stub without queueing it." msgstr "" -#: src/internals/garbage-collector.md:117 +#: src/internals/garbage-collector.md:136 msgid "" "`PERRY_GC_SCAVENGE` is on by default and lets nursery pressure route to the " "direct minor. `PERRY_GC_SCAVENGE_NURSERY_MB` tunes its base high-water cap, " @@ -79629,24 +82569,36 @@ msgstr "" "vivero a la menor directa. `PERRY_GC_SCAVENGE_NURSERY_MB` sintoniza su tapa " "base de agua alta, 16 MiB por defecto" -#: src/internals/garbage-collector.md:121 -msgid "tenuring feedback may grow the effective cap by up to 4×" -msgstr "feedback puede crecer la tapa efectiva hasta 4×" +#: src/internals/garbage-collector.md:140 +msgid "" +"The effective cap is a survival-driven ladder over that base, counted in " +"quarters of it" +msgstr "" + +#: src/internals/garbage-collector.md:143 +msgid "each thread starts at a quarter of the base" +msgstr "" + +#: src/internals/garbage-collector.md:145 +msgid "" +"(4 MiB) and stays there while its minors find little alive, which keeps the " +"young generation's footprint small. While survivor influx stays above 4% of " +"the cap the ladder grows in debounced ×2 steps, up to 4× the base" +msgstr "" -#: src/internals/garbage-collector.md:123 +#: src/internals/garbage-collector.md:149 msgid "" -"on live-set-bound workloads, where a fixed cap would multiply the per-" -"collection fixed cost by an enormous collection count. Generated write " -"barriers are also on by default. Turning them off makes generational minors " -"unsound, so the runtime deliberately falls back to full mark-sweep." +"(64 MiB), and it shrinks back while influx stays below 1%. On survivor-heavy " +"and live-set-bound workloads copying survivors, not a minor's fixed cost, " +"dominates, and a bigger Eden gives them time to die. The survivor target, " +"the promoted-cohort floor and the allocation-census seed point stay keyed on " +"the base: they measure lifetimes in bytes allocated, which a smaller Eden " +"must not shorten. Generated write barriers are also on by default. Turning " +"them off makes generational minors unsound, so the runtime deliberately " +"falls back to full mark-sweep." msgstr "" -"sobre cargas de trabajo fijas en vivo, en las que un tope fijo multiplicaría " -"el coste fijo por recogida por un enorme recuento de la recaudación. Las " -"barreras de escritura generadas también están encendidas por defecto. " -"Desactivarlos hace que los menores de generación no sean sanos, así que el " -"tiempo de espera deliberadamente cae de nuevo a la marca-barra completa." -#: src/internals/garbage-collector.md:128 +#: src/internals/garbage-collector.md:158 msgid "" "Old-generation page defragmentation is implemented, including the mutable-" "root rewrite contract that relocating an old page requires, but it is **opt-" @@ -79666,11 +82618,11 @@ msgstr "" "La evacuación de los viveros y el barrido normal de la vieja generación no " "se ven afectados de ninguna manera." -#: src/internals/garbage-collector.md:136 +#: src/internals/garbage-collector.md:166 msgid "Aging, promotion, and where an object is born" msgstr "Envejecimiento, promoción, y donde nace un objeto" -#: src/internals/garbage-collector.md:138 +#: src/internals/garbage-collector.md:168 msgid "" "The copying minor's tenuring threshold is **adaptive, not fixed**: it is the " "largest number of survivals `S` whose projected survivor occupancy still " @@ -79681,7 +82633,7 @@ msgstr "" "proyectada todavía se ajusta al tamaño deseado de sobreviviente, sujetado a " "un techo de 4" -#: src/internals/garbage-collector.md:142 +#: src/internals/garbage-collector.md:172 msgid "" "and it drops to 1 (promote on first copy) when a measured survival-rate lock " "shows the aging round is filtering nothing. The loop is always on and has no " @@ -79694,7 +82646,25 @@ msgstr "" "runtime/src/gc/tenuring.rs` es su definición y establece la señal feedback " "que utiliza." -#: src/internals/garbage-collector.md:147 +#: src/internals/garbage-collector.md:177 +msgid "" +"While the first nursery-growth sample is awaiting its first survivor round, " +"copying minors keep pointer-bearing parents young for one additional round. " +"Otherwise a parent can become old before its sample reaches the controller, " +"then keep fresh children alive through a remembered edge after the parent " +"dies. The collection snapshots this policy once and reads the GC type's " +"pointer-free fact; leaf objects retain the ordinary age. Explicit diagnostic " +"age pins also retain their exact age. The existing `PERRY_GC_DIAG` stream " +"reports `parent_probe=` on copying minors and `[gc-nursery-policy]` feedback " +"decisions. Quiet unlock hysteresis advances only after fresh allocation " +"covers the entry Eden budget: the nursery cap minus carried survivor " +"occupancy, credited only up to the existing survivor target (and at most " +"half the cap). Normal carried survivors do not stall the clock; excessive " +"carryover cannot make a retaining workload leave its measured promotion lock " +"early." +msgstr "" + +#: src/internals/garbage-collector.md:191 msgid "" "**Whole-block in-place promotion.** When the previous cycle measured a young-" "survival ratio at or above 95%" @@ -79702,7 +82672,7 @@ msgstr "" "**Ascenso a toda la cuadra.** Cuando el ciclo anterior midió una relación " "joven-supervivencia al 95% o por encima de éste" -#: src/internals/garbage-collector.md:150 +#: src/internals/garbage-collector.md:194 msgid "" "the next copying minor relabels the young blocks as old-gen instead of " "evacuating them object by object: nothing moves, so nothing in the heap or " @@ -79717,7 +82687,7 @@ msgstr "" "próximo ciclo en lugar de asumir— excepto en el régimen plenamente vivo al " "98% o por encima de él" -#: src/internals/garbage-collector.md:156 +#: src/internals/garbage-collector.md:200 msgid "" "where the trace itself is skipped and every object on the block is " "registered as live. Two budgets bound the retained garbage that costs: a " @@ -79727,11 +82697,11 @@ msgstr "" "vivo. Dos presupuestos unieron la basura retenida que cuesta: un límite " "máximo en bytes muertos promovidos" -#: src/internals/garbage-collector.md:160 +#: src/internals/garbage-collector.md:204 msgid "and an untraced-promotion floor" msgstr "y un piso de promoción sin rastrear" -#: src/internals/garbage-collector.md:162 +#: src/internals/garbage-collector.md:206 msgid "" "that forces a measuring cycle before the assumption can run away. A full " "collection resets both. `PERRY_GC_PROMOTE_IN_PLACE=0` reverts to object-by-" @@ -79746,7 +82716,7 @@ msgstr "" "resuelto) desactivan la ruta de forma directa en lugar de dejar de ejercer " "silenciosamente su propio sujeto." -#: src/internals/garbage-collector.md:170 +#: src/internals/garbage-collector.md:214 msgid "" "**Born-old thresholds are type-dependent.** A pointer-free allocation above " "16 KiB" @@ -79754,7 +82724,7 @@ msgstr "" "**Los umbrales de edad son dependientes del tipo.** Una asignación libre de " "punteros superior a 16 KiB" -#: src/internals/garbage-collector.md:173 +#: src/internals/garbage-collector.md:217 msgid "" "is born in old-gen; a pointer-bearing one stays nursery-resident until 128 " "KiB" @@ -79762,7 +82732,7 @@ msgstr "" "nace de edad avanzada; uno que lleva punteros permanece residente en el " "vivero hasta 128 KiB" -#: src/internals/garbage-collector.md:175 +#: src/internals/garbage-collector.md:219 msgid "" "The split matters when reading a survival ratio: a flat threshold sends the " "intermediate backing stores of a growing array straight to old-gen, so the " @@ -79773,52 +82743,59 @@ msgstr "" "directamente a la vieja generación, por lo que la basura que abandonan nunca " "aparece en la generación joven en absoluto." -#: src/internals/garbage-collector.md:179 +#: src/internals/garbage-collector.md:223 msgid "Roots, by target" msgstr "Raíces, por objetivo" -#: src/internals/garbage-collector.md:181 +#: src/internals/garbage-collector.md:225 msgid "One root-set analysis feeds two lowerings:" msgstr "Un análisis de conjunto de raíces alimenta dos descensos:" -#: src/internals/garbage-collector.md:183 +#: src/internals/garbage-collector.md:227 msgid "target" msgstr "target" -#: src/internals/garbage-collector.md:183 +#: src/internals/garbage-collector.md:227 msgid "shipped precise-root lowering" msgstr "Rebaja de raíz precisa enviada" -#: src/internals/garbage-collector.md:185 +#: src/internals/garbage-collector.md:229 msgid "64-bit AArch64/arm64 and x86-64, including x86-64 Windows" msgstr "AArch64/arm64 y x86-64 de 64 bits, incluidos x86-64 Windows" -#: src/internals/garbage-collector.md:185 +#: src/internals/garbage-collector.md:229 msgid "LLVM RS4GC statepoints plus Perry's compact native stack map" msgstr "" "LLVM Puntos de estado RS4GC más el mapa de pila nativo compacto de Perry" -#: src/internals/garbage-collector.md:186 -msgid "`arm64_32` watchOS, ARM64 Windows, and unsupported architectures" -msgstr "`arm64_32` watchOS, ARM64 Windows y arquitecturas no soportadas" +#: src/internals/garbage-collector.md:230 +msgid "wasm32 WASI and ARM64 Windows" +msgstr "" -#: src/internals/garbage-collector.md:186 +#: src/internals/garbage-collector.md:230 msgid "Perry shadow frames" msgstr "Perry marcos de sombra" -#: src/internals/garbage-collector.md:188 +#: src/internals/garbage-collector.md:232 msgid "" "Rooting is selected by the target. Native platforms always use LLVM " -"statepoints; environment controls and function-size estimates cannot " -"select shadow frames. Long-lived managed locals retain LLVM stack " -"storage and appear as direct frame locations in the statepoint stack " -"map. The compact map records contiguous native homes as a range, so " -"both machine code and metadata grow linearly with the locals and " -"safepoints. Moving collection rewrites those same locations before " -"generated code reloads them." +"statepoints; environment controls and function-size estimates cannot select " +"shadow frames. Long-lived managed locals retain LLVM stack storage and " +"appear as direct frame locations in the statepoint stack map. The compact " +"map records contiguous native homes as a range, so both machine code and " +"metadata grow linearly with the locals and safepoints. Moving collection " +"rewrites those same locations before generated code reloads them." msgstr "" -#: src/internals/garbage-collector.md:194 +#: src/internals/garbage-collector.md:240 +msgid "" +"WASI uses platform shadow frames because it has no native frame walker or " +"statepoint stack-map backend. ARM64 Windows lacks the required native " +"walker; watchOS ILP32 lacks a native map loader and currently refuses " +"compiler emission rather than pretending its LP64 offsets work." +msgstr "" + +#: src/internals/garbage-collector.md:245 msgid "" "Runtime-owned roots do not live in generated frames. Registered scanners " "visit module globals, pending async work, caches, registries, and other side " @@ -79834,7 +82811,46 @@ msgstr "" "`RuntimeHandle` y deben releer un mango después de una llamada que pueda " "recoger." -#: src/internals/garbage-collector.md:200 +#: src/internals/garbage-collector.md:251 +msgid "" +"Root owners supply the representation. Generated globals and native " +"statepoint homes keep JSValue words at rest; raw managed locals are boxed " +"when stored and unboxed after a root reload. Runtime scanners and handles " +"distinguish JSValues from pointer fields whose owners guarantee a GC header. " +"Both feed one precise marker: decode the declared value representation, " +"admit the address, then read the header's color and enqueue an unmarked " +"object. Admission is O(1): the arena region descriptor says whether the " +"address is in this heap's region, in a live region of another thread's heap " +"(a Worker's, or a zero-copy transferred cell: the root is dropped without " +"reading its header), or outside every arena region, where the header " +"decides: an ARENA header there is a producer bug, any other header is a " +"malloc or process-lifetime cell of this heap. Admission reads no malloc " +"state and no collection census: local allocations born later and local old-" +"generation roots remain eligible. Root providers emit only their own agent's " +"roots (Worker records carry their creating agent). Under " +"`PERRY_GC_VERIFY_MARK` (and in unit tests) a root that is neither this " +"heap's object nor provably another heap's fails loudly: a malformed header, " +"an ARENA header outside this heap, or an unmarked header outside the arena " +"that is not one of this heap's malloc allocations. The same verification " +"rejects an untagged word naming one of this heap's objects in a JSValue " +"root, at global-root registration and at every scan. A numeric word that " +"resembles an address remains a number; native handle payloads are excluded " +"by their value-encoding band. Closure capture cells and temporary roots obey " +"the same producer contract." +msgstr "" + +#: src/internals/garbage-collector.md:274 +msgid "" +"Legacy shadow-frame homes on WASI and ARM64 Windows can still mix raw " +"pointers and JSValues. Their source kind retains the mixed decoder and " +"validity probe; these are the documented untyped platform fallback. " +"Structural header checks in verification builds and the existing evacuation " +"verifier check precise roots without changing their release marking " +"contract. Reached-block accounting belongs to tracing the admitted object, " +"rather than validating every root that aliases it." +msgstr "" + +#: src/internals/garbage-collector.md:282 msgid "" "The conservative native-stack scan is not part of the production default: " "`Auto` resolves to `SkipDisabled`. `PERRY_CONSERVATIVE_STACK_SCAN=full` is " @@ -79849,11 +82865,11 @@ msgstr "" "la copia menor no elegible; es una evidencia útil, no un segundo motor de " "enraizamiento normal." -#: src/internals/garbage-collector.md:206 +#: src/internals/garbage-collector.md:288 msgid "Barriers and weak references" msgstr "Barreras y referencias débiles" -#: src/internals/garbage-collector.md:208 +#: src/internals/garbage-collector.md:290 msgid "" "Every old-to-young pointer publication must hit the remembered-set barrier. " "Codegen emits barriers for generated heap stores and runtime helpers perform " @@ -79866,7 +82882,7 @@ msgstr "" "propias tiendas exactas. Un rastro menor recordaba a viejos padres en vez de " "rastrear a toda la vieja generación." -#: src/internals/garbage-collector.md:213 +#: src/internals/garbage-collector.md:295 msgid "" "WeakRef, WeakMap, WeakSet, and FinalizationRegistry targets are excluded " "from the strong trace. Weak processing is **registry-scoped on every path**: " @@ -79887,11 +82903,11 @@ msgstr "" "lugar de O(arena) y un ciclo presupuestado puede volver al mutante entre los " "titulares." -#: src/internals/garbage-collector.md:223 +#: src/internals/garbage-collector.md:305 msgid "Budgets, memory pressure, and released blocks" msgstr "Presupuestos, presión de memoria y bloques liberados" -#: src/internals/garbage-collector.md:225 +#: src/internals/garbage-collector.md:307 msgid "" "The collector derives a heap budget, in priority order, from " "`PERRY_GC_HEAP_LIMIT` (MiB), Apple embedded available-memory APIs, container " @@ -79906,15 +82922,15 @@ msgstr "" "aplazamiento de guarderías y umbrales de presión RSS hacia abajo; los " "valores predeterminados de desktop/server permanecen inalterados." -#: src/internals/garbage-collector.md:231 +#: src/internals/garbage-collector.md:313 msgid "Platform hosts call `js_gc_memory_pressure(level)`:" msgstr "Plataforma hosts llama a `js_gc_memory_pressure(level)`:" -#: src/internals/garbage-collector.md:233 +#: src/internals/garbage-collector.md:315 msgid "warning (`1`) requests a prompt minor;" msgstr "warning (`1`) requests a prompt minor;" -#: src/internals/garbage-collector.md:234 +#: src/internals/garbage-collector.md:316 msgid "" "critical (`2+`) requests a full collection so old-gen garbage and idle arena " "blocks can be reclaimed;" @@ -79922,7 +82938,7 @@ msgstr "" "Critical (`2+`) solicita una recogida completa para recuperar la basura de " "la vieja generación y los bloques de arena inactivos;" -#: src/internals/garbage-collector.md:236 +#: src/internals/garbage-collector.md:318 msgid "" "if collection is unsafe, the request is made sticky and drains at the next " "precise safepoint/allocation check." @@ -79930,7 +82946,7 @@ msgstr "" "if collection is unsafe, the request is made sticky and drains at the next " "precise safepoint/allocation check." -#: src/internals/garbage-collector.md:239 +#: src/internals/garbage-collector.md:321 msgid "" "Released 1 MiB blocks first enter a **per-thread LIFO reuse pool under a " "process-wide byte cap**. The reuse order is thread-local; the budget is not " @@ -79945,7 +82961,7 @@ msgstr "" "ellos. La tapa se deriva de `gc_block_pool_cap_with_budget` en `crates/perry-" "runtime/src/gc/heap_budget.rs`: 64 MiB" -#: src/internals/garbage-collector.md:245 +#: src/internals/garbage-collector.md:327 #, fuzzy msgid "" "on an unconstrained desktop/server process, scaled to one eighth of a device/" @@ -79966,7 +82982,7 @@ msgstr "" "unsafe/deferred y vacía la piscina cuando la colección completa debe " "terminar su recuperación de arena." -#: src/internals/garbage-collector.md:257 +#: src/internals/garbage-collector.md:339 msgid "" "Reported heap usage (`js_arena_stats`, `process.memoryUsage().heapUsed`) is " "an exact post-collection **live census** plus incremental deltas, not a sum " @@ -79976,11 +82992,11 @@ msgstr "" "heapUsed`) es una recogida exacta **censo en vivo** más deltas " "incrementales, no una suma de bloques de compensación de agua alta." -#: src/internals/garbage-collector.md:261 +#: src/internals/garbage-collector.md:343 msgid "Idle-time reclaim" msgstr "" -#: src/internals/garbage-collector.md:263 +#: src/internals/garbage-collector.md:345 msgid "" "Every automatic collection above is scheduled by allocation, so a program " "that bursts and then goes quiet keeps whatever the last mid-burst cycle left " @@ -79991,40 +83007,40 @@ msgid "" "completed since its last full, and 3000 ms" msgstr "" -#: src/internals/garbage-collector.md:271 +#: src/internals/garbage-collector.md:353 msgid "" "have passed since that collection was observed, it opens a full budgeted " "cycle with the block-pool drain armed and steps it in 4000 µs" msgstr "" -#: src/internals/garbage-collector.md:274 +#: src/internals/garbage-collector.md:356 msgid "" "slices, returning to the loop the moment a wake is pending. Two reducer " "fulls are never closer than 10000 ms" msgstr "" -#: src/internals/garbage-collector.md:277 +#: src/internals/garbage-collector.md:359 msgid "apart. A full that lowers old-gen occupancy by less than 5 percent" msgstr "" -#: src/internals/garbage-collector.md:279 +#: src/internals/garbage-collector.md:361 msgid "of what it started with (or by less than 4 MiB" msgstr "" -#: src/internals/garbage-collector.md:281 +#: src/internals/garbage-collector.md:363 msgid "" ") doubles the number of collections required before the next attempt, up to " "32" msgstr "" -#: src/internals/garbage-collector.md:283 +#: src/internals/garbage-collector.md:365 msgid "" "(two to that power); a productive full resets the requirement to one. The " "same slicing finishes a budgeted cycle the pacer left open when the mutator " "went quiet." msgstr "" -#: src/internals/garbage-collector.md:287 +#: src/internals/garbage-collector.md:369 msgid "" "Arena capacity has a second re-arm signal because returning a proven-empty " "block deliberately takes two full collection observations, while the " @@ -80032,164 +83048,165 @@ msgid "" "capacity floor," msgstr "" -#: src/internals/garbage-collector.md:291 +#: src/internals/garbage-collector.md:373 msgid "two consecutive post-collection live/capacity readings" msgstr "" -#: src/internals/garbage-collector.md:293 +#: src/internals/garbage-collector.md:375 msgid "at or below 50 percent" msgstr "" -#: src/internals/garbage-collector.md:295 +#: src/internals/garbage-collector.md:377 msgid "" "open a bounded right-size episode. It grants only enough idle fulls to reach " "two full observations" msgstr "" -#: src/internals/garbage-collector.md:298 +#: src/internals/garbage-collector.md:380 msgid "" "(counting any full already in the low-utilization streak), and stops early " "once live data reaches 60 percent of capacity." msgstr "" -#: src/internals/garbage-collector.md:301 +#: src/internals/garbage-collector.md:383 msgid "" "After a bounded episode, stable low occupancy cannot immediately repeat it: " "a new episode re-arms only after utilization reaches 70 percent" msgstr "" -#: src/internals/garbage-collector.md:304 +#: src/internals/garbage-collector.md:386 msgid "or capacity grows by at least both 25 percent and 8 MiB." msgstr "" -#: src/internals/garbage-collector.md:307 +#: src/internals/garbage-collector.md:389 msgid "" "That hysteresis preserves burst headroom and prevents an unreleasably " "fragmented heap from buying a full every ten seconds. The right-size debt " "still passes through the reducer's quiet, rate, wake, and work-budget gates." msgstr "" -#: src/internals/garbage-collector.md:312 +#: src/internals/garbage-collector.md:394 msgid "" "`PERRY_GC_DIAG=1` reports the reducer's counters on the `[gc-idle-reclaim]` " "exit line, and `PERRY_GC_IDLE_RECLAIM=0` disables it." msgstr "" -#: src/internals/garbage-collector.md:317 +#: src/internals/garbage-collector.md:399 msgid "Supported controls" msgstr "Controles soportados" -#: src/internals/garbage-collector.md:319 +#: src/internals/garbage-collector.md:401 msgid "" "These are the operational controls most useful outside collector development:" msgstr "" "Estos son los controles operativos más útiles para el desarrollo de " "colectores externos:" -#: src/internals/garbage-collector.md:321 +#: src/internals/garbage-collector.md:403 msgid "knob" msgstr "knob" -#: src/internals/garbage-collector.md:321 +#: src/internals/garbage-collector.md:403 msgid "purpose" msgstr "purpose" -#: src/internals/garbage-collector.md:323 +#: src/internals/garbage-collector.md:405 msgid "`PERRY_GEN_GC=0`" msgstr "`PERRY_GEN_GC=0`" -#: src/internals/garbage-collector.md:323 +#: src/internals/garbage-collector.md:405 msgid "bisection fallback to full mark-sweep" msgstr "reflujo de la bisección al barrido completo de marcas" -#: src/internals/garbage-collector.md:324 +#: src/internals/garbage-collector.md:406 msgid "`PERRY_WRITE_BARRIERS=0`" msgstr "`PERRY_WRITE_BARRIERS=0`" -#: src/internals/garbage-collector.md:324 +#: src/internals/garbage-collector.md:406 msgid "compile/runtime barrier bisection; also forces full mark-sweep" msgstr "" "compile/runtime bisección de barrera; también fuerza la marca-barra completa" -#: src/internals/garbage-collector.md:325 +#: src/internals/garbage-collector.md:407 msgid "`PERRY_GC_SCAVENGE=0`" msgstr "`PERRY_GC_SCAVENGE=0`" -#: src/internals/garbage-collector.md:325 +#: src/internals/garbage-collector.md:407 msgid "disable direct nursery scavenging for pacing comparison" msgstr "" "deshabilitar la recolección directa de viveros para la comparación de " "estimulación" -#: src/internals/garbage-collector.md:326 +#: src/internals/garbage-collector.md:408 msgid "`PERRY_GC_PROMOTE_IN_PLACE=0`" msgstr "`PERRY_GC_PROMOTE_IN_PLACE=0`" -#: src/internals/garbage-collector.md:326 +#: src/internals/garbage-collector.md:408 msgid "revert whole-block promotion to object-by-object evacuation" msgstr "" "revertir la promoción de bloques enteros a la evacuación de objetos por " "objetos" -#: src/internals/garbage-collector.md:327 +#: src/internals/garbage-collector.md:409 msgid "`PERRY_GC_SCAVENGE_NURSERY_MB=N`" msgstr "`PERRY_GC_SCAVENGE_NURSERY_MB=N`" -#: src/internals/garbage-collector.md:327 +#: src/internals/garbage-collector.md:409 msgid "set the base nursery cap" msgstr "establecer la tapa base del vivero" -#: src/internals/garbage-collector.md:328 +#: src/internals/garbage-collector.md:410 msgid "`PERRY_GC_HEAP_LIMIT=N`" msgstr "`PERRY_GC_HEAP_LIMIT=N`" -#: src/internals/garbage-collector.md:328 +#: src/internals/garbage-collector.md:410 msgid "override the process heap budget in MiB" msgstr "anular el presupuesto del montón de proceso en MiB" -#: src/internals/garbage-collector.md:330 +#: src/internals/garbage-collector.md:411 msgid "`PERRY_CONSERVATIVE_STACK_SCAN=full`" msgstr "`PERRY_CONSERVATIVE_STACK_SCAN=full`" -#: src/internals/garbage-collector.md:330 +#: src/internals/garbage-collector.md:411 msgid "diagnostic full native-stack scan; disables copying" msgstr "" "diagnóstico de exploración completa de pila nativa; deshabilita la copia" -#: src/internals/garbage-collector.md:331 +#: src/internals/garbage-collector.md:412 msgid "`PERRY_GC_TRACE=1`" msgstr "`PERRY_GC_TRACE=1`" -#: src/internals/garbage-collector.md:331 +#: src/internals/garbage-collector.md:412 msgid "emit structured per-cycle trace records" msgstr "emitir registros estructurados por ciclo de seguimiento" -#: src/internals/garbage-collector.md:332 +#: src/internals/garbage-collector.md:413 msgid "" "emit human-readable collector diagnostics (per cycle, plus `[gc-trigger]`/" "`[gc-full]`/`[gc-budgeted]`/`[gc-charge]` decision and charge attribution " "and the per-minor `[gc-survival]` root attribution)" msgstr "" -#: src/internals/garbage-collector.md:333 +#: src/internals/garbage-collector.md:414 #, fuzzy msgid "`PERRY_ALLOC_SITE_SAMPLE=N`" msgstr "`PERRY_GC_HEAP_LIMIT=N`" -#: src/internals/garbage-collector.md:333 +#: src/internals/garbage-collector.md:414 msgid "" "sample the arena allocation-site histogram every N bytes (`[alloc-site]`); " "`1`/`on` selects the default interval" msgstr "" -#: src/internals/garbage-collector.md:335 +#: src/internals/garbage-collector.md:416 #, fuzzy msgid "" "Rooting stress uses `PERRY_GC_SCHEDULE_SEED`, `PERRY_GC_SCHEDULE_RATE`, " "`PERRY_GC_SCHEDULE_ALLOC_KB`, `PERRY_GC_FORCE_EVACUATE`, " "`PERRY_GC_VERIFY_EVACUATION`, `PERRY_GC_PROTECT_FROMSPACE`, " -"`PERRY_GC_PROTECT_FROMSPACE_DEPTH`, `PERRY_GC_FROMSPACE_SCAN`, and " -"`PERRY_GC_FROMSPACE_SCAN_ABORT`. Their exact contracts and non-vacuity " +"`PERRY_GC_PROTECT_FROMSPACE_DEPTH`, `PERRY_GC_FROMSPACE_SCAN`, " +"`PERRY_GC_FROMSPACE_SCAN_ABORT`, `PERRY_GC_PROTECT_OLD_SWEEP` and " +"`PERRY_GC_BUDGETED_OLD_RECLAIM`. Their exact contracts and non-vacuity " "requirements live in the [rooting invariant](gc-rooting-invariant.md). " "Research/bisection controls such as `PERRY_GC_INCREMENTAL`, " "`PERRY_GC_IDLE_RECLAIM`, `PERRY_GC_MAJOR_PACING_FLOOR_MB`, " @@ -80211,7 +83228,7 @@ msgstr "" "`PERRY_STACKMAP_WALKER`, pero no son modos de colector adicionales " "soportados." -#: src/internals/garbage-collector.md:348 +#: src/internals/garbage-collector.md:430 msgid "" "`scripts/check_gc_env_knobs.py` derives the accepted names from live runtime/" "codegen/compiler parsers and rejects a current document, executable script, " @@ -80240,11 +83257,11 @@ msgstr "" "el comportamiento falla `cargo-test`; ninguno puede quedarse en silencio " "mientras esta página sigue reclamando lo viejo." -#: src/internals/garbage-collector.md:360 +#: src/internals/garbage-collector.md:442 msgid "Validation and CI authority" msgstr "Validación y autoridad de IC" -#: src/internals/garbage-collector.md:362 +#: src/internals/garbage-collector.md:444 msgid "" "As of 2026-08-16, branch protection requires exactly one status, `pr-gate` — " "the fan-in of `test.yml`'s PR tier (see `docs/src/testing/ci-tiers.md`; the " @@ -80256,39 +83273,39 @@ msgstr "" "src/testing/ci-tiers.md`; la política de nivel es `scripts/ci_plan.py`). La " "cobertura específica del GC se divide deliberadamente:" -#: src/internals/garbage-collector.md:366 +#: src/internals/garbage-collector.md:448 msgid "where it runs" msgstr "donde corre" -#: src/internals/garbage-collector.md:366 +#: src/internals/garbage-collector.md:448 msgid "required status" msgstr "estado requerido" -#: src/internals/garbage-collector.md:368 +#: src/internals/garbage-collector.md:450 msgid "root-holder custody, GC-knob drift, and this page's path/number claims" msgstr "" "La custodia del titular de la raíz, la deriva de GC-knob, y las " "reclamaciones path/number de esta página" -#: src/internals/garbage-collector.md:368 +#: src/internals/garbage-collector.md:450 msgid "`test.yml` → `lint`" msgstr "`test.yml` → `lint`" -#: src/internals/garbage-collector.md:368 +#: src/internals/garbage-collector.md:450 msgid "yes (via `pr-gate`)" msgstr "Sí (a través de `pr-gate`)" -#: src/internals/garbage-collector.md:369 +#: src/internals/garbage-collector.md:451 msgid "runtime unit suite and `run_memory_stability_tests.sh` four-mode matrix" msgstr "" "unidad de tiempo de ejecución suite y `run_memory_stability_tests.sh` matriz " "de cuatro modos" -#: src/internals/garbage-collector.md:369 +#: src/internals/garbage-collector.md:451 msgid "`test.yml` → `cargo-test`" msgstr "`test.yml` → `cargo-test`" -#: src/internals/garbage-collector.md:369 +#: src/internals/garbage-collector.md:451 msgid "" "yes (via `pr-gate`; the PR tier is diff-scoped, the sweep/full tiers run the " "workspace)" @@ -80296,7 +83313,7 @@ msgstr "" "sí (a través de `pr-gate`; el nivel PR es diff-scoped, los niveles sweep/" "full ejecutan el espacio de trabajo)" -#: src/internals/garbage-collector.md:370 +#: src/internals/garbage-collector.md:452 msgid "" "GC × representation-selection matrix, rooting-bug instruments, write-barrier " "stress" @@ -80304,27 +83321,27 @@ msgstr "" "CG × matriz de selección de representación, instrumentos de enraizamiento-" "bug, esfuerzo de barrera de escritura" -#: src/internals/garbage-collector.md:370 +#: src/internals/garbage-collector.md:452 msgid "`test.yml` → `gc-stress`" msgstr "`test.yml` → `gc-stress`" -#: src/internals/garbage-collector.md:370 +#: src/internals/garbage-collector.md:452 msgid "yes (via `pr-gate`; PR subset on PRs, full matrix in the sweep)" msgstr "" "sí (a través de `pr-gate`; subconjunto PR en PRs, matriz completa en el " "barrido)" -#: src/internals/garbage-collector.md:371 +#: src/internals/garbage-collector.md:453 msgid "emitted root dominance, including native statepoint IR" msgstr "dominio de la raíz emitido, incluyendo el estado nativo IR" -#: src/internals/garbage-collector.md:371 +#: src/internals/garbage-collector.md:453 msgid "`gc-root-dominance.yml`" msgstr "`gc-root-dominance.yml`" -#: src/internals/garbage-collector.md:371 -#: src/internals/garbage-collector.md:372 -#: src/internals/garbage-collector.md:373 +#: src/internals/garbage-collector.md:453 +#: src/internals/garbage-collector.md:454 +#: src/internals/garbage-collector.md:455 msgid "" "not branch-required; PR arm opt-in via `run-extended-tests`, six-hourly on " "`main`" @@ -80332,27 +83349,27 @@ msgstr "" "no se requiere rama; brazo PR opt-in vía `run-extended-tests`, seis horas en " "`main`" -#: src/internals/garbage-collector.md:372 +#: src/internals/garbage-collector.md:454 msgid "pinned collector counters/RSS/wall matrix" msgstr "Colector empotrado counters/RSS/wall matriz" -#: src/internals/garbage-collector.md:372 +#: src/internals/garbage-collector.md:454 msgid "`gc-ratchet.yml`" msgstr "`gc-ratchet.yml`" -#: src/internals/garbage-collector.md:373 +#: src/internals/garbage-collector.md:455 msgid "thread-local mechanism/policy budget" msgstr "presupuesto local mechanism/policy" -#: src/internals/garbage-collector.md:373 +#: src/internals/garbage-collector.md:455 msgid "`tls-budget.yml`" msgstr "`tls-budget.yml`" -#: src/internals/garbage-collector.md:375 +#: src/internals/garbage-collector.md:457 msgid "Useful local preflight commands:" msgstr "Útiles comandos locales de prevuelo:" -#: src/internals/garbage-collector.md:388 +#: src/internals/garbage-collector.md:470 msgid "" "The dedicated performance/rooting workflows have broader compiler and host " "requirements; their workflow files are the authority for exact commands and " @@ -80362,11 +83379,11 @@ msgstr "" "amplios de compilador y host; sus archivos de flujo de trabajo son la " "autoridad para órdenes exactas y filtros de relevancia." -#: src/internals/garbage-collector.md:392 +#: src/internals/garbage-collector.md:474 msgid "Historical evidence" msgstr "Pruebas históricas" -#: src/internals/garbage-collector.md:394 +#: src/internals/garbage-collector.md:476 msgid "" "[Generational GC plan](https://github.com/PerryTS/perry/blob/main/docs/" "generational-gc-plan.md): original design and phase-by-phase landing log." @@ -80375,7 +83392,7 @@ msgstr "" "generational-gc-plan.md): diseño original y registro de aterrizaje fase por " "fase." -#: src/internals/garbage-collector.md:396 +#: src/internals/garbage-collector.md:478 msgid "" "[Statepoint GC experiment](https://github.com/PerryTS/perry/blob/main/docs/" "statepoint-gc-experiment.md): chronological prototype measurements and " @@ -80385,7 +83402,7 @@ msgstr "" "statepoint-gc-experiment.md): mediciones y correcciones cronológicas de " "prototipos que conducen al valor predeterminado de raíz nativa." -#: src/internals/garbage-collector.md:398 +#: src/internals/garbage-collector.md:480 msgid "" "[GC rooting invariant](gc-rooting-invariant.md): current codegen soundness " "rule, checker modes, known blind spots, and debugging instruments." @@ -80394,7 +83411,7 @@ msgstr "" "sonido del códice, modos de verificación, puntos ciegos conocidos e " "instrumentos de depuración." -#: src/internals/garbage-collector.md:400 +#: src/internals/garbage-collector.md:482 msgid "" "[Memory Model](memory-model.md): NaN-boxing, allocation representation, and " "platform memory-tooling notes." @@ -80960,9 +83977,10 @@ msgstr "" "ejecuta primero." #: src/internals/gc-rooting-invariant.md:169 +#, fuzzy msgid "" -"**It is blind to three classes, all found the hard way. A clean report is " -"not evidence for any of them:**" +"**It is blind to four classes, all found the hard way. A clean report is not " +"evidence for any of them:**" msgstr "" "**Es ciego a tres clases, todas se encuentran de la manera difícil. Un " "informe limpio no es evidencia para ninguno de ellos:**" @@ -81007,6 +84025,20 @@ msgstr "" #: src/internals/gc-rooting-invariant.md:184 msgid "" +"**A slot the collector was told not to visit** (#11550) — not a rooting bug " +"at all. The object spill store read a buffer's uninitialized tail as the " +"slot's old value; pointer-shaped leftovers turned the first store into a " +"\"pointer over pointer\" overwrite, which skips the GC slot-mask update, so " +"the slot was never marked or rewritten. Every root was correct, and the IR " +"has nothing to see. Tell: the holder of the stale value is a _live_ object " +"whose sibling slots were rewritten, and " +"`PERRY_GC_PROTECT_FROMSPACE_HOLDERS=1`'s report names nothing. When a " +"runtime store helper takes an `old_bits` shortcut, the old bits must come " +"from inside the element range the GC walks." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:194 +msgid "" "For the classes above, the instruments that catch them are the schedule/" "quarantine arms below and a _dependency-scale_ workload — #7280 records 25 " "curated corpus files passing while 20 lines of stock zod fail." @@ -81016,23 +84048,22 @@ msgstr "" "registra 25 archivos de corpus curados pasando mientras 20 líneas de stock " "zod fallan." -#: src/internals/gc-rooting-invariant.md:188 +#: src/internals/gc-rooting-invariant.md:198 msgid "" "**A fourth class was on this list until #7663 and is now covered: the " -"lowering that actually ships.** The corpus used to be compiled under a" -" forced shadow lowering — the shadow stack — because the checker " -"anchored on `@js_shadow_slot_bind` and the native lowering emits zero " -"of them. That made a green `gc-root-dominance` a statement about a " -"lowering that has not been the default on any walkable-frame target " -"since #7370. **Run both**, and know which one you ran:" +"lowering that actually ships.** The corpus used to be compiled under a " +"forced shadow lowering — the shadow stack — because the checker anchored on " +"`@js_shadow_slot_bind` and the native lowering emits zero of them. That made " +"a green `gc-root-dominance` a statement about a lowering that has not been " +"the default on any walkable-frame target since #7370. **Run both**, and know " +"which one you ran:" msgstr "" -#: src/internals/gc-rooting-invariant.md:197 -#, fuzzy +#: src/internals/gc-rooting-invariant.md:207 msgid "# SHADOW: the actual WASI platform lowering. Anchors on root stores.\n" msgstr "" -#: src/internals/gc-rooting-invariant.md:213 +#: src/internals/gc-rooting-invariant.md:223 msgid "" "Each mode **refuses the other's corpus** rather than reporting it clean: the " "native corpus has zero root stores, so `--min-binds` fails there, and the " @@ -81043,11 +84074,11 @@ msgstr "" "falla allí, y el corpus de sombras tiene cero puntos de seguridad, por lo " "que `--min-statepoints` falla allí." -#: src/internals/gc-rooting-invariant.md:217 +#: src/internals/gc-rooting-invariant.md:227 msgid "What `--statepoints` checks, and how it differs" msgstr "Lo que `--statepoints` comprueba, y cómo difiere" -#: src/internals/gc-rooting-invariant.md:219 +#: src/internals/gc-rooting-invariant.md:229 msgid "" "Under native roots a value is a root at a safepoint iff it appears in that " "`gc.statepoint`'s `\"gc-live\"` bundle, and its identity below the safepoint " @@ -81059,7 +84090,7 @@ msgstr "" "punto seguro es el resultado `gc.relocate`. Así que \"la tienda de raíces " "debe dominar cada punto de recogida posterior\" se convierte en:" -#: src/internals/gc-rooting-invariant.md:224 +#: src/internals/gc-rooting-invariant.md:234 msgid "" "No register naming a GC object may be USED below a safepoint unless it is " "the relocated value." @@ -81067,7 +84098,7 @@ msgstr "" "Ningún registro que nombre un objeto GC se puede utilizar por debajo de un " "punto seguro a menos que sea el valor reubicado." -#: src/internals/gc-rooting-invariant.md:227 +#: src/internals/gc-rooting-invariant.md:237 msgid "" "The line that does the work is **tracked vs untracked**. LLVM relocates `ptr " "addrspace(1)` SSA values and rewrites their dominated uses, so those are " @@ -81082,23 +84113,23 @@ msgstr "" "vida como un `double`. Dos clases de veredicto, porque tienen dos arreglos " "diferentes:" -#: src/internals/gc-rooting-invariant.md:233 +#: src/internals/gc-rooting-invariant.md:243 msgid "class" msgstr "class" -#: src/internals/gc-rooting-invariant.md:233 +#: src/internals/gc-rooting-invariant.md:243 msgid "means" msgstr "means" -#: src/internals/gc-rooting-invariant.md:233 +#: src/internals/gc-rooting-invariant.md:243 msgid "fix" msgstr "fix" -#: src/internals/gc-rooting-invariant.md:235 +#: src/internals/gc-rooting-invariant.md:245 msgid "`unrooted`" msgstr "`unrooted`" -#: src/internals/gc-rooting-invariant.md:235 +#: src/internals/gc-rooting-invariant.md:245 msgid "" "no `ptr addrspace(1)` value in the register's cast chain is in the " "safepoint's live bundle. Nothing marks or rewrites the object." @@ -81106,15 +84137,15 @@ msgstr "" "ningún valor de `ptr addrspace(1)` en la cadena de fundición del registro " "está en el paquete vivo del punto seguro. Nada marca o reescribe el objeto." -#: src/internals/gc-rooting-invariant.md:235 +#: src/internals/gc-rooting-invariant.md:245 msgid "root it" msgstr "Raízala" -#: src/internals/gc-rooting-invariant.md:236 +#: src/internals/gc-rooting-invariant.md:246 msgid "`stale`" msgstr "`stale`" -#: src/internals/gc-rooting-invariant.md:236 +#: src/internals/gc-rooting-invariant.md:246 msgid "" "the object IS in the bundle and is relocated, but a raw copy of its pre-move " "address is used below" @@ -81122,11 +84153,11 @@ msgstr "" "el objeto está en el paquete y es reubicado, pero una copia en bruto de su " "dirección pre-mover se utiliza a continuación" -#: src/internals/gc-rooting-invariant.md:236 +#: src/internals/gc-rooting-invariant.md:246 msgid "re-derive from the relocated value (`OperandProtection::Reload`)" msgstr "re-derivar del valor reubicado (`OperandProtection::Reload`)" -#: src/internals/gc-rooting-invariant.md:238 +#: src/internals/gc-rooting-invariant.md:248 msgid "" "Two things this mode gets for free that the shadow modes cannot: " "**`NONCOLLECTING` is not consulted** — LLVM already decided which calls are " @@ -81143,7 +84174,7 @@ msgstr "" "`--moving-only` clasifica contra el símbolo real en lugar de `llvm." "experimental.gc.statepoint.p0`." -#: src/internals/gc-rooting-invariant.md:245 +#: src/internals/gc-rooting-invariant.md:255 msgid "" "It parses the emitted LLVM IR, builds per-function CFGs, computes real " "Cooper/Harvey/Kennedy dominance, and reports every **collection point** that " @@ -81168,15 +84199,36 @@ msgstr "" "colecta, por lo que una brecha en su modelo cuesta un falso positivo, nunca " "un error perdido." -#: src/internals/gc-rooting-invariant.md:255 +#: src/internals/gc-rooting-invariant.md:265 +msgid "" +"**Phi edges that replace the value are not part of its window (#11604).** " +"When the bound register reaches the producing instruction through a `phi`, a " +"path that enters the join through an edge whose operand is something _else_ " +"(another register or a constant) delivers that other value to the slot, not " +"the one being checked. So the window walk does not take such an edge: a " +"collector reachable from the producer only through it is not reported. This " +"is the shadow-mode twin of #7664's `--statepoints` refinement. The shape " +"that needed it is S2's template coercion (#11554): `phi [ %v, %entry ], " +"[ %coerced, %tmpl_coerce.slow ]`, where the only collecting call is on the " +"arm that replaces `%v`. Before the refinement that one join read as 96 " +"violations. A collector on an edge that _carries_ the value, or between the " +"join and the bind, is still reported, and `--self-test` asserts both " +"(`_SELFTEST_PHI_SAFE_EDGE` / `_SELFTEST_PHI_HAZARD`). `--stale-registers` " +"applies the same rule when a use reaches its source only through such a phi " +"(`_stale_use_replacing_edges`). That took the stale budgets from 39 to 2 " +"(curated) and from 118 to 10 (dependency-scale). The dependency-scale corpus " +"had been at 457 on `main`, and no step reported it." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:282 msgid "For a single file you are iterating on:" msgstr "Para un solo archivo está iterando en:" -#: src/internals/gc-rooting-invariant.md:263 +#: src/internals/gc-rooting-invariant.md:290 msgid "Both env knobs matter, for different reasons." msgstr "Ambas perillas de env importan, por diferentes razones." -#: src/internals/gc-rooting-invariant.md:265 +#: src/internals/gc-rooting-invariant.md:292 msgid "" "`PERRY_GC_MOVING_LOOP_POLLS=1` is what puts `js_gc_loop_safepoint` in the " "IR. It is the only collection point a **back edge itself** introduces — a " @@ -81192,7 +84244,7 @@ msgstr "" "colección entre dos puntos de un cuerpo de bucle de otro modo inerte no " "puede aparecer en el corpus sin él." -#: src/internals/gc-rooting-invariant.md:271 +#: src/internals/gc-rooting-invariant.md:298 #, fuzzy msgid "" "It is **not** what makes the `MOVING` classification work, and it is not the " @@ -81218,7 +84270,7 @@ msgstr "" "`js_object_get_field_ic_miss` y `js_closure_call1`. Esos se están moviendo " "sin encuestas cerca de ellos." -#: src/internals/gc-rooting-invariant.md:283 +#: src/internals/gc-rooting-invariant.md:310 msgid "" "So: turn the knob on, because it widens what the corpus can express, but do " "not read a poll-free function as safe." @@ -81226,14 +84278,14 @@ msgstr "" "Por lo tanto: encender la perilla, porque amplía lo que el corpus puede " "expresar, pero no leer una función libre de encuestas como seguro." -#: src/internals/gc-rooting-invariant.md:286 +#: src/internals/gc-rooting-invariant.md:313 msgid "" "`POLL_CAPABLE_RUNTIME` is by EXACT emitted symbol, and that has bitten twice" msgstr "" "`POLL_CAPABLE_RUNTIME` es por el símbolo emitido EXACT, y que ha mordido dos " "veces" -#: src/internals/gc-rooting-invariant.md:288 +#: src/internals/gc-rooting-invariant.md:315 msgid "" "`movers` is a set-membership test on the callee name, so an entry that names " "a symbol codegen does not emit classifies nothing, forever, and looks " @@ -81245,7 +84297,7 @@ msgstr "" "clasifica nada, para siempre, y se parece exactamente a la cobertura " "mientras lo hace. Ahora se han medido dos rondas:" -#: src/internals/gc-rooting-invariant.md:292 +#: src/internals/gc-rooting-invariant.md:319 #, fuzzy msgid "" "**A real symbol codegen never emits.** The set carried " @@ -81279,7 +84331,7 @@ msgstr "" "`clone` de zod. El protector y el verificador no estaban de acuerdo; el " "verificador estaba equivocado." -#: src/internals/gc-rooting-invariant.md:308 +#: src/internals/gc-rooting-invariant.md:335 msgid "" "**Ten names that were not symbols at all.** `js_apply_function`, " "`js_array_for_each`, `js_array_sort`, `js_call_closure`, `js_call_value`, " @@ -81302,7 +84354,7 @@ msgstr "" "entrada reales son `js_closure_callN`, que `RECEIVER_SINKS` en el mismo " "archivo ya escrito correctamente." -#: src/internals/gc-rooting-invariant.md:318 +#: src/internals/gc-rooting-invariant.md:345 msgid "" "**A real symbol that was simply not in the set** (#7616 / #7453). The two " "rounds above are both a NAME WITH NO REFERENT, and both audits look only in " @@ -81322,60 +84374,60 @@ msgstr "" "corta, por lo que la forma nunca fue capturable bajo el modo de " "funcionamiento CI. Replantar ese código exacto y ejecutar cada modo (#7616):" -#: src/internals/gc-rooting-invariant.md:327 +#: src/internals/gc-rooting-invariant.md:354 msgid "clean" msgstr "clean" -#: src/internals/gc-rooting-invariant.md:327 +#: src/internals/gc-rooting-invariant.md:354 msgid "sabotaged" msgstr "sabotaged" -#: src/internals/gc-rooting-invariant.md:329 +#: src/internals/gc-rooting-invariant.md:356 msgid "`--moving-only` (dominance)" msgstr "`--moving-only` (dominio)" -#: src/internals/gc-rooting-invariant.md:329 -#: src/internals/gc-rooting-invariant.md:330 +#: src/internals/gc-rooting-invariant.md:356 +#: src/internals/gc-rooting-invariant.md:357 msgid "**0**" msgstr "**0**" -#: src/internals/gc-rooting-invariant.md:330 +#: src/internals/gc-rooting-invariant.md:357 msgid "`--unrooted-allocas --moving-only`" msgstr "`--unrooted-allocas --moving-only`" -#: src/internals/gc-rooting-invariant.md:331 +#: src/internals/gc-rooting-invariant.md:358 msgid "`--stale-registers --moving-only`" msgstr "`--stale-registers --moving-only`" -#: src/internals/gc-rooting-invariant.md:332 +#: src/internals/gc-rooting-invariant.md:359 msgid "`--statepoints --moving-only` (the lowering that ships)" msgstr "`--statepoints --moving-only` (la bajada que los buques)" -#: src/internals/gc-rooting-invariant.md:333 +#: src/internals/gc-rooting-invariant.md:360 msgid "`--stale-registers` (unfiltered)" msgstr "`--stale-registers` (no filtrado)" -#: src/internals/gc-rooting-invariant.md:333 +#: src/internals/gc-rooting-invariant.md:360 msgid "24" msgstr "24" -#: src/internals/gc-rooting-invariant.md:333 +#: src/internals/gc-rooting-invariant.md:360 msgid "35" msgstr "35" -#: src/internals/gc-rooting-invariant.md:334 +#: src/internals/gc-rooting-invariant.md:361 msgid "`--statepoints` (unfiltered)" msgstr "`--statepoints` (no filtrado)" -#: src/internals/gc-rooting-invariant.md:334 +#: src/internals/gc-rooting-invariant.md:361 msgid "15" msgstr "15" -#: src/internals/gc-rooting-invariant.md:334 +#: src/internals/gc-rooting-invariant.md:361 msgid "21" msgstr "21" -#: src/internals/gc-rooting-invariant.md:336 +#: src/internals/gc-rooting-invariant.md:363 msgid "" "Every gated arm blind, both unfiltered arms not — _including_ `--" "statepoints`, added in #7663 precisely because the other three were blind to " @@ -81387,7 +84439,7 @@ msgstr "" "ciegos a la bajada de la navegación. Agregar el nombre lleva los brazos " "saboteados a 13 y 8 y deja los brazos limpios a 2 y 2." -#: src/internals/gc-rooting-invariant.md:341 +#: src/internals/gc-rooting-invariant.md:368 msgid "" "**A poll-capable symbol NO audit can ask for** (#8809). `--audit-poll-reach` " "walks only symbols `ALLOC_RE` matches, so a helper that allocates but spells " @@ -81417,18 +84469,19 @@ msgstr "" "pueda, añádala a `POLL_CAPABLE_RUNTIME` en la misma confirmación.** Nada te " "lo pedirá." -#: src/internals/gc-rooting-invariant.md:354 +#: src/internals/gc-rooting-invariant.md:381 +#, fuzzy msgid "" "`--audit-poll-capable` is the gate for rounds 1–2 and `--audit-poll-reach` " -"is the gate for round 3; round 4 has no gate. `gc-root-dominance.yml` runs " -"both alongside `--audit-alloc-re` before the build." +"is the gate for round 3; round 4 has no gate. the `gc-root-dominance` job of " +"`gc.yml` runs both alongside `--audit-alloc-re` before the build." msgstr "" "`--audit-poll-capable` es la puerta para las rondas 1-2 y `--audit-poll-" "reach` es la puerta para la ronda 3; la ronda 4 no tiene puerta. `gc-root-" "dominance.yml` se ejecuta junto a `--audit-alloc-re` antes de la " "construcción." -#: src/internals/gc-rooting-invariant.md:358 +#: src/internals/gc-rooting-invariant.md:385 msgid "" "**Those pre-build audits are also the job's single point of failure, and it " "has already cost ten days.** `--audit-poll-reach` went red on `main` on " @@ -81455,7 +84508,7 @@ msgstr "" "fantasma con el codógeno símbolo realmente emite en lugar de eliminarlo — " "borrar convierte la auditoría en verde y deja el agujero." -#: src/internals/gc-rooting-invariant.md:369 +#: src/internals/gc-rooting-invariant.md:396 msgid "" "`--audit-poll-reach` fails when a symbol `ALLOC_RE` matches reaches a " "`POLL_CAPABLE_RUNTIME` symbol through the runtime's own call graph without " @@ -81486,23 +84539,23 @@ msgstr "" "más), y los comentarios y los literales de cuerda se despojan primero para " "que un nombre mencionado en prosa no pueda convertirse en una premisa." -#: src/internals/gc-rooting-invariant.md:382 +#: src/internals/gc-rooting-invariant.md:409 msgid "Checking a _plausible_ name is not enough. Confirm against emitted IR:" msgstr "" "Comprobar un nombre _plausible_ no es suficiente. Confirmar contra IR " "emitido:" -#: src/internals/gc-rooting-invariant.md:385 +#: src/internals/gc-rooting-invariant.md:412 msgid "'call [^@]*@js_[A-Za-z0-9_.$]*('" msgstr "'call [^@]*@js_[A-Za-z0-9_.$]*('" -#: src/internals/gc-rooting-invariant.md:389 +#: src/internals/gc-rooting-invariant.md:416 msgid "" -"The WASI platform uses the `js_shadow_slot_bind` call form the " -"shadow-root checker anchors on." +"The WASI platform uses the `js_shadow_slot_bind` call form the shadow-root " +"checker anchors on." msgstr "" -#: src/internals/gc-rooting-invariant.md:392 +#: src/internals/gc-rooting-invariant.md:419 msgid "" "`--stale-registers` (#7206) additionally catches values that are _never_ " "rooted — read out of a root and held in a register across a collection " @@ -81518,7 +84571,7 @@ msgstr "" "es el brazo que se basa en la lista de permisos, por lo que los casos 3 y 4 " "sólo superficie cuando se ejecuta este modo a mano." -#: src/internals/gc-rooting-invariant.md:398 +#: src/internals/gc-rooting-invariant.md:425 msgid "" "`--unrooted-allocas` (#7207) covers the remaining shape, and is the one the " "bind-anchored check is structurally blind to: the value lives in a plain " @@ -81534,7 +84587,7 @@ msgstr "" "a la función limpia. Encontró el `lower_call/new.rs` en línea de `this_slot` " "independientemente de cualquier sonda de tiempo de ejecución." -#: src/internals/gc-rooting-invariant.md:405 +#: src/internals/gc-rooting-invariant.md:432 msgid "" "**The gate runs this mode as of #7236, and the corpus reads 0.** It could " "not before: #7210 measured 66 hits and triaged every one as a false " @@ -81551,17 +84604,17 @@ msgstr "" "un local `Symbol` no tiene ranura de sombra en absoluto. Ejecutarlo a mano " "cuando toque un sitio `alloca_entry`:" -#: src/internals/gc-rooting-invariant.md:417 +#: src/internals/gc-rooting-invariant.md:444 msgid "2. The runtime instruments — second, and mind the depth" msgstr "" "2. Los instrumentos de tiempo de ejecución — segundo, y la mente de la " "profundidad" -#: src/internals/gc-rooting-invariant.md:419 +#: src/internals/gc-rooting-invariant.md:446 msgid "From #7196:" msgstr "Desde el #7196:" -#: src/internals/gc-rooting-invariant.md:421 +#: src/internals/gc-rooting-invariant.md:448 msgid "" "`PERRY_GC_SCHEDULE_RATE=1` (with a seed) — collect at every candidate " "safepoint, allocation-paced (#7728): one candidate per " @@ -81576,7 +84629,7 @@ msgstr "" "literal de cada uno cuando la ventana que está cazando se ejecuta una sola " "vez — es mucho más lento." -#: src/internals/gc-rooting-invariant.md:426 +#: src/internals/gc-rooting-invariant.md:453 msgid "" "`PERRY_GC_PROTECT_FROMSPACE=1` — `mprotect` from-space after evacuation so a " "stale read faults immediately instead of reading plausible garbage." @@ -81585,11 +84638,32 @@ msgstr "" "evacuación, de modo que una falla de lectura rancio inmediatamente en lugar " "de leer basura plausible." -#: src/internals/gc-rooting-invariant.md:428 +#: src/internals/gc-rooting-invariant.md:455 msgid "`PERRY_GC_FROMSPACE_SCAN_ABORT` — now actually runs." msgstr "`PERRY_GC_FROMSPACE_SCAN_ABORT` — ahora realmente se ejecuta." -#: src/internals/gc-rooting-invariant.md:429 +#: src/internals/gc-rooting-invariant.md:456 +msgid "" +"`PERRY_GC_PROTECT_OLD_SWEEP=1` (or `poison`) — the non-moving sweeps' " +"counterpart (#11842). What a sweep frees is recorded, poisoned with a NaN-" +"boxed pointer to unmapped memory and, for old and malloc objects at `=1`, " +"page-protected; nothing it frees is reused (no hole listed, no block reset " +"or released, no malloc `dealloc`). A fault report names the freed object the " +"fault address or a register points into and which sweep freed it. A run that " +"only passes with it on means some reuse of swept memory is the bug; blocking " +"one reuse path at a time narrows it." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:464 +msgid "" +"`PERRY_GC_BUDGETED_OLD_RECLAIM=1` — old-gen reclaim only ever runs as a " +"budgeted full started at a runtime safepoint (microtask pump, event loop), " +"never synchronously, so an async program's major collections all have " +"mutator windows inside their mark and sweep. The seeded schedule drives " +"minors only; this is the knob for the budgeted full." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:469 #, fuzzy msgid "" "`PERRY_GC_SCHEDULE_SEED=` (+ `PERRY_GC_SCHEDULE_RATE`, default `0.05`) " @@ -81615,7 +84689,7 @@ msgstr "" "sh [seed-count]` barre semillas e imprime un comando de " "reproducción por fallo." -#: src/internals/gc-rooting-invariant.md:440 +#: src/internals/gc-rooting-invariant.md:480 msgid "" "**A rate is not a substitute for a schedule.** Re-running one binary 60 " "times re-runs one schedule 60 times; with zero failures in `N` runs the 95% " @@ -81630,7 +84704,7 @@ msgstr "" "en absoluto. Variando _when_ colecciones de fuego es la única manera barata " "de explorar el espacio en el que el error realmente vive." -#: src/internals/gc-rooting-invariant.md:446 +#: src/internals/gc-rooting-invariant.md:486 msgid "" "**`PERRY_GC_PROTECT_FROMSPACE_DEPTH` defaults to 4, and that default " "produces FALSE GREENS.** Four levels of retained from-space is not enough to " @@ -81643,7 +84717,7 @@ msgstr "" "para el momento en que se desprecie. **Usa 800.** Una ejecución limpia en la " "profundidad predeterminada no significa nada." -#: src/internals/gc-rooting-invariant.md:451 +#: src/internals/gc-rooting-invariant.md:491 msgid "" "Depth is a **detection-window** knob, not a sensitivity knob, and the " "difference matters when the two instruments disagree. A page-set enters the " @@ -81672,7 +84746,7 @@ msgstr "" "acuerdo con el verificador estático, mira primero al verificador. Así fue " "como se resolvió el desacuerdo zod `clone`." -#: src/internals/gc-rooting-invariant.md:463 +#: src/internals/gc-rooting-invariant.md:503 msgid "" "And when a fault does fire, **walk UP the stack**. The reporter names the " "frame that DEREFERENCED the stale value, which is usually not the frame that " @@ -81684,7 +84758,7 @@ msgstr "" "marco que posee el registro — el valor comúnmente llega como un argumento de " "un llamante que lo deja rancio." -#: src/internals/gc-rooting-invariant.md:468 +#: src/internals/gc-rooting-invariant.md:508 msgid "" "And remember the ceiling on all of these: if the collection happens while " "the only copy is in a register, there is nothing at that moment for any " @@ -81696,11 +84770,11 @@ msgstr "" "cualquier sonda de tiempo de ejecución lo note. Estos instrumentos captan la " "_consecuencia, más tarde. El comprobador estático atrapa la causa, ahora." -#: src/internals/gc-rooting-invariant.md:473 +#: src/internals/gc-rooting-invariant.md:513 msgid "The mirror image: a missing write barrier (#8185)" msgstr "La imagen del espejo: una barrera de escritura faltante (#8185)" -#: src/internals/gc-rooting-invariant.md:475 +#: src/internals/gc-rooting-invariant.md:515 msgid "" "Everything above is about a value the collector cannot **find**. The write " "barrier is about an edge the collector is never **told about**. The two are " @@ -81712,43 +84786,43 @@ msgstr "" "nunca es **habla de**. Las dos son duales, y —esta es la parte que sigue " "atrapando a la gente— **sus detectores son intercambiados**." -#: src/internals/gc-rooting-invariant.md:480 +#: src/internals/gc-rooting-invariant.md:520 msgid "rooting bug" msgstr "bug de enraizamiento" -#: src/internals/gc-rooting-invariant.md:480 +#: src/internals/gc-rooting-invariant.md:520 msgid "missing/deleted write barrier" msgstr "missing/deleted barrera de escritura" -#: src/internals/gc-rooting-invariant.md:482 +#: src/internals/gc-rooting-invariant.md:522 msgid "what goes wrong" msgstr "lo que sale mal" -#: src/internals/gc-rooting-invariant.md:482 +#: src/internals/gc-rooting-invariant.md:522 msgid "a live value is invisible to the root scan" msgstr "un valor vivo es invisible para el escaneo raíz" -#: src/internals/gc-rooting-invariant.md:482 +#: src/internals/gc-rooting-invariant.md:522 msgid "an old→young edge is absent from the remembered set" msgstr "un viejo → borde joven está ausente del conjunto recordado" -#: src/internals/gc-rooting-invariant.md:483 +#: src/internals/gc-rooting-invariant.md:523 msgid "when it goes wrong" msgstr "Cuando sale mal" -#: src/internals/gc-rooting-invariant.md:483 +#: src/internals/gc-rooting-invariant.md:523 msgid "at the collection, silently" msgstr "en la colección, en silencio" -#: src/internals/gc-rooting-invariant.md:483 +#: src/internals/gc-rooting-invariant.md:523 msgid "not at the store at all; at some _later_ minor" msgstr "no en la tienda en absoluto; en algunos _más tarde_ menor" -#: src/internals/gc-rooting-invariant.md:484 +#: src/internals/gc-rooting-invariant.md:524 msgid "the detector" msgstr "el detector" -#: src/internals/gc-rooting-invariant.md:484 +#: src/internals/gc-rooting-invariant.md:524 msgid "" "the runtime instruments (`PERRY_GC_SCHEDULE_RATE`, " "`PERRY_GC_PROTECT_FROMSPACE`), plus the static checker for the IR-visible " @@ -81758,30 +84832,30 @@ msgstr "" "`PERRY_GC_PROTECT_FROMSPACE`), más el comprobador estático para la mitad " "visible IR" -#: src/internals/gc-rooting-invariant.md:484 +#: src/internals/gc-rooting-invariant.md:524 msgid "a **static IR assertion**, and nothing else" msgstr "a **Aserción estática de IR**Y nada más" -#: src/internals/gc-rooting-invariant.md:485 +#: src/internals/gc-rooting-invariant.md:525 msgid "the blind spot" msgstr "el punto ciego" -#: src/internals/gc-rooting-invariant.md:485 +#: src/internals/gc-rooting-invariant.md:525 msgid "" "the static checker cannot see a runtime-side cache of a heap pointer (see §5)" msgstr "" "el verificador estático no puede ver un caché de lado de ejecución de un " "puntero de montón (véase §5)" -#: src/internals/gc-rooting-invariant.md:485 +#: src/internals/gc-rooting-invariant.md:525 msgid "**every runtime probe we have**" msgstr "**cada sonda de tiempo de ejecución que tenemos**" -#: src/internals/gc-rooting-invariant.md:487 +#: src/internals/gc-rooting-invariant.md:527 msgid "Why no runtime probe can see it" msgstr "¿Por qué ninguna sonda de tiempo de ejecución puede verlo" -#: src/internals/gc-rooting-invariant.md:489 +#: src/internals/gc-rooting-invariant.md:529 msgid "" "A dropped barrier corrupts nothing at the moment of the store. The store " "still writes the right bits into the right slot; the object graph is " @@ -81796,19 +84870,19 @@ msgstr "" "Convirtiéndolo en un fracaso observable necesita una conjunción que el " "programa tiene que suministrar por sí solo:" -#: src/internals/gc-rooting-invariant.md:495 +#: src/internals/gc-rooting-invariant.md:535 msgid "" "the parent has to survive into old-gen (or be tenured) **before** the store;" msgstr "" "el padre tiene que sobrevivir en la vieja generación (o ser titular) " "**antes** el almacén;" -#: src/internals/gc-rooting-invariant.md:496 +#: src/internals/gc-rooting-invariant.md:536 msgid "the child has to still be in the nursery **at the next minor**;" msgstr "" "el niño tiene que estar todavía en la guardería **en el siguiente menor**;" -#: src/internals/gc-rooting-invariant.md:497 +#: src/internals/gc-rooting-invariant.md:537 msgid "" "a **minor** collection — not a full mark-sweep, which retraces everything " "and papers over the whole class — has to land in that window; and" @@ -81816,7 +84890,7 @@ msgstr "" "a **menor** la colección —no es un barredor de marcas completo, que retrae " "todo y papeles sobre toda la clase— tiene que aterrizar en esa ventana; y" -#: src/internals/gc-rooting-invariant.md:499 +#: src/internals/gc-rooting-invariant.md:539 msgid "" "that edge has to be the _only_ path to the child, or some other root finds " "it anyway and the collection is clean." @@ -81824,7 +84898,7 @@ msgstr "" "que borde tiene que ser la ruta _only_ al niño, o alguna otra raíz lo " "encuentra de todos modos y la colección está limpia." -#: src/internals/gc-rooting-invariant.md:502 +#: src/internals/gc-rooting-invariant.md:542 msgid "" "Miss any one and the minor collects correctly, the program prints the right " "answer, and the probe reports success. Nothing was tried." @@ -81832,7 +84906,7 @@ msgstr "" "Si se pierde a cualquiera y el menor recoge correctamente, el programa " "imprime la respuesta correcta, y la sonda reporta éxito. No se intentó nada." -#: src/internals/gc-rooting-invariant.md:505 +#: src/internals/gc-rooting-invariant.md:545 msgid "" "The individual knobs are worse than merely insensitive — three of them are " "aimed at a different property entirely, and it is easy to read their green " @@ -81842,7 +84916,7 @@ msgstr "" "ellas están dirigidas a una propiedad completamente diferente, y es fácil " "leer su verde como evidencia:" -#: src/internals/gc-rooting-invariant.md:509 +#: src/internals/gc-rooting-invariant.md:549 msgid "" "`PERRY_GC_FORCE_EVACUATE` / `PERRY_GC_VERIFY_EVACUATION` verify " "**rewriting**: that every live slot pointing at a forwarded object was " @@ -81856,7 +84930,7 @@ msgstr "" "que no pudo reescribir. Recordar y reescribir son diferentes propiedades, y " "el verificador sólo pregunta sobre el segundo." -#: src/internals/gc-rooting-invariant.md:514 +#: src/internals/gc-rooting-invariant.md:554 msgid "" "`PERRY_GEN_GC=0` reverts to full mark-sweep, which **does not consult the " "remembered set at all**. It does not make the bug visible; it makes the bug " @@ -81868,7 +84942,7 @@ msgstr "" "sea inaccesible. Una carrera verde aquí es la evidencia más fuerte y vacía " "de los tres." -#: src/internals/gc-rooting-invariant.md:518 +#: src/internals/gc-rooting-invariant.md:558 msgid "" "`PERRY_GC_SCHEDULE_RATE=1` + `PERRY_GC_PROTECT_FROMSPACE` catch a _stale " "read of a moved object_ — condition (4)'s aftermath, on the rooting side of " @@ -81880,7 +84954,7 @@ msgstr "" "raíz de la dualidad. Ellos fallan en un puntero colgando del espacio, no en " "un objeto vivo que nunca fue rastreado." -#: src/internals/gc-rooting-invariant.md:523 +#: src/internals/gc-rooting-invariant.md:563 msgid "" "And check the knob you are about to cite is a knob. `scripts/" "check_gc_env_knobs.py` is in `lint` precisely because this drifts: a matrix " @@ -81895,7 +84969,7 @@ msgstr "" "nombre en este documento es uno que la puerta ha confirmado que posee un " "analizador vivo." -#: src/internals/gc-rooting-invariant.md:529 +#: src/internals/gc-rooting-invariant.md:569 msgid "" "This is CLAUDE.md's hazard 4 (\"the gate runs but its subject never did\") " "with the subject inverted: **the absence of a barrier cannot be observed by " @@ -81907,7 +84981,7 @@ msgstr "" "observar ejecutando el programa.** No hay ejecución en la que \"la barrera " "no funcionó\" es un evento distinguible." -#: src/internals/gc-rooting-invariant.md:534 +#: src/internals/gc-rooting-invariant.md:574 msgid "" "**Recorded, because it is the whole reason the IR assertions exist (#8183):" "** a **release** build with the write barrier deleted from the dynamic-key " @@ -81927,11 +85001,11 @@ msgstr "" "contradicción. La prueba de infrarrojos estática fue lo único que dijo que " "no." -#: src/internals/gc-rooting-invariant.md:542 +#: src/internals/gc-rooting-invariant.md:582 msgid "What a PR that adds or moves a store on a GC slot owes" msgstr "Lo que un PR que añade o mueve una tienda en una ranura de GC debe" -#: src/internals/gc-rooting-invariant.md:544 +#: src/internals/gc-rooting-invariant.md:584 msgid "" "Its barrier evidence is a **static IR assertion**, not a behavioural test. " "Four things it has to pin, each because a sabotage that skipped it was _not_ " @@ -81941,7 +85015,7 @@ msgstr "" "comportamiento. Cuatro cosas que tiene que fijar, cada una porque un " "sabotaje que se saltó fue _not_ atrapado:" -#: src/internals/gc-rooting-invariant.md:547 +#: src/internals/gc-rooting-invariant.md:587 msgid "" "**The bookkeeping is present** in the pointer-capable arm — the write " "barrier, the layout note, and the string addref. Any one of the three going " @@ -81951,7 +85025,7 @@ msgstr "" "barrera de escritura, la nota de diseño y la cadena addref. Cualquiera de " "los tres desaparecidos es la familia #5094 / #7511 de varados silenciosos." -#: src/internals/gc-rooting-invariant.md:550 +#: src/internals/gc-rooting-invariant.md:590 msgid "" "**The arm is REACHED.** Assert a `br i1` _into_ the block, not merely that a " "block with that label exists. #8183's third sabotage — routing reference " @@ -81965,7 +85039,7 @@ msgstr "" "muerto** que cada afirmación de contenido inspeccionado felizmente, e " "inicialmente pasó. La presencia de código no es prueba de que funcione." -#: src/internals/gc-rooting-invariant.md:555 +#: src/internals/gc-rooting-invariant.md:595 msgid "" "**The negative arm stays clean.** The pointer-free arm must _not_ contain " "the bookkeeping. A barrier leaking into it means the discriminator stopped " @@ -81975,7 +85049,7 @@ msgstr "" "la contabilidad. Una barrera que se filtra en ella significa que el " "discriminador dejó de discriminar, y la \"optimización\" no mide nada." -#: src/internals/gc-rooting-invariant.md:558 +#: src/internals/gc-rooting-invariant.md:598 msgid "" "**Sabotage runs, reported.** Delete each element in turn and record that the " "test goes red. A test that has never failed is a test whose failure mode is " @@ -81985,7 +85059,7 @@ msgstr "" "que la prueba se vuelve roja. Una prueba que nunca ha fallado es una prueba " "cuyo modo de fallo es desconocido." -#: src/internals/gc-rooting-invariant.md:562 +#: src/internals/gc-rooting-invariant.md:602 #, fuzzy msgid "" "And put it where it runs. `test.yml`'s per-PR `cargo-test` arm is `--lib --" @@ -82005,25 +85079,25 @@ msgstr "" "class_field_barrier_tests.rs`, `index_set_barrier_tests.rs` y " "`write_pic_barrier_tests.rs` son la forma." -#: src/internals/gc-rooting-invariant.md:570 +#: src/internals/gc-rooting-invariant.md:610 msgid "The `GC_STORE_AUDIT` marker, and what it does and does not prove" msgstr "El marcador `GC_STORE_AUDIT`, y lo que hace y no prueba" -#: src/internals/gc-rooting-invariant.md:572 +#: src/internals/gc-rooting-invariant.md:612 msgid "" "Every raw GC-relevant store site carries a nearby marker naming its verdict:" msgstr "" "Cada sitio de la tienda relevante de GC en bruto lleva un marcador cercano " "que nombra su veredicto:" -#: src/internals/gc-rooting-invariant.md:575 +#: src/internals/gc-rooting-invariant.md:615 msgid "" "// GC_STORE_AUDIT(BARRIERED): the slot write is unconditional; the barrier\n" "// below is guarded only by a live test that the stored bits carry no heap\n" "// pointer, which is the barrier's own first test.\n" msgstr "" -#: src/internals/gc-rooting-invariant.md:580 +#: src/internals/gc-rooting-invariant.md:620 msgid "" "The classes are `BARRIERED`, `EXTERNAL_BARRIERED`, `ROOT`, `INIT`, " "`POINTER_FREE`, `STACK`. `scripts/gc_store_site_inventory.py` (in `lint`) " @@ -82036,7 +85110,7 @@ msgstr "" "marcador — por lo que un **nuevo** sitio de la tienda no puede aterrizar con " "la pregunta sin respuesta." -#: src/internals/gc-rooting-invariant.md:585 +#: src/internals/gc-rooting-invariant.md:625 msgid "" "Since #8185 landed its second half, the script verifies the **claim**, not " "just the comment, for the two classes where a false claim strands objects:" @@ -82045,7 +85119,7 @@ msgstr "" "**Reclamación**, no sólo el comentario, para las dos clases donde un falso " "reclamo filamentos objetos:" -#: src/internals/gc-rooting-invariant.md:588 +#: src/internals/gc-rooting-invariant.md:628 msgid "" "**`BARRIERED` in `perry-codegen`** is bound to an IR witness. Every call to " "the stem-taking barrier emitters " @@ -82087,7 +85161,7 @@ msgstr "" "llamada fuera de su bloque, evitar la puerta) corren en la suite contra cada " "tallo." -#: src/internals/gc-rooting-invariant.md:606 +#: src/internals/gc-rooting-invariant.md:646 msgid "" "**`BARRIERED` / `EXTERNAL_BARRIERED` in `perry-runtime` / `perry-stdlib`** " "are rustc-compiled, so there is no perry-emitted IR; the claim is verified " @@ -82114,7 +85188,7 @@ msgstr "" "llamada de barrera en la misma función todavía pasan), y el guión imprime " "ese límite." -#: src/internals/gc-rooting-invariant.md:618 +#: src/internals/gc-rooting-invariant.md:658 msgid "" "What is still trusted: `ROOT`, `INIT`, `POINTER_FREE` and `STACK` verdicts " "are human-audited only, and the script says so in its summary on every run — " @@ -82137,11 +85211,11 @@ msgstr "" "(la disciplina `gc_rekeyed_key_tables.py`), y su `--self-test` planta quince " "formas, cada una de las cuales debe ser adjudicada." -#: src/internals/gc-rooting-invariant.md:628 +#: src/internals/gc-rooting-invariant.md:668 msgid "The corpus problem, and the two corpora (#7280)" msgstr "El problema del corpus, y los dos cuerpos (#7280)" -#: src/internals/gc-rooting-invariant.md:630 +#: src/internals/gc-rooting-invariant.md:670 msgid "" "**A hand-written corpus cannot express this class of bug at dependency " "scale, and for a while nobody could tell, because it was green.**" @@ -82149,7 +85223,7 @@ msgstr "" "**Un corpus escrito a mano no puede expresar esta clase de error a escala de " "dependencia, y durante un tiempo nadie podía decir, porque era verde.**" -#: src/internals/gc-rooting-invariant.md:633 +#: src/internals/gc-rooting-invariant.md:673 msgid "" "`scripts/gc_root_dominance_corpus.sh` compiles ~124 `test-files/` sources " "chosen for the lowerings they exercise. It reads **zero** in both modes the " @@ -82164,7 +85238,7 @@ msgstr "" "pone en una frase: _25 archivos curados pasan mientras que 20 líneas de " "stock zod fail._" -#: src/internals/gc-rooting-invariant.md:639 +#: src/internals/gc-rooting-invariant.md:679 msgid "" "That is not a size problem. Both corpora were measured on the same compiler " "with `--stale-registers --moving-only`:" @@ -82172,40 +85246,40 @@ msgstr "" "Eso no es un problema de tamaño. Ambos cuerpos fueron medidos en el mismo " "compilador con `--stale-registers --moving-only`:" -#: src/internals/gc-rooting-invariant.md:642 +#: src/internals/gc-rooting-invariant.md:682 msgid "corpus" msgstr "corpus" -#: src/internals/gc-rooting-invariant.md:642 +#: src/internals/gc-rooting-invariant.md:682 msgid "stale uses" msgstr "usos rancios" -#: src/internals/gc-rooting-invariant.md:642 +#: src/internals/gc-rooting-invariant.md:682 msgid "what dominates" msgstr "lo que domina" -#: src/internals/gc-rooting-invariant.md:644 +#: src/internals/gc-rooting-invariant.md:684 msgid "curated, 124 sources / 144 modules" msgstr "comisariado, 124 fuentes / 144 módulos" -#: src/internals/gc-rooting-invariant.md:644 +#: src/internals/gc-rooting-invariant.md:684 msgid "116" msgstr "116" -#: src/internals/gc-rooting-invariant.md:644 +#: src/internals/gc-rooting-invariant.md:684 msgid "property-GET helper windows, `js_number_coerce`, `js_closure_callN`" msgstr "" "ventanas de ayuda de propiedad-GET, `js_number_coerce`, `js_closure_callN`" -#: src/internals/gc-rooting-invariant.md:645 +#: src/internals/gc-rooting-invariant.md:685 msgid "dependency-scale, 81 modules / 62 MB" msgstr "de 81 módulos / 62 MB" -#: src/internals/gc-rooting-invariant.md:645 +#: src/internals/gc-rooting-invariant.md:685 msgid "370" msgstr "370" -#: src/internals/gc-rooting-invariant.md:645 +#: src/internals/gc-rooting-invariant.md:685 msgid "" "`js_object_assign_one` (object spread) 137, `js_new_function_construct` 102, " "`js_closure_call*` 30" @@ -82213,7 +85287,7 @@ msgstr "" "`js_object_assign_one` (difusión de objetos) 137, " "`js_new_function_construct` 102, `js_closure_call*` 30" -#: src/internals/gc-rooting-invariant.md:647 +#: src/internals/gc-rooting-invariant.md:687 msgid "" "The curated corpus produces 12 of the first population and 1 of the second. " "A hand-written test allocates a couple of objects and calls a couple of " @@ -82230,7 +85304,7 @@ msgstr "" "las formas**, por lo que un corpus sin las formas no puede expresarlos como " "muchos archivos que tiene." -#: src/internals/gc-rooting-invariant.md:654 +#: src/internals/gc-rooting-invariant.md:694 msgid "" "So there is a second corpus, generated from a real npm dependency rather " "than from anything written for the occasion:" @@ -82238,12 +85312,12 @@ msgstr "" "Así que hay un segundo corpus, generado a partir de una dependencia real de " "npm en lugar de cualquier cosa escrita para la ocasión:" -#: src/internals/gc-rooting-invariant.md:658 +#: src/internals/gc-rooting-invariant.md:698 #, fuzzy msgid "# zod is a package.json devDependency\n" msgstr "# zod es un package.json devDependency" -#: src/internals/gc-rooting-invariant.md:663 +#: src/internals/gc-rooting-invariant.md:703 msgid "" "`test-files/gc-dep-corpus/main.ts` is the only entry point; the rest of that " "directory reaches the compiler by being imported from it, and the generator " @@ -82257,7 +85331,7 @@ msgstr "" "un piso de tamaño no podría ser, ya que ~90 módulos de pantano `zod` " "cualquier cuenta una fuente de 40 líneas faltantes cruzaría." -#: src/internals/gc-rooting-invariant.md:669 +#: src/internals/gc-rooting-invariant.md:709 msgid "" "Nothing is sampled away: all 81 modules and all 62 MB are checked. Emitting " "costs ~8s and the two gated arms ~4s, because those are linear in " @@ -82269,36 +85343,37 @@ msgstr "" "de instrucciones. El presupuesto de `--stale-registers` es el caro (~5 min): " "su escaneo es superlineal, y 62 MB es 62 MB." -#: src/internals/gc-rooting-invariant.md:674 +#: src/internals/gc-rooting-invariant.md:714 msgid "The CI gate" msgstr "La puerta de la CI" -#: src/internals/gc-rooting-invariant.md:676 +#: src/internals/gc-rooting-invariant.md:716 +#, fuzzy msgid "" -"`.github/workflows/gc-root-dominance.yml` runs the checker on every PR over " -"both corpora. The whole job is a few minutes plus the compiler build; the " -"two gated checks are about three seconds each over ~2000 and ~12900 " -"functions." +"The `gc-root-dominance` job of `.github/workflows/gc.yml` runs the checker " +"on every PR over both corpora. The whole job is a few minutes plus the " +"compiler build; the two gated checks are about three seconds each over ~2000 " +"and ~12900 functions." msgstr "" "`.github/workflows/gc-root-dominance.yml` ejecuta el chequeo en cada PR " "sobre ambos cuerpos. Todo el trabajo es de unos minutos más la compilación " "del compilador; las dos comprobaciones cerradas son de unos tres segundos " "cada una sobre ~2000 y ~12900 funciones." -#: src/internals/gc-rooting-invariant.md:680 +#: src/internals/gc-rooting-invariant.md:720 msgid "It is built to be able to fail, against all four hazards in CLAUDE.md:" msgstr "" "Está construido para ser capaz de fallar, contra los cuatro peligros en " "CLAUDE.md:" -#: src/internals/gc-rooting-invariant.md:682 +#: src/internals/gc-rooting-invariant.md:722 msgid "" "the checker's exit status is the job's — no `continue-on-error`, no pipe;" msgstr "" "el estado de salida del verificador es el del trabajo — ningún `continue-on-" "error`, ningún tubo;" -#: src/internals/gc-rooting-invariant.md:683 +#: src/internals/gc-rooting-invariant.md:723 msgid "" "`concurrency` cancels pull-request runs only, so `main` runs are never " "starved;" @@ -82306,7 +85381,7 @@ msgstr "" "`concurrency` cancela únicamente las solicitudes de retirada, por lo que las " "ejecuciones de `main` nunca se mueren de hambre;" -#: src/internals/gc-rooting-invariant.md:684 +#: src/internals/gc-rooting-invariant.md:724 msgid "" "`--min-files` / `--min-binds` / `--min-funcs` refuse a clean verdict over a " "corpus too thin to have exercised anything, and the run prints `checked N " @@ -82317,7 +85392,7 @@ msgstr "" "imprime `checked N functions / M modules` para que una ejecución " "silenciosamente vacía sea visible;" -#: src/internals/gc-rooting-invariant.md:687 +#: src/internals/gc-rooting-invariant.md:727 msgid "" "`--self-test` proves it still fires on planted fixtures, and `--seeded-" "violations 40` splices collection points into the **real** corpus IR and " @@ -82330,7 +85405,7 @@ msgstr "" "verificador perdiendo silenciosamente la capacidad de leer la producción de " "Perry;" -#: src/internals/gc-rooting-invariant.md:691 +#: src/internals/gc-rooting-invariant.md:731 msgid "" "`--audit-alloc-re` and `--audit-poll-capable` refuse a name that matches no " "exported runtime symbol, in the two tables that decide _whether a register " @@ -82347,11 +85422,11 @@ msgstr "" "entradas muertas: nueve en `ALLOC_RE` a través de dos rondas, diez en " "`POLL_CAPABLE_RUNTIME`." -#: src/internals/gc-rooting-invariant.md:698 +#: src/internals/gc-rooting-invariant.md:738 msgid "The allowlist, and why it is not a number" msgstr "La lista de permisos, y por qué no es un número" -#: src/internals/gc-rooting-invariant.md:700 +#: src/internals/gc-rooting-invariant.md:740 msgid "" "Known-remaining violations live in `scripts/gc_root_dominance_allowlist." "json`, one entry each with a fingerprint, an issue, and a written " @@ -82361,7 +85436,7 @@ msgstr "" "gc_root_dominance_allowlist.json`, una entrada cada una con una huella " "digital, un problema y una justificación escrita." -#: src/internals/gc-rooting-invariant.md:703 +#: src/internals/gc-rooting-invariant.md:743 msgid "" "A numeric threshold cannot tell a new violation from an old one: fix one " "bug, introduce another, and the total is unchanged and the gate stays green. " @@ -82374,11 +85449,11 @@ msgstr "" "construcción roja es aumentar el número por uno, y nada en el diff dice lo " "que fue concedido." -#: src/internals/gc-rooting-invariant.md:708 +#: src/internals/gc-rooting-invariant.md:748 msgid "So the checker enforces three properties:" msgstr "Así que el verificador impone tres propiedades:" -#: src/internals/gc-rooting-invariant.md:710 +#: src/internals/gc-rooting-invariant.md:750 msgid "" "**an entry that matches nothing fails the build.** When you fix the bug, " "delete the entry in the same PR. That is the ratchet, and it is why a fixed " @@ -82389,7 +85464,7 @@ msgstr "" "es por eso que un insecto fijo no puede dejar una lápida que en silencio " "amplía la cobertura más tarde." -#: src/internals/gc-rooting-invariant.md:713 +#: src/internals/gc-rooting-invariant.md:753 msgid "" "**an entry suppresses at most its `count`.** A second violation of the same " "shape in the same function is new, and fails." @@ -82397,14 +85472,14 @@ msgstr "" "**una entrada suprime como máximo su `count`.** Una segunda violación de la " "misma forma en la misma función es nueva, y falla." -#: src/internals/gc-rooting-invariant.md:715 +#: src/internals/gc-rooting-invariant.md:755 msgid "" "**a violation with no entry fails**, regardless of how many entries exist." msgstr "" "**Una violación sin entrada falla**, independientemente de cuántas entradas " "existen." -#: src/internals/gc-rooting-invariant.md:717 +#: src/internals/gc-rooting-invariant.md:757 msgid "" "Adding an entry is a code-review event. Bumping a `count` to green a build " "is the exact thing this file exists to prevent." @@ -82412,11 +85487,11 @@ msgstr "" "Agregar una entrada es un evento de revisión de código. Poner un `count` en " "verde una compilación es lo que este archivo existe para prevenir." -#: src/internals/gc-rooting-invariant.md:720 +#: src/internals/gc-rooting-invariant.md:760 msgid "Promoting this gate" msgstr "Promoviendo esta puerta" -#: src/internals/gc-rooting-invariant.md:722 +#: src/internals/gc-rooting-invariant.md:762 msgid "" "**As of this writing the job is NOT in branch protection's required " "contexts**, which means it cannot turn a merge red — hazard 2." @@ -82425,11 +85500,11 @@ msgstr "" "comprobaciones requeridas por la protección de ramas**, lo que significa que " "no puede hacer que una fusión falle — riesgo 2." -#: src/internals/gc-rooting-invariant.md:725 +#: src/internals/gc-rooting-invariant.md:765 msgid "Both of the conditions #7198 named are now met:" msgstr "Las dos condiciones #7198 nombradas se cumplen ahora:" -#: src/internals/gc-rooting-invariant.md:727 +#: src/internals/gc-rooting-invariant.md:767 msgid "" "the bind-anchored dominance check is green on `main` with an **empty** " "allowlist (the #7211 entries were deleted when that predicate was fixed in " @@ -82439,7 +85514,7 @@ msgstr "" "lista de permisos (las entradas #7211 se eliminaron cuando ese predicado se " "fijó en \\#7226);" -#: src/internals/gc-rooting-invariant.md:730 +#: src/internals/gc-rooting-invariant.md:770 msgid "" "`--unrooted-allocas --moving-only` reads **0** and is a step in the job " "(#7236). That was the outstanding one: it was 98 before #7235, 2 after, and " @@ -82449,7 +85524,7 @@ msgstr "" "(#7236). Ese fue el sobresaliente: fue 98 antes de #7235, 2 después, y 0 una " "vez que `Type::Symbol` dejó de ser clasificado como un inmediato." -#: src/internals/gc-rooting-invariant.md:734 +#: src/internals/gc-rooting-invariant.md:774 msgid "" "So the remaining step is for a **repo admin** to add `gc-root-dominance` to " "branch protection's required contexts:" @@ -82457,7 +85532,7 @@ msgstr "" "Así que el paso restante es para un **repo admin** añadir `gc-root-" "dominance` a los contextos de protección de sucursales requeridos:" -#: src/internals/gc-rooting-invariant.md:742 +#: src/internals/gc-rooting-invariant.md:782 msgid "" "A workflow cannot do this to itself, and neither can a PR. Until it is done, " "this is documentation. Per CLAUDE.md's corollary, promote it **after** the " @@ -82471,7 +85546,7 @@ msgstr "" "con el paso `--unrooted-allocas` incluido — una puerta que nunca ha sido " "verde en su forma actual bloquea cada PR abierta el día que se requiere." -#: src/internals/gc-rooting-invariant.md:748 +#: src/internals/gc-rooting-invariant.md:788 msgid "" "**`gc-root-dominance-statepoints` is a SEPARATE context and a separate " "decision.** It was added by #7663 as a second job for exactly that reason: " @@ -82494,11 +85569,39 @@ msgstr "" "población está fija; una promoción que congela el presupuesto donde está ha " "comprado un número, no un invariante." -#: src/internals/gc-rooting-invariant.md:758 +#: src/internals/gc-rooting-invariant.md:798 +msgid "Rematerialized global-backed roots (native lowering)" +msgstr "" + +#: src/internals/gc-rooting-invariant.md:800 +msgid "" +"A root slot whose only heap value is a copy of an immutable, collector-" +"rewritten global is not relocated. It is re-read from that global at each " +"use (`crates/perry-codegen/src/function/precise_roots/remat.rs`). Two global " +"families qualify: string-literal handles (`_.str.N.handle`) and class-" +"keys arrays (`@perry_class_keys_*`). Both are registered with " +"`js_gc_register_global_root`, rewritten on evacuation, and written only by " +"their module's init. The pass checks the rest on the emitted IR. Every store " +"into the slot must be a load of that one global or a constant, the slot's " +"address must not escape, and the function must not store to the global. Any " +"slot that fails a check stays an ordinary `ptr addrspace(1)` root." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:811 +msgid "" +"The slot stays a plain alloca and records \"holds the global's value\" as a " +"non-heap marker in the `0x7FFC` band. Each read becomes `select(slot == " +"marker, load @G, slot)`, so the value a consumer sees is always loaded after " +"the last safepoint. Module `let`/`var` globals (`@perry_global_*`) and " +"static fields are registered roots too, but the program reassigns them, so " +"they are never rematerialized. A re-read could observe a later assignment." +msgstr "" + +#: src/internals/gc-rooting-invariant.md:818 msgid "Rules of thumb" msgstr "Reglas generales" -#: src/internals/gc-rooting-invariant.md:760 +#: src/internals/gc-rooting-invariant.md:820 msgid "" "**Root before you call, not after.** If a value must survive a call, its " "root store belongs above the call, unconditionally. Do not predicate it on a " @@ -82513,7 +85616,7 @@ msgstr "" "los inicializadores suministrados por el autor, nunca sobre las propias " "llamadas `js_object_set_field_by_name` emitidas por la bajada." -#: src/internals/gc-rooting-invariant.md:765 +#: src/internals/gc-rooting-invariant.md:825 msgid "" "**Re-read the root after every collection point.** Never cache a load out of " "a root slot across a call. `rooted_handle_get` exists for this." @@ -82522,7 +85625,7 @@ msgstr "" "carga de una ranura raíz a través de una llamada. `rooted_handle_get` existe " "para esto." -#: src/internals/gc-rooting-invariant.md:767 +#: src/internals/gc-rooting-invariant.md:827 msgid "" "**Evaluate-then-allocate is the hazard.** Any lowering with two or more " "operands where one is materialized before another is lowered needs the first " @@ -82532,7 +85635,7 @@ msgstr "" "operandos donde uno se materializa antes de otro se baja necesita el primero " "enraizado." -#: src/internals/gc-rooting-invariant.md:770 +#: src/internals/gc-rooting-invariant.md:830 msgid "" "**`--trace llvm` and read it.** Three seconds of the checker beats a day of " "bisecting a `not a function` five cycles downstream." @@ -82540,7 +85643,7 @@ msgstr "" "**`--trace llvm` y léelo.** Tres segundos del comprobador vencen a un día de " "biseccionar un `not a function` cinco ciclos río abajo." -#: src/internals/gc-rooting-invariant.md:772 +#: src/internals/gc-rooting-invariant.md:832 msgid "" "**When in doubt, root it.** A redundant shadow slot costs a store. A missing " "one costs a day, and it costs it to whoever hits the crash, not to you." @@ -83970,9 +87073,9 @@ msgstr "" msgid "" "`#[deny]` the escape hatch per-module as each module finishes, so migrated " "code cannot regress. **Done, as a test rather than an attribute**: Rust has " -"no `#[deny]` for \"do not call this `pub(crate)` function from this module" -"\", so `rooting::migration_ledger` `include_str!`s each finished module and " -"fails the build if it names `expr::temp_root`." +"no `#[deny]` for \"do not call this `pub(crate)` function from this " +"module\", so `rooting::migration_ledger` `include_str!`s each finished " +"module and fails the build if it names `expr::temp_root`." msgstr "" "`#[deny]` la escotilla de escape por módulo a medida que termina cada " "módulo, por lo que el código migrado no puede retroceder. **Hecho, como " @@ -84435,9 +87538,9 @@ msgstr "¿Qué hacen los estados a este RFC" #: src/internals/rfc-rooting-by-construction.md:372 msgid "" -"Adopting layer 2 **deletes several of this document's \"what it cannot catch" -"\" entries rather than mitigating them**, because the shadow frame stops " -"existing:" +"Adopting layer 2 **deletes several of this document's \"what it cannot " +"catch\" entries rather than mitigating them**, because the shadow frame " +"stops existing:" msgstr "" "Capa de adopción 2 **elimina varias de las entradas de este documento \"lo " "que no puede capturar\" en lugar de mitigarlas**, porque el marco de sombra " @@ -84643,13 +87746,16 @@ msgstr "Estado de la aplicación" #: src/internals/node-api-host.md:10 #, fuzzy msgid "" -"The optional `perry-runtime/node-api-host` feature contains the version-10 " -"host: opaque handle scopes and references, GC root rewriting and weak " -"clearing, object metadata/finalization, values and descriptors, native " +"The runtime's Node-API host (`perry-runtime/src/node_api_host`) is the " +"version-10 host: opaque handle scopes and references, GC root rewriting and " +"weak clearing, object metadata/finalization, values and descriptors, native " "callbacks, buffers/views, promises, async work, threadsafe functions, " "cleanup hooks, and the authenticated module loader. The compiler enables it " -"only after the graph reaches a `.node` file owned by an exact host `perry." -"nativeAddons` entry." +"only after the graph reaches an approved `.node` input. Inputs include " +"literal edges, exact `perry.nativeAddonPaths` declarations, and target-" +"matching binaries discovered inside reached packages authorized by `perry." +"nativeAddons` (including their declared direct platform dependencies). An " +"unused package allowlist entry alone does not enable the host." msgstr "" "La función opcional `perry-runtime/node-api-host` contiene el host " "version-8: visores y referencias de mango opaco, reescritura de raíz GC y " @@ -84659,7 +87765,7 @@ msgstr "" "compilador sólo lo permite después de que el gráfico alcance un archivo `." "node` propiedad de una entrada `perry.nativeAddons` del host exacto." -#: src/internals/node-api-host.md:17 +#: src/internals/node-api-host.md:21 #, fuzzy msgid "" "Approved addons are screened for direct libuv/V8/NAN/Node C++ imports, " @@ -84679,7 +87785,7 @@ msgstr "" "ausentes cuando el gráfico addon está vacío, preservando la ruta " "predeterminada de cero bytes." -#: src/internals/node-api-host.md:24 +#: src/internals/node-api-host.md:28 msgid "" "The integration gate compiles and executes a direct C addon, verifies its " "imports resolve from the host executable, authenticates and then " @@ -84700,7 +87806,7 @@ msgstr "" "esos diferenciales como un fallo; las ejecuciones locales offline explican " "su salto a menos que `PERRY_REQUIRE_NPM_E2E=1` esté configurado." -#: src/internals/node-api-host.md:33 +#: src/internals/node-api-host.md:37 msgid "" "The host lets a Perry executable load a prebuilt Node-API (`.node`) addon " "without embedding Node, V8, JavaScriptCore, or another JavaScript engine. It " @@ -84714,39 +87820,39 @@ msgstr "" "addons. Un paquete con una fachada Perry permanece en esa fachada: el " "anfitrión nunca reemplaza una entrada `well_known_bindings.toml`." -#: src/internals/node-api-host.md:39 +#: src/internals/node-api-host.md:43 msgid "Decisions at a glance" msgstr "Decisiones de un vistazo" -#: src/internals/node-api-host.md:41 +#: src/internals/node-api-host.md:45 msgid "Decision" msgstr "Decision" -#: src/internals/node-api-host.md:43 +#: src/internals/node-api-host.md:47 msgid "Advertised API" msgstr "API anunciada" -#: src/internals/node-api-host.md:43 +#: src/internals/node-api-host.md:47 msgid "" "Node-API version 10 (`napi_get_version`); modules declaring 1 through 10 load" msgstr "" -#: src/internals/node-api-host.md:44 +#: src/internals/node-api-host.md:48 msgid "`napi_env`" msgstr "`napi_env`" -#: src/internals/node-api-host.md:44 +#: src/internals/node-api-host.md:48 #, fuzzy msgid "" "One environment per Perry agent/realm, owned by its JavaScript thread; per-" "module facts are attributed to the running addon" msgstr "Un entorno por Perry agent/realm, propiedad de su hilo JavaScript" -#: src/internals/node-api-host.md:45 src/internals/node-api-host.md:113 +#: src/internals/node-api-host.md:49 src/internals/node-api-host.md:117 msgid "`napi_value`" msgstr "`napi_value`" -#: src/internals/node-api-host.md:45 +#: src/internals/node-api-host.md:49 msgid "" "Opaque host token containing an index and generation for an environment-" "local handle slot; never a Perry heap address" @@ -84754,22 +87860,22 @@ msgstr "" "Token de host opaco que contiene un índice y generación para un slot de " "mango local de entorno; nunca una dirección de montón Perry" -#: src/internals/node-api-host.md:46 +#: src/internals/node-api-host.md:50 msgid "Handle roots" msgstr "Manipular raíces" -#: src/internals/node-api-host.md:46 +#: src/internals/node-api-host.md:50 msgid "" "Open handle scopes are mutable GC roots and are rewritten after evacuation" msgstr "" "Los visores de mango abierto son raíces CG mutables y se reescriben después " "de la evacuación" -#: src/internals/node-api-host.md:47 +#: src/internals/node-api-host.md:51 msgid "`napi_ref`" msgstr "`napi_ref`" -#: src/internals/node-api-host.md:47 +#: src/internals/node-api-host.md:51 msgid "" "Strong references root their value; zero-count references use Perry's " "existing weak-target machinery" @@ -84777,11 +87883,11 @@ msgstr "" "Las referencias fuertes arraigan su valor; las referencias de cero-cuento " "utilizan la maquinaria de Perry de objetivo débil existente" -#: src/internals/node-api-host.md:48 +#: src/internals/node-api-host.md:52 msgid "Finalizers" msgstr "Finalizers" -#: src/internals/node-api-host.md:48 +#: src/internals/node-api-host.md:52 msgid "" "Address-keyed object metadata is rekeyed on moves and death-pruned after " "marking; callbacks are queued and run on the owning main thread outside GC" @@ -84790,11 +87896,11 @@ msgstr "" "movimientos y después de marcar se pasa a cabo la muerte; los callbacks se " "hacen cola y se ejecutan en el hilo principal de propiedad fuera de GC" -#: src/internals/node-api-host.md:49 +#: src/internals/node-api-host.md:53 msgid "Exceptions" msgstr "Exceptions" -#: src/internals/node-api-host.md:49 +#: src/internals/node-api-host.md:53 msgid "" "Perry throws are trapped inside the host, stored in the environment, and " "returned as `napi_pending_exception`; no unwind crosses addon code" @@ -84803,11 +87909,11 @@ msgstr "" "entorno, y devueltos como `napi_pending_exception`; no desenrollar cruces " "código addon" -#: src/internals/node-api-host.md:50 +#: src/internals/node-api-host.md:54 msgid "Off-thread API" msgstr "API fuera de hilo" -#: src/internals/node-api-host.md:50 +#: src/internals/node-api-host.md:54 msgid "" "Only TSFN call/acquire/release operations are legal; every other operation " "verifies the owning thread" @@ -84815,11 +87921,11 @@ msgstr "" "Sólo las operaciones TSFN call/acquire/release son legales; cualquier otra " "operación verifica el hilo de propiedad" -#: src/internals/node-api-host.md:51 +#: src/internals/node-api-host.md:55 msgid "Module entry" msgstr "Entrada de módulo" -#: src/internals/node-api-host.md:51 +#: src/internals/node-api-host.md:55 msgid "" "Prefer `napi_register_module_v1`; support constructor-time " "`napi_module_register` for legacy addons" @@ -84827,22 +87933,22 @@ msgstr "" "Prefiere `napi_register_module_v1`; soporte `napi_module_register` para " "addons heredados" -#: src/internals/node-api-host.md:52 +#: src/internals/node-api-host.md:56 msgid "Unsupported ABI" msgstr "ABI no soportado" -#: src/internals/node-api-host.md:52 +#: src/internals/node-api-host.md:56 msgid "" "NAN, V8, direct `uv_*`, and mobile targets are rejected before initialization" msgstr "" "NAN, V8, `uv_*` directo y objetivos móviles son rechazados antes de la " "inicialización" -#: src/internals/node-api-host.md:53 +#: src/internals/node-api-host.md:57 msgid "Shipping" msgstr "Shipping" -#: src/internals/node-api-host.md:53 +#: src/internals/node-api-host.md:57 msgid "" "Relocatable sidecar directory beside the executable; no extract-at-first-run " "path" @@ -84850,18 +87956,18 @@ msgstr "" "Directorio de sidecars reubicable al lado del ejecutable; no hay ruta de " "extracción en primera carrera" -#: src/internals/node-api-host.md:54 +#: src/internals/node-api-host.md:58 msgid "" "Exact package-name allowlist in `package.json` under `perry.nativeAddons`" msgstr "" "Lista exacta de nombres de paquetes en `package.json` bajo `perry." "nativeAddons`" -#: src/internals/node-api-host.md:55 +#: src/internals/node-api-host.md:59 msgid "Size gate" msgstr "Puerta de tamaño" -#: src/internals/node-api-host.md:55 +#: src/internals/node-api-host.md:59 msgid "" "No addon in the graph means no host archive references, no exported Node-API " "symbols, and a zero-byte executable delta" @@ -84870,7 +87976,7 @@ msgstr "" "host, no hay símbolos de Nodo-API exportados, y un delta ejecutable de cero " "bytes" -#: src/internals/node-api-host.md:57 +#: src/internals/node-api-host.md:61 msgid "" "The host implements every stable entry point through Node-API version 10, " "the highest version Node 26 supports (#10456). Current releases of argon2, " @@ -84883,11 +87989,11 @@ msgid "" "requested and supported versions in the diagnostic." msgstr "" -#: src/internals/node-api-host.md:67 +#: src/internals/node-api-host.md:71 msgid "Module attribution and version-dependent behavior" msgstr "" -#: src/internals/node-api-host.md:69 +#: src/internals/node-api-host.md:73 msgid "" "Node creates one `napi_env` per module and stores that module's version and " "file URL on it. Perry keeps one environment per agent, so the two per-module " @@ -84899,14 +88005,14 @@ msgid "" "An environment cleanup hook receives no environment and is not attributed." msgstr "" -#: src/internals/node-api-host.md:78 +#: src/internals/node-api-host.md:82 msgid "" "`node_api_get_module_file_name` returns the active module's `file://` URL of " "the canonical sidecar path it was loaded from. Code outside every attributed " "entry point sees the most recently loaded module." msgstr "" -#: src/internals/node-api-host.md:81 +#: src/internals/node-api-host.md:85 msgid "" "An exception left pending by a callback with no JavaScript caller follows " "`node_napi_env__::CallbackIntoModule`: async-work completions and finalizers " @@ -84916,45 +88022,45 @@ msgid "" "the environment is shutting down, the exception is dropped." msgstr "" -#: src/internals/node-api-host.md:87 +#: src/internals/node-api-host.md:91 msgid "" "`napi_create_reference` accepts any value type, the version-10 rule, for " "every module." msgstr "" -#: src/internals/node-api-host.md:89 +#: src/internals/node-api-host.md:93 msgid "" "Node returns `napi_cannot_run_js` (version 10) or `napi_pending_exception` " "when an environment can no longer run JavaScript. Perry has no such state: " "JavaScript stays callable while the environment shuts down." msgstr "" -#: src/internals/node-api-host.md:92 +#: src/internals/node-api-host.md:96 msgid "" "Instance data (`napi_set_instance_data`) belongs to the shared environment, " "not to a module." msgstr "" -#: src/internals/node-api-host.md:95 +#: src/internals/node-api-host.md:99 msgid "Environment and handle representation" msgstr "Medio ambiente y gestión de la representación" -#: src/internals/node-api-host.md:97 +#: src/internals/node-api-host.md:101 msgid "" "`napi_env` points to a host-owned `Env` that is not a GC object. It contains:" msgstr "" "`napi_env` apunta a un `Env` de propiedad del anfitrión que no es un objeto " "GC. Contiene:" -#: src/internals/node-api-host.md:99 +#: src/internals/node-api-host.md:103 msgid "a unique environment id and the owning `ThreadId`;" msgstr "un identificador de entorno único y el propietario `ThreadId`;" -#: src/internals/node-api-host.md:100 +#: src/internals/node-api-host.md:104 msgid "the open handle-scope stack and handle-slot slab;" msgstr "la pila abierta del manillar y la losa del mango-slot;" -#: src/internals/node-api-host.md:101 +#: src/internals/node-api-host.md:105 msgid "" "references, native callback records, deferred promises, async work, and " "threadsafe functions owned by the environment;" @@ -84962,7 +88068,7 @@ msgstr "" "referencias, registros nativos de callback, promesas diferidas, trabajo " "async, y funciones hedgesafe propiedad del medio ambiente;" -#: src/internals/node-api-host.md:103 +#: src/internals/node-api-host.md:107 msgid "" "a rooted pending-exception slot and stable `napi_extended_error_info` " "storage;" @@ -84970,7 +88076,7 @@ msgstr "" "una ranura de excepción pendiente enraizada y un almacenamiento estable de " "`napi_extended_error_info`;" -#: src/internals/node-api-host.md:105 +#: src/internals/node-api-host.md:109 msgid "" "instance data, environment cleanup hooks, the current module filename, and a " "`can_call_into_js` state;" @@ -84978,14 +88084,14 @@ msgstr "" "datos de instancia, ganchos de limpieza de entorno, el nombre de archivo del " "módulo actual y un estado `can_call_into_js`;" -#: src/internals/node-api-host.md:107 +#: src/internals/node-api-host.md:111 msgid "" "the environment lifecycle (`loading`, `running`, `closing`, or `closed`)." msgstr "" "el ciclo de vida del medio ambiente (`loading`, `running`, `closing` o " "`closed`)." -#: src/internals/node-api-host.md:109 +#: src/internals/node-api-host.md:113 msgid "" "The environment is created for the Perry agent before the first addon loads " "and destroyed after the event pump has stopped accepting work. Different " @@ -84996,7 +88102,7 @@ msgstr "" "aceptar el trabajo. Los diferentes agentes Perry nunca comparten un entorno " "o un valor de montón." -#: src/internals/node-api-host.md:115 +#: src/internals/node-api-host.md:119 msgid "" "A `napi_value` is an opaque pointer to a non-moving host token. The token " "holds `(env_id, slot_index, generation)`. The indexed `HandleSlot` holds the " @@ -85010,7 +88116,7 @@ msgstr "" "en vivo. Por lo tanto, el código addon nunca observa una dirección en bruto " "`ObjectHeader`, `StringHeader`, u otra dirección móvil." -#: src/internals/node-api-host.md:121 +#: src/internals/node-api-host.md:125 msgid "" "Tokens are stable for the lifetime of the environment and are not reused. " "Slots may be reused only after their generation advances. Every entry point " @@ -85025,7 +88131,7 @@ msgstr "" "retorno cercano `napi_invalid_arg`, en lugar de alias un nuevo valor o " "dereferenciar la memoria recuperada." -#: src/internals/node-api-host.md:127 +#: src/internals/node-api-host.md:131 msgid "" "Each `ScopeFrame` records the slot indices created in that scope and whether " "an escapable scope has already escaped a value. Closing a scope invalidates " @@ -85042,7 +88148,7 @@ msgstr "" "no se requiere un addon para abrir un alcance antes de crear valores de " "retorno ordinarios." -#: src/internals/node-api-host.md:134 +#: src/internals/node-api-host.md:138 msgid "" "All live scope slots are visited by `scan_node_api_roots_mut`, registered in " "`gc_init()` with a descriptive name. The scanner uses mutable NaN-box " @@ -85061,11 +88167,11 @@ msgstr "" "hilo principal en cola. Las nuevas tablas deben clasificarse en `scripts/" "gc_runtime_root_holders.json` en el commit que las introduce." -#: src/internals/node-api-host.md:142 +#: src/internals/node-api-host.md:146 msgid "The following invariant applies at every host call site:" msgstr "La siguiente invariante se aplica en cada sitio de llamadas del host:" -#: src/internals/node-api-host.md:144 +#: src/internals/node-api-host.md:148 msgid "" "A Perry heap value is written into a live handle slot before any operation " "that can allocate or call JavaScript, and is reread from that slot after the " @@ -85075,7 +88181,7 @@ msgstr "" "cualquier operación que puede asignar o llamar a JavaScript, y se relee " "desde esa ranura después de la operación." -#: src/internals/node-api-host.md:148 +#: src/internals/node-api-host.md:152 msgid "" "In particular, the host never caches `HandleSlot.value_bits` in a Rust local " "across property access, conversion, callback invocation, or allocation." @@ -85084,11 +88190,11 @@ msgstr "" "a través de acceso, conversión, invocación de llamada o asignación de " "propiedades." -#: src/internals/node-api-host.md:151 +#: src/internals/node-api-host.md:155 msgid "References, including weak references" msgstr "Referencias, incluidas las referencias débiles" -#: src/internals/node-api-host.md:153 +#: src/internals/node-api-host.md:157 msgid "" "`napi_ref` is a stable host record, also tagged with its environment id and " "a generation. A positive reference count stores its value in a strong slot " @@ -85098,7 +88204,7 @@ msgstr "" "entorno y una generación. Un recuento de referencia positivo almacena su " "valor en una ranura fuerte visitada por `scan_node_api_roots_mut`." -#: src/internals/node-api-host.md:157 +#: src/internals/node-api-host.md:161 msgid "" "Weak references are in version 1; deferring them would exclude common node-" "addon-api and napi-rs patterns. A zero-count reference roots a hidden Perry " @@ -85112,7 +88218,7 @@ msgstr "" "reescribe la ranura de destino débil de ese titular y la borra durante cada " "colección. Consequently:" -#: src/internals/node-api-host.md:162 +#: src/internals/node-api-host.md:166 msgid "" "`napi_create_reference(..., 0, ...)` creates the hidden weak holder while " "the input handle is still rooted." @@ -85120,7 +88226,7 @@ msgstr "" "`napi_create_reference(..., 0, ...)` crea el soporte débil oculto mientras " "que el mango de entrada todavía está enraizado." -#: src/internals/node-api-host.md:164 +#: src/internals/node-api-host.md:168 msgid "" "`napi_reference_ref` reads the weak target. If it has been collected it " "returns `napi_ok` with count zero without resurrecting it; otherwise the " @@ -85130,7 +88236,7 @@ msgstr "" "`napi_ok` con cuenta cero sin resucitarlo; de lo contrario el objetivo se " "mueve a la ranura fuerte antes de que el soporte débil se libera." -#: src/internals/node-api-host.md:167 +#: src/internals/node-api-host.md:171 msgid "" "`napi_reference_unref` changing `1 -> 0` creates a weak holder before " "clearing the strong slot." @@ -85138,7 +88244,7 @@ msgstr "" "`napi_reference_unref` cambiar `1 -> 0` crea un soporte débil antes de " "despejar la ranura fuerte." -#: src/internals/node-api-host.md:169 +#: src/internals/node-api-host.md:173 msgid "" "`napi_get_reference_value` returns a null C pointer when a weak target has " "been collected, matching Node-API; that is distinct from a handle for the " @@ -85148,7 +88254,7 @@ msgstr "" "un objetivo débil, que coincide con Node-API; que es distinto de un mango " "para el valor JavaScript `null`." -#: src/internals/node-api-host.md:173 +#: src/internals/node-api-host.md:177 msgid "" "Values that cannot be held weakly (for example, number primitives) remain " "strongly retained even at refcount zero, matching Node's reference behavior. " @@ -85163,11 +88269,11 @@ msgstr "" "usan aritmética controlada y devuelven `napi_generic_failure` en el " "desbordamiento, el desbordamiento o un registro ya eliminado." -#: src/internals/node-api-host.md:179 +#: src/internals/node-api-host.md:183 msgid "Native-owned data and finalization" msgstr "Datos de propiedad de los indígenas y finalización" -#: src/internals/node-api-host.md:181 +#: src/internals/node-api-host.md:185 msgid "" "Wrap data, externals, type tags, and finalizer records live in a per-agent " "`NODE_API_OBJECT_META` table keyed by the owning Perry user address. A table " @@ -85179,11 +88285,11 @@ msgstr "" "usuario Perry. Una entrada de tabla contiene punteros nativos e " "identificadores solamente; nunca mantiene vivo a su propietario." -#: src/internals/node-api-host.md:186 +#: src/internals/node-api-host.md:190 msgid "The table has both halves required by a moving collector:" msgstr "La tabla tiene ambas mitades requeridas por un colector en movimiento:" -#: src/internals/node-api-host.md:188 +#: src/internals/node-api-host.md:192 msgid "" "`scan_node_api_object_meta_keys_mut` visits keys as metadata. It follows " "forwarding records and rekeys entries without marking the owner." @@ -85191,7 +88297,7 @@ msgstr "" "`scan_node_api_object_meta_keys_mut` visita claves como metadatos. Sigue " "registros de reenvío y retecla las entradas sin marcar al propietario." -#: src/internals/node-api-host.md:190 +#: src/internals/node-api-host.md:194 msgid "" "`prune_dead_node_api_object_meta_owners` is registered in `gc::dead_owner::" "DEAD_KEY_PRUNES`. Both post-trace and copied-minor fan-out remove entries " @@ -85201,7 +88307,7 @@ msgstr "" "DEAD_KEY_PRUNES`. Tanto post-traza y copiado-minor ventilador eliminar " "entradas cuyos propietarios se han demostrado muertos." -#: src/internals/node-api-host.md:194 +#: src/internals/node-api-host.md:198 msgid "" "The rekey site and death prune receive matching entries in `scripts/" "gc_rekeyed_key_tables.json`. Merely registering a strong root scanner would " @@ -85211,7 +88317,7 @@ msgstr "" "`scripts/gc_rekeyed_key_tables.json`. Sólo registrar un fuerte escáner raíz " "sería incorrecto aquí porque haría que cada objeto envuelto fuera inmortal." -#: src/internals/node-api-host.md:198 +#: src/internals/node-api-host.md:202 msgid "" "Death pruning moves finalizer records into a native pending queue. It does " "not call addon code while the collector is marking, rewriting, sweeping, or " @@ -85233,7 +88339,7 @@ msgstr "" "`node_api_post_finalizer` se aplazan con el resto de esa superficie " "experimental." -#: src/internals/node-api-host.md:207 +#: src/internals/node-api-host.md:211 msgid "" "`napi_wrap` installs at most one wrap record per object. `napi_unwrap` reads " "it. `napi_remove_wrap` atomically removes it, returns the native pointer, " @@ -85253,7 +88359,7 @@ msgstr "" "ejecutarse; borrarla desde el interior de la devolución de llamada ya " "encolada sólo libera la referencia." -#: src/internals/node-api-host.md:215 +#: src/internals/node-api-host.md:219 msgid "" "External buffers and array buffers use the same finalizer queue. Environment " "shutdown first prevents new work, drains TSFNs and async completions, runs " @@ -85270,7 +88376,7 @@ msgstr "" "`registered -> queued -> running -> complete`, por lo que la eliminación, " "recolección y apagado explícitos no pueden llamarlo doblemente." -#: src/internals/node-api-host.md:222 +#: src/internals/node-api-host.md:226 msgid "" "No finalizer ordering is promised between different objects. Records " "attached to one object are queued in registration order. Environment cleanup " @@ -85283,11 +88389,11 @@ msgstr "" "asíncrona mantienen abierto el apagado hasta que se invoque su callback de " "eliminación." -#: src/internals/node-api-host.md:227 +#: src/internals/node-api-host.md:231 msgid "Status codes and pending exceptions" msgstr "Códigos de situación y excepciones pendientes" -#: src/internals/node-api-host.md:229 +#: src/internals/node-api-host.md:233 msgid "" "Every exported entry point is a plain `extern \"C\"` boundary and uses one " "common prologue/epilogue:" @@ -85295,7 +88401,7 @@ msgstr "" "Cada punto de entrada exportado es un límite `extern \"C\"` y utiliza un " "prologue/epilogue común:" -#: src/internals/node-api-host.md:232 +#: src/internals/node-api-host.md:236 msgid "" "validate the environment, lifecycle, owner thread, input pointers, and " "handle generations without panicking;" @@ -85303,19 +88409,19 @@ msgstr "" "validar el entorno, el ciclo de vida, el hilo propietario, los punteros de " "entrada y manejar generaciones sin pánico;" -#: src/internals/node-api-host.md:234 +#: src/internals/node-api-host.md:238 msgid "reject JavaScript-capable work when `can_call_into_js` is false;" msgstr "" "rechazar el trabajo con JavaScript cuando `can_call_into_js` sea falso;" -#: src/internals/node-api-host.md:235 +#: src/internals/node-api-host.md:239 msgid "" "run every operation that may throw through `exception::js_call_catching`;" msgstr "" "ejecutar todas las operaciones que puedan lanzarse a través de `exception::" "js_call_catching`;" -#: src/internals/node-api-host.md:236 +#: src/internals/node-api-host.md:240 msgid "" "on a Perry throw, root the thrown value in `Env.pending_exception` and " "return `napi_pending_exception`;" @@ -85323,7 +88429,7 @@ msgstr "" "en un lanzamiento Perry, la raíz del valor lanzado en `Env." "pending_exception` y la devolución de `napi_pending_exception`;" -#: src/internals/node-api-host.md:238 +#: src/internals/node-api-host.md:242 msgid "" "write output parameters only on the statuses for which Node-API defines an " "output;" @@ -85331,13 +88437,13 @@ msgstr "" "escribir los parámetros de salida únicamente en los estados para los que " "Node-API define una salida;" -#: src/internals/node-api-host.md:240 +#: src/internals/node-api-host.md:244 msgid "update stable per-environment extended-error storage before returning." msgstr "" "actualizar el almacenamiento de error prolongado estable por medio ambiente " "antes de regresar." -#: src/internals/node-api-host.md:242 +#: src/internals/node-api-host.md:246 msgid "" "`napi_throw` and its error helpers only set the pending slot. They do not " "call `js_throw` while the addon is on the stack. When a native callback " @@ -85355,7 +88461,7 @@ msgstr "" "garantiza que ni el desenrollador de sistema de Perry ni su transporte " "`setjmp` cruzan marcos de terceros." -#: src/internals/node-api-host.md:249 +#: src/internals/node-api-host.md:253 msgid "" "`napi_is_exception_pending` is a pure query. " "`napi_get_and_clear_last_exception` creates a handle for the rooted " @@ -85371,7 +88477,7 @@ msgstr "" "pendiente, API ordinarios devuelven `napi_pending_exception`; la excepción " "query/clear y operaciones de información de error siguen disponibles." -#: src/internals/node-api-host.md:256 +#: src/internals/node-api-host.md:260 msgid "" "The error-info message is owned by the environment and remains valid until " "the next Node-API call on that environment. `engine_error_code` is zero and " @@ -85386,11 +88492,11 @@ msgstr "" "`napi_fatal_exception` transfiere el error a la ruta de excepción no " "capturada de Perry en el hilo principal." -#: src/internals/node-api-host.md:262 +#: src/internals/node-api-host.md:266 msgid "Functions and native classes" msgstr "Funciones y clases nativas" -#: src/internals/node-api-host.md:264 +#: src/internals/node-api-host.md:268 msgid "" "`napi_create_function` allocates a Perry closure whose captured host record " "contains the native callback pointer, addon data pointer, name, and " @@ -85408,7 +88514,7 @@ msgstr "" "addon callback dentro de un alcance de manejo implícito y convierte el token " "devuelto a un valor Perry antes de cerrar ese alcance." -#: src/internals/node-api-host.md:272 +#: src/internals/node-api-host.md:276 msgid "" "`napi_call_function` uses Perry's general callable dispatch, not a closure-" "only shortcut, so proxies, bound functions, and compiled JavaScript " @@ -85422,7 +88528,7 @@ msgstr "" "`napi_new_instance` utiliza la ruta general de construcción y los brazos del " "nuevo estado objetivo de Perry para la duración de la llamada." -#: src/internals/node-api-host.md:277 +#: src/internals/node-api-host.md:281 msgid "" "`napi_define_class` allocates a synthetic class id and registers its " "constructor and prototype in the existing class-id chain. Instance methods/" @@ -85440,7 +88546,7 @@ msgstr "" "constructor nativo se ejecute. Si el constructor devuelve un objeto, se " "aplican las reglas normales de reemplazo del constructor JavaScript." -#: src/internals/node-api-host.md:284 +#: src/internals/node-api-host.md:288 msgid "" "The registration also populates the runtime's dynamic-parent/prototype " "tables, so a compiled class may extend a native-defined constructor and a " @@ -85459,7 +88565,7 @@ msgstr "" "clase base porque esto cruza el camino de expansión dinámica históricamente " "débil del tiempo de ejecución." -#: src/internals/node-api-host.md:292 +#: src/internals/node-api-host.md:296 msgid "" "Property descriptors preserve `napi_writable`, `napi_enumerable`, and " "`napi_configurable`. Getter and setter records use the same native callback " @@ -85471,11 +88577,11 @@ msgstr "" "nativo de callback. Un descriptor que especifica campos `value`/`method`/" "accesor incompatibles es rechazado antes de cambiar cualquier propiedad." -#: src/internals/node-api-host.md:297 +#: src/internals/node-api-host.md:301 msgid "Buffers, views, and external memory" msgstr "Buffers, vistas y memoria externa" -#: src/internals/node-api-host.md:299 +#: src/internals/node-api-host.md:303 msgid "" "Perry `Buffer`, typed-array, array-buffer, and data-view byte storage is " "born tenured and does not move. A returned native data pointer therefore " @@ -85487,7 +88593,7 @@ msgstr "" "permanece estable durante la vida útil requerida por Node-API, mientras que " "el envoltorio en sí sigue siendo un mango enraizado ordinario." -#: src/internals/node-api-host.md:304 +#: src/internals/node-api-host.md:308 msgid "" "The host reuses the existing buffer/view registries for type identity, " "backing array-buffer identity, offsets, and detach propagation. Creating an " @@ -85505,7 +88611,7 @@ msgstr "" "y datos nulos, y todas las vistas existentes observan la desconexión. Las " "API de buffer rechazan el almacenamiento separado donde lo hace Node." -#: src/internals/node-api-host.md:311 +#: src/internals/node-api-host.md:315 msgid "" "`napi_adjust_external_memory` updates a signed per-environment counter and " "the collector's external-memory pressure accounting. It neither allocates an " @@ -85519,15 +88625,15 @@ msgstr "" "flujo inferior a cero para la contabilidad de presión mientras que el valor " "acumulado devuelto por la API sigue siendo el total firmado verificado." -#: src/internals/node-api-host.md:317 +#: src/internals/node-api-host.md:321 msgid "Async work and threadsafe functions" msgstr "Funciones de trabajo y hedgesafe" -#: src/internals/node-api-host.md:319 +#: src/internals/node-api-host.md:323 msgid "`napi_create_async_work` creates an explicit state machine:" msgstr "`napi_create_async_work` crea una máquina de estado explícita:" -#: src/internals/node-api-host.md:326 +#: src/internals/node-api-host.md:330 msgid "" "Queueing uses `perry_ffi::spawn_blocking`. The execute callback runs on a " "worker without access to Perry heap state. Completion is posted through the " @@ -85546,7 +88652,7 @@ msgstr "" "finalización marca la manija pública eliminada, pero conserva el registro " "interno hasta que ni el trabajador ni la terminación posee." -#: src/internals/node-api-host.md:333 +#: src/internals/node-api-host.md:337 msgid "" "A TSFN owns a strong function reference (when a function is supplied), its " "context, bounded or unbounded queue, thread count, ref/unref state, and " @@ -85565,7 +88671,7 @@ msgstr "" "llamada de bloqueo desde el hilo propietario con una cola delimitada " "completa devuelve `napi_would_deadlock`." -#: src/internals/node-api-host.md:341 +#: src/internals/node-api-host.md:345 msgid "" "The main-thread drain invokes `call_js_cb`, which may then use the " "environment and supplied JavaScript callback. Abort release drains remaining " @@ -85582,7 +88688,7 @@ msgstr "" "Un ref'd TSFN contribuye al conteo de eventos y bucles de Perry; unref " "elimina esa contribución sin destruir la función." -#: src/internals/node-api-host.md:348 +#: src/internals/node-api-host.md:352 msgid "" "`napi_async_init`, `napi_make_callback`, and `napi_async_destroy` bridge to " "the existing `async_hooks` resource/context machinery. Callback scopes are a " @@ -85594,31 +88700,31 @@ msgstr "" "devolución de llamadas son un contador de anidación validado alrededor de " "ese contexto; el desajuste devuelve `napi_callback_scope_mismatch`." -#: src/internals/node-api-host.md:353 +#: src/internals/node-api-host.md:357 msgid "Threading rules" msgstr "Normas de empuje" -#: src/internals/node-api-host.md:355 +#: src/internals/node-api-host.md:359 msgid "The following calls are legal from a foreign thread:" msgstr "Las siguientes llamadas son legales desde un hilo extranjero:" -#: src/internals/node-api-host.md:357 +#: src/internals/node-api-host.md:361 msgid "`napi_call_threadsafe_function`" msgstr "`napi_call_threadsafe_function`" -#: src/internals/node-api-host.md:358 +#: src/internals/node-api-host.md:362 msgid "`napi_acquire_threadsafe_function`" msgstr "`napi_acquire_threadsafe_function`" -#: src/internals/node-api-host.md:359 +#: src/internals/node-api-host.md:363 msgid "`napi_release_threadsafe_function`" msgstr "`napi_release_threadsafe_function`" -#: src/internals/node-api-host.md:360 +#: src/internals/node-api-host.md:364 msgid "`napi_fatal_error` (it does not return)" msgstr "`napi_fatal_error` (no devuelve)" -#: src/internals/node-api-host.md:362 +#: src/internals/node-api-host.md:366 msgid "" "All other entry points require the environment's owner thread, including " "`napi_get_threadsafe_function_context`, TSFN ref/unref, reference " @@ -85635,7 +88741,7 @@ msgstr "" "un diagnóstico cuando un entorno está disponible, y nunca lee o escribe el " "estado de montón Perry." -#: src/internals/node-api-host.md:369 +#: src/internals/node-api-host.md:373 msgid "" "The execute half of async work is a foreign thread under this rule. The " "complete half, module initialization, cleanup hooks, finalizers, native " @@ -85646,21 +88752,28 @@ msgstr "" "limpieza, ultimadores, callbacks nativos, y TSFN `call_js_cb` se ejecutan en " "el hilo propietario." -#: src/internals/node-api-host.md:373 +#: src/internals/node-api-host.md:377 msgid "Module loading" msgstr "Carga de módulos" -#: src/internals/node-api-host.md:375 +#: src/internals/node-api-host.md:379 msgid "" "The compile graph records every approved `.node` file as a native-addon " -"module instead of trying to read it as UTF-8. At runtime, one loader " -"operation does the following:" +"module instead of trying to read it as UTF-8. Computed CommonJS `require()` " +"and `createRequire()` requests use the same loader as `process.dlopen()`. " +"The manifest maps logical IDs, original package paths, and unambiguous " +"declared project paths to sidecar payloads, so the original source tree may " +"be removed. Runtime-computed `require.resolve()` requests return the " +"deployed payload path, which also keys `require.cache`. Only manifest " +"entries can load; merely finding a `.node` file on the host filesystem does " +"not authorize it." msgstr "" -"El gráfico de compilación registra cada archivo `.node` aprobado como un " -"módulo nativo-addon en lugar de tratar de leerlo como UTF-8. En tiempo de " -"ejecución, una operación de cargador hace lo siguiente:" -#: src/internals/node-api-host.md:379 +#: src/internals/node-api-host.md:388 +msgid "At runtime, one loader operation does the following:" +msgstr "" + +#: src/internals/node-api-host.md:390 msgid "" "canonicalize the manifest-selected sidecar path beneath the executable's " "sidecar root;" @@ -85668,13 +88781,13 @@ msgstr "" "canonicalizar el camino sidecar seleccionado por el manifiesto debajo de la " "raíz del sidecar del ejecutable;" -#: src/internals/node-api-host.md:381 +#: src/internals/node-api-host.md:392 msgid "" "return the cached exports object if that canonical file is already loaded;" msgstr "" "return the cached exports object if that canonical file is already loaded;" -#: src/internals/node-api-host.md:382 +#: src/internals/node-api-host.md:393 msgid "" "set an environment-local `currently_loading` guard and load with `RTLD_NOW | " "RTLD_LOCAL` on Unix or safe `LoadLibraryExW` search flags on Windows;" @@ -85683,7 +88796,7 @@ msgstr "" "RTLD_LOCAL` en Unix o banderas de búsqueda `LoadLibraryExW` seguras en " "Windows;" -#: src/internals/node-api-host.md:385 +#: src/internals/node-api-host.md:396 msgid "" "reject an unresolved `uv_*`, V8, NAN, or non-Node-API Node symbol with the " "exact symbol and addon path in the error;" @@ -85691,7 +88804,7 @@ msgstr "" "rechazar un símbolo no resuelto `uv_*`, V8, NAN o no-Node-API Node con el " "símbolo exacto y la ruta de addon en el error;" -#: src/internals/node-api-host.md:387 +#: src/internals/node-api-host.md:398 #, fuzzy msgid "" "if present, call `node_api_module_get_api_version_v1` and reject versions " @@ -85701,7 +88814,7 @@ msgstr "" "if present, call `node_api_module_get_api_version_v1` and reject versions " "above 8;" -#: src/internals/node-api-host.md:390 +#: src/internals/node-api-host.md:401 msgid "" "prefer `napi_register_module_v1(env, exports)`; otherwise use the descriptor " "captured by `napi_module_register` while the library constructor ran;" @@ -85710,7 +88823,7 @@ msgstr "" "el descriptor capturado por `napi_module_register` mientras el constructor " "de la biblioteca se ejecuta;" -#: src/internals/node-api-host.md:392 +#: src/internals/node-api-host.md:403 msgid "" "use the initializer's returned object, or the supplied exports object when " "the initializer returns null without an exception;" @@ -85718,11 +88831,11 @@ msgstr "" "use the initializer's returned object, or the supplied exports object when " "the initializer returns null without an exception;" -#: src/internals/node-api-host.md:394 +#: src/internals/node-api-host.md:405 msgid "cache the rooted exports and library handle together." msgstr "cache las exportaciones enraizadas y la biblioteca manejan juntos." -#: src/internals/node-api-host.md:396 +#: src/internals/node-api-host.md:407 msgid "" "`napi_module_register` outside an active load is an error. Multiple " "descriptors from one library are rejected. An initializer exception closes " @@ -85735,7 +88848,7 @@ msgstr "" "excepción enraizada sólo después de que el control haya regresado del código " "addon." -#: src/internals/node-api-host.md:401 +#: src/internals/node-api-host.md:412 msgid "" "Static `require()` of an approved addon lowers directly to this loader. " "`process.dlopen(module, filename[, flags])` calls the same operation and " @@ -85752,24 +88865,26 @@ msgstr "" "cargar un archivo presente en el manifiesto de addon de tiempo de " "compilación; la lista de permisos no es una capacidad general de `dlopen`." -#: src/internals/node-api-host.md:408 +#: src/internals/node-api-host.md:419 msgid "" "The initializer runs attributed to its module, which is how " "`node_api_get_module_file_name` answers during initialization; see [Module " "attribution](#module-attribution-and-version-dependent-behavior)." msgstr "" -#: src/internals/node-api-host.md:412 +#: src/internals/node-api-host.md:423 msgid "Linking and exported symbols" msgstr "Vinculación y exportación de símbolos" -#: src/internals/node-api-host.md:414 +#: src/internals/node-api-host.md:425 +#, fuzzy msgid "" -"The Node-API implementation lives behind a `node-api-host` runtime feature. " -"The compiler enables it only when the collected graph contains an approved " -"addon. A checked-in symbol inventory is the single source for Rust export " -"retention, platform linker flags, unresolved-symbol validation, and the CI " -"assertion." +"The Node-API implementation is compiled into every runtime archive and is " +"reached only through its install, `js_runtime_install_node_api_host`, which " +"the compiler's generated installer calls only when the collected graph " +"contains an approved addon; without it the linker drops the host. A checked-" +"in symbol inventory is the single source for Rust export retention, platform " +"linker flags, unresolved-symbol validation, and the CI assertion." msgstr "" "La implementación de Node-API está detrás de una función de tiempo de " "ejecución `node-api-host`. El compilador solo lo habilita cuando el gráfico " @@ -85777,7 +88892,7 @@ msgstr "" "la única fuente de retención de exportación de Rust, banderas de enlace de " "plataformas, validación de símbolos no resueltos y la afirmación de CI." -#: src/internals/node-api-host.md:420 +#: src/internals/node-api-host.md:432 msgid "" "macOS removes `-Wl,-no_exported_symbols` only for an addon build and " "supplies an exported-symbols list containing the approved `_napi_*` names." @@ -85786,7 +88901,7 @@ msgstr "" "y suministra una lista de símbolos exportados que contiene los nombres " "`_napi_*` aprobados." -#: src/internals/node-api-host.md:422 +#: src/internals/node-api-host.md:434 msgid "" "Linux uses one `--export-dynamic-symbol=` entry per approved symbol, " "not broad `--export-dynamic`." @@ -85794,7 +88909,7 @@ msgstr "" "Linux utiliza una entrada `--export-dynamic-symbol=` por símbolo " "aprobado, no amplia `--export-dynamic`." -#: src/internals/node-api-host.md:424 +#: src/internals/node-api-host.md:436 msgid "" "Windows supplies `/EXPORT:` entries. The addon's standard delay-load " "hook resolves its `node.exe` imports against the current executable." @@ -85803,7 +88918,7 @@ msgstr "" "retardada del addon resuelve sus importaciones `node.exe` frente al " "ejecutable actual." -#: src/internals/node-api-host.md:427 +#: src/internals/node-api-host.md:439 msgid "" "The loader itself uses the existing `bun_ffi` platform abstraction, extended " "to report unresolved imports. Host symbols are retained and exported only " @@ -85817,29 +88932,29 @@ msgstr "" "tiene exactamente el comando de enlace anterior y el conjunto de funciones " "de tiempo de ejecución." -#: src/internals/node-api-host.md:432 +#: src/internals/node-api-host.md:444 msgid "Opt-in and route precedence" msgstr "Inscripción y precedencia de la ruta" -#: src/internals/node-api-host.md:434 +#: src/internals/node-api-host.md:446 msgid "The only opt-in is an exact package-name list in the project manifest:" msgstr "" "El único opt-in es una lista exacta del nombre del paquete en el manifiesto " "del proyecto:" -#: src/internals/node-api-host.md:439 +#: src/internals/node-api-host.md:451 src/internals/node-api-host.md:507 msgid "\"nativeAddons\"" msgstr "\"nativeAddons\"" -#: src/internals/node-api-host.md:439 +#: src/internals/node-api-host.md:451 msgid "\"@swc/core\"" msgstr "\"@swc/core\"" -#: src/internals/node-api-host.md:439 +#: src/internals/node-api-host.md:451 msgid "\"oxc-parser\"" msgstr "\"Oxc-parser\"" -#: src/internals/node-api-host.md:444 +#: src/internals/node-api-host.md:456 msgid "" "Transitive packages cannot opt themselves in. The nearest project manifest " "is authoritative, duplicate names are normalized, and subpaths inherit their " @@ -85850,37 +88965,41 @@ msgstr "" "normalizados, y los subpaths heredan la decisión de su propio paquete. No se " "aceptan comodines." -#: src/internals/node-api-host.md:448 +#: src/internals/node-api-host.md:460 msgid "Resolution order is:" msgstr "La orden de resolución es:" -#: src/internals/node-api-host.md:450 +#: src/internals/node-api-host.md:462 msgid "a `well_known_bindings.toml` facade;" msgstr "una fachada `well_known_bindings.toml`;" -#: src/internals/node-api-host.md:451 +#: src/internals/node-api-host.md:463 msgid "a package's explicit `perry.nativeLibrary`;" msgstr "un paquete `perry.nativeLibrary` explícito;" -#: src/internals/node-api-host.md:452 +#: src/internals/node-api-host.md:464 msgid "a project `perry.nativeAddons` entry;" msgstr "una entrada `perry.nativeAddons` del proyecto;" -#: src/internals/node-api-host.md:453 +#: src/internals/node-api-host.md:465 msgid "ordinary JS/TS compilation;" msgstr "compilación ordinaria JS/TS;" -#: src/internals/node-api-host.md:454 +#: src/internals/node-api-host.md:466 msgid "the existing actionable unsupported-addon error." msgstr "el error de addon no soportado accionable existente." -#: src/internals/node-api-host.md:456 +#: src/internals/node-api-host.md:468 +#, fuzzy msgid "" "Thus listing `better-sqlite3`, `sharp`, or `@parcel/watcher` does not bypass " "its Perry facade. Node-API is faithful native execution, so an approved " "addon is compatible with `PERRY_REQUIRE_FAITHFUL_BINDINGS=1`; partial hand-" -"written facade policy remains unchanged. NAN/V8 or direct-libuv imports " -"remain hard errors even when the package name is allowlisted." +"written facade policy remains unchanged. When the actual JavaScript package " +"or a `.node` subpath is selected, explicit addon approval does authorize " +"Parcel watcher platform payloads; these files are no longer silently " +"discarded by the addon collector. NAN/V8 or direct-libuv imports remain hard " +"errors even when the package name is allowlisted." msgstr "" "Así, la lista `better-sqlite3`, `sharp`, o `@parcel/watcher` no pasa por " "alto su fachada Perry. Node-API is faithful native execution, so an approved " @@ -85889,7 +89008,7 @@ msgstr "" "directo-libuv siguen siendo errores duros incluso cuando el nombre del " "paquete está en la lista de permisos." -#: src/internals/node-api-host.md:462 +#: src/internals/node-api-host.md:477 msgid "" "Desktop/server targets are macOS, Windows, Linux, and the BSDs supported by " "Perry's dynamic loader. iOS, tvOS, watchOS, visionOS, Android, HarmonyOS, " @@ -85900,21 +89019,74 @@ msgstr "" "Android, HarmonyOS y WebAssembly rechazan `perry.nativeAddons` durante la " "validación del objetivo." -#: src/internals/node-api-host.md:466 +#: src/internals/node-api-host.md:481 msgid "Sidecar distribution" msgstr "Distribución de sidecars" -#: src/internals/node-api-host.md:468 +#: src/internals/node-api-host.md:483 msgid "Addon builds emit a relocatable directory beside the executable:" msgstr "Addon crea emita un directorio relocable junto al ejecutable:" -#: src/internals/node-api-host.md:479 +#: src/internals/node-api-host.md:494 msgid "" "The compiler copies the selected platform package payload, preserving its " -"relative layout so `$ORIGIN`/`@loader_path` dependencies keep working. The " -"manifest records package name and version, target tuple, relative entry " -"path, SHA-256 for every copied file, and the Node-API policy version. " -"Runtime loading never consults the build machine's `node_modules` tree." +"relative layout so `$ORIGIN`/`@loader_path` dependencies keep working. " +"Runtime data (including unknown extensions and JSON), shared libraries with " +"versioned names, package metadata, and redistribution licenses remain " +"included. Recognized source files, compiled JS/TS wrappers, documentation, " +"build scripts and workflows are omitted. For `prebuilds//...` " +"entries only the selected platform subtree is copied; a flat `prebuilds/" +".node` entry omits other `.node` prebuilds. This reduces shipped " +"bytes and build-cache inputs together." +msgstr "" + +#: src/internals/node-api-host.md:503 +msgid "" +"Unusual runtime inputs with development-like names can be retained by the " +"project manifest, using exact package-relative files or directories (no " +"globs):" +msgstr "" + +#: src/internals/node-api-host.md:507 src/internals/node-api-host.md:508 +#, fuzzy +msgid "\"demo\"" +msgstr "\"demo-metal\"" + +#: src/internals/node-api-host.md:508 +#, fuzzy +msgid "\"nativeAddonFiles\"" +msgstr "\"nativeAddons\"" + +#: src/internals/node-api-host.md:508 +#, fuzzy +msgid "\"data/table.js\"" +msgstr "Tabla de datos" + +#: src/internals/node-api-host.md:508 +#, fuzzy +msgid "\"scripts/runtime\"" +msgstr "`runtime`" + +#: src/internals/node-api-host.md:511 +msgid "" +"Paths must exist, stay inside the owning package, and exclude `.git` and " +"nested `node_modules`. This changes payload selection only, without " +"authorizing addon loading. Unknown data is retained by default; library " +"dependency discovery across packages remains separate work." +msgstr "" + +#: src/internals/node-api-host.md:516 +#, fuzzy +msgid "" +"Copying preserves the platform file-copy behavior, including permissions and " +"macOS extended attributes. SHA-256 authentication streams with a 256 KiB " +"buffer. Runtime verification also streams with bounded memory and still " +"checks every shipped file before the first `dlopen` in each process. " +"Repeated loads in the same Node-API environment return its existing exports " +"without rehashing. The manifest records package name and version, target " +"tuple, relative entry path, SHA-256 for every copied file, and the Node-API " +"policy version. Runtime loading never consults the build machine's " +"`node_modules` tree." msgstr "" "El compilador copia la carga útil del paquete de plataforma seleccionado, " "preservando su disposición relativa para que las dependencias de `$ORIGIN`/" @@ -85924,7 +89096,7 @@ msgstr "" "carga de tiempo de ejecución nunca consulta el árbol `node_modules` de la " "máquina de construcción." -#: src/internals/node-api-host.md:485 +#: src/internals/node-api-host.md:525 #, fuzzy msgid "" "This sidecar model has no first-run write, so read-only install directories " @@ -85941,7 +89113,7 @@ msgstr "" "faltantes o hash-mal emparejados fallan antes de `dlopen` con un error de " "empaque." -#: src/internals/node-api-host.md:493 +#: src/internals/node-api-host.md:533 msgid "" "The platform dynamic-loader APIs reopen that canonical pathname; they do not " "provide one portable way to load from the file handle used for verification. " @@ -85955,7 +89127,7 @@ msgid "" "writer." msgstr "" -#: src/internals/node-api-host.md:503 +#: src/internals/node-api-host.md:543 msgid "" "For a macOS app bundle the directory is placed under `Contents/Frameworks`. " "Every Mach-O sidecar and nested dylib is signed before the outer executable " @@ -85972,7 +89144,7 @@ msgstr "" "archivo. Perry no elimina los atributos de cuarentena de binarios " "descargados no confiables en tiempo de ejecución." -#: src/internals/node-api-host.md:510 +#: src/internals/node-api-host.md:550 msgid "" "Cross-compilation selects the target's platform package, never the host's. " "Perry does not perform an unpinned registry download during compilation. The " @@ -85991,11 +89163,11 @@ msgstr "" "en el gestor de paquetes mientras evita que un archivo `.node` host entre en " "un artefacto de destino." -#: src/internals/node-api-host.md:518 +#: src/internals/node-api-host.md:558 msgid "Cache identity" msgstr "Identidad caché" -#: src/internals/node-api-host.md:520 +#: src/internals/node-api-host.md:560 msgid "" "The compile-time addon manifest is sorted deterministically and contributes " "the following to the build and link cache identities:" @@ -86004,31 +89176,31 @@ msgstr "" "contribuye con lo siguiente a las identidades de la caché de compilación y " "enlace:" -#: src/internals/node-api-host.md:523 +#: src/internals/node-api-host.md:563 msgid "policy schema version and advertised Node-API version;" msgstr "versión del esquema de política y versión anunciada de Node-API;" -#: src/internals/node-api-host.md:524 +#: src/internals/node-api-host.md:564 msgid "target tuple and normalized allowlist;" msgstr "Tupla objetivo y lista de permisos normalizados;" -#: src/internals/node-api-host.md:525 +#: src/internals/node-api-host.md:565 msgid "selected package name/version and relative entry path;" msgstr "el paquete seleccionado name/version y la ruta de entrada relativa;" -#: src/internals/node-api-host.md:526 +#: src/internals/node-api-host.md:566 msgid "SHA-256 and size of every sidecar payload file;" msgstr "SHA-256 y el tamaño de cada archivo de carga útil de sidecar;" -#: src/internals/node-api-host.md:527 +#: src/internals/node-api-host.md:567 msgid "ordered exported-symbol inventory;" msgstr "el inventario ordenado de los símbolos exportados;" -#: src/internals/node-api-host.md:528 +#: src/internals/node-api-host.md:568 msgid "shipping model (`sidecar-v1`)." msgstr "modelo de envío (`sidecar-v1`)." -#: src/internals/node-api-host.md:530 +#: src/internals/node-api-host.md:570 msgid "" "The entry module's object-cache key also includes the canonical logical " "addon ids it can load, because those ids appear in generated loader calls. " @@ -86044,11 +89216,11 @@ msgstr "" "nivel superior incluso cuando todos los archivos TypeScript y objetos no han " "cambiado." -#: src/internals/node-api-host.md:536 +#: src/internals/node-api-host.md:576 msgid "Node-API surface inventory" msgstr "Node-API surface inventory" -#: src/internals/node-api-host.md:538 +#: src/internals/node-api-host.md:578 #, fuzzy msgid "" "The inventory is pinned to Node v26.5.1's [`js_native_api.h`](https://github." @@ -86068,74 +89240,74 @@ msgstr "" "cuando es necesario para la resolución binaria, pero determinísticamente " "informa de la instalación no apoyada." -#: src/internals/node-api-host.md:546 +#: src/internals/node-api-host.md:586 msgid "`js_native_api.h`: core through version 4" msgstr "`js_native_api.h`: núcleo a través de la versión 4" -#: src/internals/node-api-host.md:548 src/internals/node-api-host.md:584 -#: src/internals/node-api-host.md:598 src/internals/node-api-host.md:609 +#: src/internals/node-api-host.md:588 src/internals/node-api-host.md:624 +#: src/internals/node-api-host.md:638 src/internals/node-api-host.md:649 msgid "Entry points" msgstr "Puntos de entrada" -#: src/internals/node-api-host.md:550 src/internals/node-api-host.md:551 -#: src/internals/node-api-host.md:552 src/internals/node-api-host.md:553 -#: src/internals/node-api-host.md:554 src/internals/node-api-host.md:555 -#: src/internals/node-api-host.md:556 src/internals/node-api-host.md:557 -#: src/internals/node-api-host.md:558 src/internals/node-api-host.md:559 -#: src/internals/node-api-host.md:560 src/internals/node-api-host.md:561 -#: src/internals/node-api-host.md:562 src/internals/node-api-host.md:563 -#: src/internals/node-api-host.md:564 src/internals/node-api-host.md:565 -#: src/internals/node-api-host.md:566 src/internals/node-api-host.md:567 -#: src/internals/node-api-host.md:568 src/internals/node-api-host.md:569 -#: src/internals/node-api-host.md:570 src/internals/node-api-host.md:571 -#: src/internals/node-api-host.md:572 src/internals/node-api-host.md:573 -#: src/internals/node-api-host.md:574 src/internals/node-api-host.md:575 -#: src/internals/node-api-host.md:576 src/internals/node-api-host.md:577 -#: src/internals/node-api-host.md:578 src/internals/node-api-host.md:580 -#: src/internals/node-api-host.md:586 src/internals/node-api-host.md:587 -#: src/internals/node-api-host.md:588 src/internals/node-api-host.md:589 #: src/internals/node-api-host.md:590 src/internals/node-api-host.md:591 #: src/internals/node-api-host.md:592 src/internals/node-api-host.md:593 -#: src/internals/node-api-host.md:594 src/internals/node-api-host.md:600 -#: src/internals/node-api-host.md:601 src/internals/node-api-host.md:602 -#: src/internals/node-api-host.md:611 src/internals/node-api-host.md:612 -#: src/internals/node-api-host.md:613 src/internals/node-api-host.md:614 -#: src/internals/node-api-host.md:615 src/internals/node-api-host.md:617 -#: src/internals/node-api-host.md:618 src/internals/node-api-host.md:619 -#: src/internals/node-api-host.md:620 src/internals/node-api-host.md:621 -#: src/internals/node-api-host.md:622 src/internals/node-api-host.md:623 +#: src/internals/node-api-host.md:594 src/internals/node-api-host.md:595 +#: src/internals/node-api-host.md:596 src/internals/node-api-host.md:597 +#: src/internals/node-api-host.md:598 src/internals/node-api-host.md:599 +#: src/internals/node-api-host.md:600 src/internals/node-api-host.md:601 +#: src/internals/node-api-host.md:602 src/internals/node-api-host.md:603 +#: src/internals/node-api-host.md:604 src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:606 src/internals/node-api-host.md:607 +#: src/internals/node-api-host.md:608 src/internals/node-api-host.md:609 +#: src/internals/node-api-host.md:610 src/internals/node-api-host.md:611 +#: src/internals/node-api-host.md:612 src/internals/node-api-host.md:613 +#: src/internals/node-api-host.md:614 src/internals/node-api-host.md:615 +#: src/internals/node-api-host.md:616 src/internals/node-api-host.md:617 +#: src/internals/node-api-host.md:618 src/internals/node-api-host.md:620 +#: src/internals/node-api-host.md:626 src/internals/node-api-host.md:627 +#: src/internals/node-api-host.md:628 src/internals/node-api-host.md:629 +#: src/internals/node-api-host.md:630 src/internals/node-api-host.md:631 +#: src/internals/node-api-host.md:632 src/internals/node-api-host.md:633 +#: src/internals/node-api-host.md:634 src/internals/node-api-host.md:640 +#: src/internals/node-api-host.md:641 src/internals/node-api-host.md:642 +#: src/internals/node-api-host.md:651 src/internals/node-api-host.md:652 +#: src/internals/node-api-host.md:653 src/internals/node-api-host.md:654 +#: src/internals/node-api-host.md:655 src/internals/node-api-host.md:657 +#: src/internals/node-api-host.md:658 src/internals/node-api-host.md:659 +#: src/internals/node-api-host.md:660 src/internals/node-api-host.md:661 +#: src/internals/node-api-host.md:662 src/internals/node-api-host.md:663 msgid "v1" msgstr "v1" -#: src/internals/node-api-host.md:550 +#: src/internals/node-api-host.md:590 msgid "`napi_get_last_error_info`" msgstr "`napi_get_last_error_info`" -#: src/internals/node-api-host.md:550 +#: src/internals/node-api-host.md:590 msgid "Stable per-environment storage" msgstr "Almacenamiento estable por medio ambiente" -#: src/internals/node-api-host.md:551 +#: src/internals/node-api-host.md:591 msgid "" "`napi_get_undefined`, `napi_get_null`, `napi_get_global`, `napi_get_boolean`" msgstr "" "`napi_get_undefined`, `napi_get_null`, `napi_get_global`, `napi_get_boolean`" -#: src/internals/node-api-host.md:551 +#: src/internals/node-api-host.md:591 msgid "Singleton values receive ordinary scoped handles" msgstr "Los valores de Singleton reciben manijas con alcance ordinario" -#: src/internals/node-api-host.md:552 +#: src/internals/node-api-host.md:592 msgid "" "`napi_create_object`, `napi_create_array`, `napi_create_array_with_length`" msgstr "" "`napi_create_object`, `napi_create_array`, `napi_create_array_with_length`" -#: src/internals/node-api-host.md:552 +#: src/internals/node-api-host.md:592 msgid "Perry object/array allocators" msgstr "Acopladores Perry object/array" -#: src/internals/node-api-host.md:553 +#: src/internals/node-api-host.md:593 msgid "" "`napi_create_double`, `napi_create_int32`, `napi_create_uint32`, " "`napi_create_int64`" @@ -86143,11 +89315,11 @@ msgstr "" "`napi_create_double`, `napi_create_int32`, `napi_create_uint32`, " "`napi_create_int64`" -#: src/internals/node-api-host.md:553 +#: src/internals/node-api-host.md:593 msgid "Plain doubles, never the INT32 encoding that class refs share" msgstr "" -#: src/internals/node-api-host.md:554 +#: src/internals/node-api-host.md:594 msgid "" "`napi_create_string_latin1`, `napi_create_string_utf8`, " "`napi_create_string_utf16`" @@ -86155,39 +89327,39 @@ msgstr "" "`napi_create_string_latin1`, `napi_create_string_utf8`, " "`napi_create_string_utf16`" -#: src/internals/node-api-host.md:554 +#: src/internals/node-api-host.md:594 msgid "Length-bounded; `NAPI_AUTO_LENGTH` supported" msgstr "Longitud limitada; soporte `NAPI_AUTO_LENGTH`" -#: src/internals/node-api-host.md:555 +#: src/internals/node-api-host.md:595 msgid "`napi_create_symbol`, `napi_create_function`" msgstr "`napi_create_symbol`, `napi_create_function`" -#: src/internals/node-api-host.md:555 +#: src/internals/node-api-host.md:595 msgid "Native callbacks use host records" msgstr "Los callbacks nativos usan registros de host" -#: src/internals/node-api-host.md:556 +#: src/internals/node-api-host.md:596 msgid "" "`napi_create_error`, `napi_create_type_error`, `napi_create_range_error`" msgstr "" "`napi_create_error`, `napi_create_type_error`, `napi_create_range_error`" -#: src/internals/node-api-host.md:556 +#: src/internals/node-api-host.md:596 msgid "`code` is installed when supplied" msgstr "`code` se instala cuando se suministra" -#: src/internals/node-api-host.md:557 +#: src/internals/node-api-host.md:597 msgid "`napi_typeof`" msgstr "`napi_typeof`" -#: src/internals/node-api-host.md:557 +#: src/internals/node-api-host.md:597 msgid "" "Classifies exactly like the `typeof` operator (class refs, class objects and " "callable proxies are functions), plus `null` and `external`" msgstr "" -#: src/internals/node-api-host.md:558 +#: src/internals/node-api-host.md:598 msgid "" "`napi_get_value_double`, `napi_get_value_int32`, `napi_get_value_uint32`, " "`napi_get_value_int64`, `napi_get_value_bool`" @@ -86195,11 +89367,11 @@ msgstr "" "`napi_get_value_double`, `napi_get_value_int32`, `napi_get_value_uint32`, " "`napi_get_value_int64`, `napi_get_value_bool`" -#: src/internals/node-api-host.md:558 +#: src/internals/node-api-host.md:598 msgid "Checked type/status behavior" msgstr "Comportamiento comprobado de type/status" -#: src/internals/node-api-host.md:559 +#: src/internals/node-api-host.md:599 msgid "" "`napi_get_value_string_latin1`, `napi_get_value_string_utf8`, " "`napi_get_value_string_utf16`" @@ -86207,11 +89379,11 @@ msgstr "" "`napi_get_value_string_latin1`, `napi_get_value_string_utf8`, " "`napi_get_value_string_utf16`" -#: src/internals/node-api-host.md:559 +#: src/internals/node-api-host.md:599 msgid "Query-length and NUL-termination semantics included" msgstr "Semántica de consulta-duración y terminación NUL incluida" -#: src/internals/node-api-host.md:560 +#: src/internals/node-api-host.md:600 msgid "" "`napi_coerce_to_bool`, `napi_coerce_to_number`, `napi_coerce_to_object`, " "`napi_coerce_to_string`" @@ -86219,19 +89391,19 @@ msgstr "" "`napi_coerce_to_bool`, `napi_coerce_to_number`, `napi_coerce_to_object`, " "`napi_coerce_to_string`" -#: src/internals/node-api-host.md:560 +#: src/internals/node-api-host.md:600 msgid "User code is exception-trapped" msgstr "El código de usuario está atrapado en la excepción" -#: src/internals/node-api-host.md:561 +#: src/internals/node-api-host.md:601 msgid "`napi_get_prototype`, `napi_get_property_names`" msgstr "`napi_get_prototype`, `napi_get_property_names`" -#: src/internals/node-api-host.md:561 +#: src/internals/node-api-host.md:601 msgid "General object semantics" msgstr "Semántica de objeto general" -#: src/internals/node-api-host.md:562 +#: src/internals/node-api-host.md:602 msgid "" "`napi_set_property`, `napi_has_property`, `napi_get_property`, " "`napi_delete_property`, `napi_has_own_property`" @@ -86239,11 +89411,11 @@ msgstr "" "`napi_set_property`, `napi_has_property`, `napi_get_property`, " "`napi_delete_property`, `napi_has_own_property`" -#: src/internals/node-api-host.md:562 +#: src/internals/node-api-host.md:602 msgid "String, symbol, and numeric keys" msgstr "Cadena, símbolo y teclas numéricas" -#: src/internals/node-api-host.md:563 +#: src/internals/node-api-host.md:603 msgid "" "`napi_set_named_property`, `napi_has_named_property`, " "`napi_get_named_property`" @@ -86251,11 +89423,11 @@ msgstr "" "`napi_set_named_property`, `napi_has_named_property`, " "`napi_get_named_property`" -#: src/internals/node-api-host.md:563 +#: src/internals/node-api-host.md:603 msgid "UTF-8 names" msgstr "Nombres UTF-8" -#: src/internals/node-api-host.md:564 +#: src/internals/node-api-host.md:604 msgid "" "`napi_set_element`, `napi_has_element`, `napi_get_element`, " "`napi_delete_element`" @@ -86263,43 +89435,43 @@ msgstr "" "`napi_set_element`, `napi_has_element`, `napi_get_element`, " "`napi_delete_element`" -#: src/internals/node-api-host.md:564 +#: src/internals/node-api-host.md:604 msgid "Arrays and exotic indexed objects" msgstr "Rastreos y objetos indexados exóticos" -#: src/internals/node-api-host.md:565 +#: src/internals/node-api-host.md:605 msgid "`napi_define_properties`" msgstr "`napi_define_properties`" -#: src/internals/node-api-host.md:565 +#: src/internals/node-api-host.md:605 msgid "Data, method, and accessor descriptors" msgstr "Datos, método y descriptores de acceso" -#: src/internals/node-api-host.md:566 +#: src/internals/node-api-host.md:606 msgid "`napi_is_array`, `napi_get_array_length`, `napi_strict_equals`" msgstr "`napi_is_array`, `napi_get_array_length`, `napi_strict_equals`" -#: src/internals/node-api-host.md:566 +#: src/internals/node-api-host.md:606 msgid "No pointer-identity shortcut" msgstr "Sin atajo de identidad de puntero" -#: src/internals/node-api-host.md:567 +#: src/internals/node-api-host.md:607 msgid "`napi_call_function`, `napi_new_instance`, `napi_instanceof`" msgstr "`napi_call_function`, `napi_new_instance`, `napi_instanceof`" -#: src/internals/node-api-host.md:567 +#: src/internals/node-api-host.md:607 msgid "General Perry dispatch/construction" msgstr "General Perry dispatch/construction" -#: src/internals/node-api-host.md:568 +#: src/internals/node-api-host.md:608 msgid "`napi_get_cb_info`, `napi_get_new_target`, `napi_define_class`" msgstr "`napi_get_cb_info`, `napi_get_new_target`, `napi_define_class`" -#: src/internals/node-api-host.md:568 +#: src/internals/node-api-host.md:608 msgid "Callback-info lifetime is the native call" msgstr "La vida útil de Callback-info es la llamada nativa" -#: src/internals/node-api-host.md:569 +#: src/internals/node-api-host.md:609 msgid "" "`napi_wrap`, `napi_unwrap`, `napi_remove_wrap`, `napi_create_external`, " "`napi_get_value_external`" @@ -86307,11 +89479,11 @@ msgstr "" "`napi_wrap`, `napi_unwrap`, `napi_remove_wrap`, `napi_create_external`, " "`napi_get_value_external`" -#: src/internals/node-api-host.md:569 +#: src/internals/node-api-host.md:609 msgid "Native object metadata table" msgstr "Tabla de metadatos de objetos nativos" -#: src/internals/node-api-host.md:570 +#: src/internals/node-api-host.md:610 msgid "" "`napi_create_reference`, `napi_delete_reference`, `napi_reference_ref`, " "`napi_reference_unref`, `napi_get_reference_value`" @@ -86319,11 +89491,11 @@ msgstr "" "`napi_create_reference`, `napi_delete_reference`, `napi_reference_ref`, " "`napi_reference_unref`, `napi_get_reference_value`" -#: src/internals/node-api-host.md:570 +#: src/internals/node-api-host.md:610 msgid "Strong and weak reference design above" msgstr "Diseño de referencia fuerte y débil arriba" -#: src/internals/node-api-host.md:571 +#: src/internals/node-api-host.md:611 msgid "" "`napi_open_handle_scope`, `napi_close_handle_scope`, " "`napi_open_escapable_handle_scope`, `napi_close_escapable_handle_scope`, " @@ -86333,11 +89505,11 @@ msgstr "" "`napi_open_escapable_handle_scope`, `napi_close_escapable_handle_scope`, " "`napi_escape_handle`" -#: src/internals/node-api-host.md:571 +#: src/internals/node-api-host.md:611 msgid "Strict nesting and generation validation" msgstr "Anidación estricta y validación de generación" -#: src/internals/node-api-host.md:572 +#: src/internals/node-api-host.md:612 msgid "" "`napi_throw`, `napi_throw_error`, `napi_throw_type_error`, " "`napi_throw_range_error`, `napi_is_error`" @@ -86345,19 +89517,19 @@ msgstr "" "`napi_throw`, `napi_throw_error`, `napi_throw_type_error`, " "`napi_throw_range_error`, `napi_is_error`" -#: src/internals/node-api-host.md:572 +#: src/internals/node-api-host.md:612 msgid "Pending-slot model" msgstr "Modelo pendiente-slot" -#: src/internals/node-api-host.md:573 +#: src/internals/node-api-host.md:613 msgid "`napi_is_exception_pending`, `napi_get_and_clear_last_exception`" msgstr "`napi_is_exception_pending`, `napi_get_and_clear_last_exception`" -#: src/internals/node-api-host.md:573 +#: src/internals/node-api-host.md:613 msgid "Available while pending" msgstr "Disponible mientras está pendiente" -#: src/internals/node-api-host.md:574 +#: src/internals/node-api-host.md:614 msgid "" "`napi_is_arraybuffer`, `napi_create_arraybuffer`, " "`napi_create_external_arraybuffer`, `napi_get_arraybuffer_info`" @@ -86365,38 +89537,38 @@ msgstr "" "`napi_is_arraybuffer`, `napi_create_arraybuffer`, " "`napi_create_external_arraybuffer`, `napi_get_arraybuffer_info`" -#: src/internals/node-api-host.md:574 +#: src/internals/node-api-host.md:614 msgid "Stable backing pointers" msgstr "Puntos de respaldo estables" -#: src/internals/node-api-host.md:575 +#: src/internals/node-api-host.md:615 msgid "" "`napi_is_typedarray`, `napi_create_typedarray`, `napi_get_typedarray_info`" msgstr "" "`napi_is_typedarray`, `napi_create_typedarray`, `napi_get_typedarray_info`" -#: src/internals/node-api-host.md:575 +#: src/internals/node-api-host.md:615 msgid "All eleven declared typed-array kinds" msgstr "Los once tipos declarados de array tipo" -#: src/internals/node-api-host.md:576 +#: src/internals/node-api-host.md:616 msgid "`napi_create_dataview`, `napi_is_dataview`, `napi_get_dataview_info`" msgstr "`napi_create_dataview`, `napi_is_dataview`, `napi_get_dataview_info`" -#: src/internals/node-api-host.md:576 +#: src/internals/node-api-host.md:616 msgid "Backing identity and offsets preserved" msgstr "Respaldo de la identidad y de las compensaciones preservadas" -#: src/internals/node-api-host.md:577 +#: src/internals/node-api-host.md:617 msgid "`napi_get_version`" msgstr "`napi_get_version`" -#: src/internals/node-api-host.md:577 +#: src/internals/node-api-host.md:617 #, fuzzy msgid "Returns 10" msgstr "Retornos 8" -#: src/internals/node-api-host.md:578 +#: src/internals/node-api-host.md:618 msgid "" "`napi_create_promise`, `napi_resolve_deferred`, `napi_reject_deferred`, " "`napi_is_promise`" @@ -86404,19 +89576,19 @@ msgstr "" "`napi_create_promise`, `napi_resolve_deferred`, `napi_reject_deferred`, " "`napi_is_promise`" -#: src/internals/node-api-host.md:578 +#: src/internals/node-api-host.md:618 msgid "Deferred records are environment-owned roots" msgstr "Los registros diferidos son raíces de propiedad ambiental" -#: src/internals/node-api-host.md:579 src/internals/node-api-host.md:616 +#: src/internals/node-api-host.md:619 src/internals/node-api-host.md:656 msgid "never" msgstr "never" -#: src/internals/node-api-host.md:579 +#: src/internals/node-api-host.md:619 msgid "`napi_run_script`" msgstr "`napi_run_script`" -#: src/internals/node-api-host.md:579 +#: src/internals/node-api-host.md:619 msgid "" "Returns `napi_generic_failure`; arbitrary runtime source execution would " "violate the no-runtime-engine model" @@ -86424,41 +89596,41 @@ msgstr "" "Devuelve `napi_generic_failure`; la ejecución arbitraria de la fuente de " "tiempo de ejecución violaría el modelo de motor sin tiempo de ejecución" -#: src/internals/node-api-host.md:580 +#: src/internals/node-api-host.md:620 msgid "`napi_adjust_external_memory`" msgstr "`napi_adjust_external_memory`" -#: src/internals/node-api-host.md:580 +#: src/internals/node-api-host.md:620 msgid "Collector pressure accounting" msgstr "Contabilidad de la presión del colector" -#: src/internals/node-api-host.md:582 +#: src/internals/node-api-host.md:622 msgid "`js_native_api.h`: versions 5 through 8" msgstr "`js_native_api.h`: versiones 5 a 8" -#: src/internals/node-api-host.md:584 src/internals/node-api-host.md:598 -#: src/internals/node-api-host.md:609 +#: src/internals/node-api-host.md:624 src/internals/node-api-host.md:638 +#: src/internals/node-api-host.md:649 msgid "Version" msgstr "Version" -#: src/internals/node-api-host.md:586 +#: src/internals/node-api-host.md:626 msgid "`napi_create_date`, `napi_is_date`, `napi_get_date_value`" msgstr "`napi_create_date`, `napi_is_date`, `napi_get_date_value`" -#: src/internals/node-api-host.md:586 +#: src/internals/node-api-host.md:626 msgid "Perry `Date` identity/value" msgstr "Perry `Date` identity/value" -#: src/internals/node-api-host.md:587 +#: src/internals/node-api-host.md:627 msgid "`napi_add_finalizer`" msgstr "`napi_add_finalizer`" -#: src/internals/node-api-host.md:587 +#: src/internals/node-api-host.md:627 msgid "Queued post-GC finalization" msgstr "" "Finalización en cola después del período de sesiones del Consejo de Seguridad" -#: src/internals/node-api-host.md:588 +#: src/internals/node-api-host.md:628 msgid "" "`napi_create_bigint_int64`, `napi_create_bigint_uint64`, " "`napi_create_bigint_words`" @@ -86466,11 +89638,11 @@ msgstr "" "`napi_create_bigint_int64`, `napi_create_bigint_uint64`, " "`napi_create_bigint_words`" -#: src/internals/node-api-host.md:588 +#: src/internals/node-api-host.md:628 msgid "Arbitrary precision" msgstr "Precisión arbitraria" -#: src/internals/node-api-host.md:589 +#: src/internals/node-api-host.md:629 msgid "" "`napi_get_value_bigint_int64`, `napi_get_value_bigint_uint64`, " "`napi_get_value_bigint_words`" @@ -86478,23 +89650,23 @@ msgstr "" "`napi_get_value_bigint_int64`, `napi_get_value_bigint_uint64`, " "`napi_get_value_bigint_words`" -#: src/internals/node-api-host.md:589 +#: src/internals/node-api-host.md:629 msgid "Exact `lossless` and word-count behavior" msgstr "Comportamiento exacto de `lossless` y cuenta de palabras" -#: src/internals/node-api-host.md:590 +#: src/internals/node-api-host.md:630 msgid "`napi_get_all_property_names`" msgstr "`napi_get_all_property_names`" -#: src/internals/node-api-host.md:590 +#: src/internals/node-api-host.md:630 msgid "Collection mode, filter, and key conversion honored" msgstr "Modo de recogida, filtro y conversión de teclas" -#: src/internals/node-api-host.md:591 +#: src/internals/node-api-host.md:631 msgid "`napi_set_instance_data`, `napi_get_instance_data`" msgstr "`napi_set_instance_data`, `napi_get_instance_data`" -#: src/internals/node-api-host.md:591 +#: src/internals/node-api-host.md:631 msgid "" "One record per environment; replacement overwrites without calling the " "previous finalizer" @@ -86502,35 +89674,35 @@ msgstr "" "Un registro por entorno; sobrescribe el reemplazo sin llamar al ultimador " "anterior" -#: src/internals/node-api-host.md:592 +#: src/internals/node-api-host.md:632 msgid "`napi_detach_arraybuffer`, `napi_is_detached_arraybuffer`" msgstr "`napi_detach_arraybuffer`, `napi_is_detached_arraybuffer`" -#: src/internals/node-api-host.md:592 +#: src/internals/node-api-host.md:632 msgid "Existing detach propagation" msgstr "Existiendo propagación de desprendimiento" -#: src/internals/node-api-host.md:593 +#: src/internals/node-api-host.md:633 msgid "`napi_type_tag_object`, `napi_check_object_type_tag`" msgstr "`napi_type_tag_object`, `napi_check_object_type_tag`" -#: src/internals/node-api-host.md:593 +#: src/internals/node-api-host.md:633 msgid "128-bit tag in object metadata" msgstr "Etiqueta de 128 bits en metadatos de objetos" -#: src/internals/node-api-host.md:594 +#: src/internals/node-api-host.md:634 msgid "`napi_object_freeze`, `napi_object_seal`" msgstr "`napi_object_freeze`, `napi_object_seal`" -#: src/internals/node-api-host.md:594 +#: src/internals/node-api-host.md:634 msgid "Perry descriptor machinery" msgstr "Máquinas de descriptores Perry" -#: src/internals/node-api-host.md:596 +#: src/internals/node-api-host.md:636 msgid "`js_native_api.h`: version 9, version 10, and experimental" msgstr "`js_native_api.h`: versión 9, versión 10, y experimental" -#: src/internals/node-api-host.md:600 +#: src/internals/node-api-host.md:640 msgid "" "`node_api_symbol_for`, `node_api_create_syntax_error`, " "`node_api_throw_syntax_error`" @@ -86538,17 +89710,17 @@ msgstr "" "`node_api_symbol_for`, `node_api_create_syntax_error`, " "`node_api_throw_syntax_error`" -#: src/internals/node-api-host.md:600 +#: src/internals/node-api-host.md:640 #, fuzzy msgid "Global `Symbol.for` registry; `code` is installed when supplied" msgstr "`code` se instala cuando se suministra" -#: src/internals/node-api-host.md:601 src/internals/node-api-host.md:602 -#: src/internals/node-api-host.md:623 +#: src/internals/node-api-host.md:641 src/internals/node-api-host.md:642 +#: src/internals/node-api-host.md:663 msgid "10" msgstr "10" -#: src/internals/node-api-host.md:601 +#: src/internals/node-api-host.md:641 msgid "" "`node_api_create_external_string_latin1`, " "`node_api_create_external_string_utf16`" @@ -86556,13 +89728,13 @@ msgstr "" "`node_api_create_external_string_latin1`, " "`node_api_create_external_string_utf16`" -#: src/internals/node-api-host.md:601 +#: src/internals/node-api-host.md:641 msgid "" "Copied into a Perry string: `copied` is `true` and the finalizer runs before " "the call returns, the same path Node takes when V8 cannot adopt the storage" msgstr "" -#: src/internals/node-api-host.md:602 +#: src/internals/node-api-host.md:642 msgid "" "`node_api_create_property_key_latin1`, `node_api_create_property_key_utf8`, " "`node_api_create_property_key_utf16`" @@ -86570,34 +89742,34 @@ msgstr "" "`node_api_create_property_key_latin1`, `node_api_create_property_key_utf8`, " "`node_api_create_property_key_utf16`" -#: src/internals/node-api-host.md:602 +#: src/internals/node-api-host.md:642 msgid "Ordinary strings; Perry has no separate internalized form" msgstr "" -#: src/internals/node-api-host.md:603 src/internals/node-api-host.md:604 -#: src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:643 src/internals/node-api-host.md:644 +#: src/internals/node-api-host.md:645 msgid "later" msgstr "later" -#: src/internals/node-api-host.md:603 src/internals/node-api-host.md:604 -#: src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:643 src/internals/node-api-host.md:644 +#: src/internals/node-api-host.md:645 msgid "experimental" msgstr "experimental" -#: src/internals/node-api-host.md:603 +#: src/internals/node-api-host.md:643 msgid "`node_api_post_finalizer`" msgstr "`node_api_post_finalizer`" -#: src/internals/node-api-host.md:603 src/internals/node-api-host.md:604 -#: src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:643 src/internals/node-api-host.md:644 +#: src/internals/node-api-host.md:645 msgid "Not part of the advertised stable ABI" msgstr "No es parte de la ABI estable anunciada" -#: src/internals/node-api-host.md:604 +#: src/internals/node-api-host.md:644 msgid "`node_api_create_object_with_properties`, `node_api_set_prototype`" msgstr "`node_api_create_object_with_properties`, `node_api_set_prototype`" -#: src/internals/node-api-host.md:605 +#: src/internals/node-api-host.md:645 msgid "" "`node_api_create_sharedarraybuffer`, " "`node_api_create_external_sharedarraybuffer`, `node_api_is_sharedarraybuffer`" @@ -86605,33 +89777,33 @@ msgstr "" "`node_api_create_sharedarraybuffer`, " "`node_api_create_external_sharedarraybuffer`, `node_api_is_sharedarraybuffer`" -#: src/internals/node-api-host.md:607 +#: src/internals/node-api-host.md:647 msgid "`node_api.h`" msgstr "`node_api.h`" -#: src/internals/node-api-host.md:611 src/internals/node-api-host.md:612 -#: src/internals/node-api-host.md:613 src/internals/node-api-host.md:614 -#: src/internals/node-api-host.md:615 +#: src/internals/node-api-host.md:651 src/internals/node-api-host.md:652 +#: src/internals/node-api-host.md:653 src/internals/node-api-host.md:654 +#: src/internals/node-api-host.md:655 msgid "base" msgstr "base" -#: src/internals/node-api-host.md:611 +#: src/internals/node-api-host.md:651 msgid "`napi_module_register`, `napi_fatal_error`" msgstr "`napi_module_register`, `napi_fatal_error`" -#: src/internals/node-api-host.md:611 +#: src/internals/node-api-host.md:651 msgid "Legacy registration and abort path" msgstr "Registro del legado y ruta de abortar" -#: src/internals/node-api-host.md:612 +#: src/internals/node-api-host.md:652 msgid "`napi_async_init`, `napi_async_destroy`, `napi_make_callback`" msgstr "`napi_async_init`, `napi_async_destroy`, `napi_make_callback`" -#: src/internals/node-api-host.md:612 +#: src/internals/node-api-host.md:652 msgid "Existing async-hooks integration" msgstr "Integración de ganchos de sincronización existente" -#: src/internals/node-api-host.md:613 +#: src/internals/node-api-host.md:653 msgid "" "`napi_create_buffer`, `napi_create_external_buffer`, " "`napi_create_buffer_copy`, `napi_is_buffer`, `napi_get_buffer_info`" @@ -86639,11 +89811,11 @@ msgstr "" "`napi_create_buffer`, `napi_create_external_buffer`, " "`napi_create_buffer_copy`, `napi_is_buffer`, `napi_get_buffer_info`" -#: src/internals/node-api-host.md:613 +#: src/internals/node-api-host.md:653 msgid "Perry `Buffer` identity and stable bytes" msgstr "Perry Identidad `Buffer` y bytes estables" -#: src/internals/node-api-host.md:614 +#: src/internals/node-api-host.md:654 msgid "" "`napi_create_async_work`, `napi_delete_async_work`, `napi_queue_async_work`, " "`napi_cancel_async_work`" @@ -86651,15 +89823,15 @@ msgstr "" "`napi_create_async_work`, `napi_delete_async_work`, `napi_queue_async_work`, " "`napi_cancel_async_work`" -#: src/internals/node-api-host.md:614 +#: src/internals/node-api-host.md:654 msgid "Explicit state machine above" msgstr "Máquina de estado explícito arriba" -#: src/internals/node-api-host.md:615 +#: src/internals/node-api-host.md:655 msgid "`napi_get_node_version`" msgstr "`napi_get_node_version`" -#: src/internals/node-api-host.md:615 +#: src/internals/node-api-host.md:655 msgid "" "Returns Perry's semver components with release string `perry`; it does not " "claim a Node release" @@ -86667,15 +89839,15 @@ msgstr "" "Devuelve los componentes de Perry con cadena de liberación `perry`; no " "reclama una liberación de Nodo" -#: src/internals/node-api-host.md:616 +#: src/internals/node-api-host.md:656 msgid "`napi_get_uv_event_loop`" msgstr "`napi_get_uv_event_loop`" -#: src/internals/node-api-host.md:616 +#: src/internals/node-api-host.md:656 msgid "Returns `napi_generic_failure` and a null loop; Perry has no libuv" msgstr "Devuelve `napi_generic_failure` y un bucle nulo; Perry no tiene libuv" -#: src/internals/node-api-host.md:617 +#: src/internals/node-api-host.md:657 msgid "" "`napi_fatal_exception`, `napi_add_env_cleanup_hook`, " "`napi_remove_env_cleanup_hook`" @@ -86683,19 +89855,19 @@ msgstr "" "`napi_fatal_exception`, `napi_add_env_cleanup_hook`, " "`napi_remove_env_cleanup_hook`" -#: src/internals/node-api-host.md:617 +#: src/internals/node-api-host.md:657 msgid "Main-thread lifecycle" msgstr "Ciclo de vida de los hilos principales" -#: src/internals/node-api-host.md:618 +#: src/internals/node-api-host.md:658 msgid "`napi_open_callback_scope`, `napi_close_callback_scope`" msgstr "`napi_open_callback_scope`, `napi_close_callback_scope`" -#: src/internals/node-api-host.md:618 +#: src/internals/node-api-host.md:658 msgid "Async context and strict nesting" msgstr "Contexto de sincronización y anidación estricta" -#: src/internals/node-api-host.md:619 +#: src/internals/node-api-host.md:659 msgid "" "`napi_create_threadsafe_function`, `napi_get_threadsafe_function_context`, " "`napi_call_threadsafe_function`" @@ -86703,11 +89875,11 @@ msgstr "" "`napi_create_threadsafe_function`, `napi_get_threadsafe_function_context`, " "`napi_call_threadsafe_function`" -#: src/internals/node-api-host.md:619 +#: src/internals/node-api-host.md:659 msgid "Event-pump-backed TSFN" msgstr "TSFN respaldado por el lanzamiento de eventos" -#: src/internals/node-api-host.md:620 +#: src/internals/node-api-host.md:660 msgid "" "`napi_acquire_threadsafe_function`, `napi_release_threadsafe_function`, " "`napi_unref_threadsafe_function`, `napi_ref_threadsafe_function`" @@ -86715,37 +89887,37 @@ msgstr "" "`napi_acquire_threadsafe_function`, `napi_release_threadsafe_function`, " "`napi_unref_threadsafe_function`, `napi_ref_threadsafe_function`" -#: src/internals/node-api-host.md:620 +#: src/internals/node-api-host.md:660 msgid "Thread count and event-loop keepalive" msgstr "Conteo de hilos y ciclo de eventos" -#: src/internals/node-api-host.md:621 +#: src/internals/node-api-host.md:661 msgid "`napi_add_async_cleanup_hook`, `napi_remove_async_cleanup_hook`" msgstr "`napi_add_async_cleanup_hook`, `napi_remove_async_cleanup_hook`" -#: src/internals/node-api-host.md:621 +#: src/internals/node-api-host.md:661 msgid "Shutdown waits for completion" msgstr "El apagado espera a que se complete" -#: src/internals/node-api-host.md:622 +#: src/internals/node-api-host.md:662 msgid "`node_api_get_module_file_name`" msgstr "`node_api_get_module_file_name`" -#: src/internals/node-api-host.md:622 +#: src/internals/node-api-host.md:662 msgid "`file://` URL of the attributed module's sidecar path" msgstr "" -#: src/internals/node-api-host.md:623 +#: src/internals/node-api-host.md:663 msgid "`node_api_create_buffer_from_arraybuffer`" msgstr "`node_api_create_buffer_from_arraybuffer`" -#: src/internals/node-api-host.md:623 +#: src/internals/node-api-host.md:663 msgid "" "Buffer view sharing the ArrayBuffer's storage; out-of-range windows throw " "`ERR_OUT_OF_RANGE`" msgstr "" -#: src/internals/node-api-host.md:625 +#: src/internals/node-api-host.md:665 msgid "" "The addon-side initializer exports `node_api_module_get_api_version_v1` and " "`napi_register_module_v1`; these are looked up in the addon and are not host " @@ -86755,18 +89927,18 @@ msgstr "" "`napi_register_module_v1`; estos son buscados en el addon y no son " "exportaciones de host." -#: src/internals/node-api-host.md:629 +#: src/internals/node-api-host.md:669 msgid "Required gates" msgstr "Puertas necesarias" -#: src/internals/node-api-host.md:631 +#: src/internals/node-api-host.md:671 msgid "" "Implementation is not complete until the gates below can independently fail:" msgstr "" "La implementación no se completa hasta que las puertas de abajo puedan " "fallar de forma independiente:" -#: src/internals/node-api-host.md:633 +#: src/internals/node-api-host.md:673 msgid "" "**Handle/GC gate:** scopes, strong and weak refs, wrap metadata, callbacks, " "and pending exceptions survive forced copied minors and full collections; " @@ -86779,7 +89951,7 @@ msgstr "" "generación de fallos; los scripts de auditoría de root-holder y rekey-table " "están limpios." -#: src/internals/node-api-host.md:637 +#: src/internals/node-api-host.md:677 msgid "" "**Exception gate:** a throwing getter, native callback, finalizer misuse, " "and TSFN callback all return through C before Perry raises; an instrumented " @@ -86789,7 +89961,7 @@ msgstr "" "ultimador, y TSFN callback todo el retorno a través de C antes de Perry se " "eleva; un addon instrumentado afirma que ningún descanso entró en sus marcos." -#: src/internals/node-api-host.md:640 +#: src/internals/node-api-host.md:680 msgid "" "**Loader/export gate:** a real addon records the address of a called " "`napi_*` function and the test proves that address belongs to the Perry " @@ -86799,7 +89971,7 @@ msgstr "" "llamada `napi_*` y la prueba demuestra que la dirección pertenece al " "ejecutable Perry. El número de llamadas de humo debe ser mayor que cero." -#: src/internals/node-api-host.md:643 +#: src/internals/node-api-host.md:683 msgid "" "**Real-addon gate:** one node-addon-api addon and one napi-rs addon cover " "properties, classes, async work, TSFN, instance data, wrap/finalizers, and " @@ -86811,7 +89983,7 @@ msgstr "" "finalizers, y buffers. Las versiones NAPI, NAN/V8 y `uv_*` no soportadas " "afirman su diagnóstico exacto." -#: src/internals/node-api-host.md:647 +#: src/internals/node-api-host.md:687 msgid "" "**Watcher differential gate:** the real `@parcel/watcher` binary and Perry's " "facade observe the same fixture tree and emit identical coalesced streams; " @@ -86822,7 +89994,7 @@ msgstr "" "corrientes coalescadas idénticas; ambos lados afirman que su implementación " "nativa realmente funcionó." -#: src/internals/node-api-host.md:650 +#: src/internals/node-api-host.md:690 msgid "" "**Distribution gate:** move the executable plus sidecar directory to a read-" "only location and load successfully; deletion or mutation of a sidecar fails " @@ -86832,7 +90004,7 @@ msgstr "" "ubicación de sólo lectura y cargar con éxito; la eliminación o mutación de " "un sidecar falla la comprobación de hash manifiesto." -#: src/internals/node-api-host.md:653 +#: src/internals/node-api-host.md:693 msgid "" "**Cache gate:** changing only addon bytes or policy misses the build cache; " "rebuilding unchanged inputs hits it." @@ -86840,7 +90012,7 @@ msgstr "" "**Puerta de caché:** cambiar sólo los bytes de addon o la política falla la " "caché de compilación; reconstruir las entradas sin cambios lo golpea." -#: src/internals/node-api-host.md:655 +#: src/internals/node-api-host.md:695 msgid "" "**Size gate:** byte-identical hello-world outputs with an empty addon graph; " "report the host-only delta for an addon build and enforce the 0.6 MB budget." @@ -86849,7 +90021,7 @@ msgstr "" "addon vacío; informe el delta de host sólo para una construcción de addon y " "hacer cumplir el presupuesto de 0.6 MB." -#: src/internals/node-api-host.md:658 +#: src/internals/node-api-host.md:698 msgid "" "The host is not enabled merely because its unit tests pass. The real-addon " "and symbol-provenance gates are the acceptance boundary: a green run in " @@ -86860,6 +90032,87 @@ msgstr "" "una carrera verde en la que ningún inicializador addon o cuerpo `napi_*` " "ejecutado es un fallo." +#: src/internals/fallback-diagnostics.md:3 +msgid "" +"`PERRY_FALLBACK_DIAG=1 perry compile app.ts -o app` writes `app.fallback." +"json` beside the executable. The opt-in compiler report names emitted " +"generic property reads, stores, computed accesses, presence checks, method/" +"call dispatch and birth/transition helpers. It records the helper's compiler " +"decision location, receiver facts and TOP origin, refused field-proof " +"predicates, selected guard, property key, generated function and block. An " +"aborted analysis is explicit, with its published work/pop counts; a missing " +"binding proof records that cause when the proof consumer actually rejects it." +msgstr "" + +#: src/internals/fallback-diagnostics.md:12 +msgid "" +"Source byte offsets already retained by HIR resolve to source lines and " +"UTF-8 byte columns. Nodes without their own offsets use the nearest " +"enclosing spanned expression when available, with `approximate: true`; " +"otherwise the function symbol is the location. An approximate location is " +"never an exact assignment or computed-access source span." +msgstr "" + +#: src/internals/fallback-diagnostics.md:18 +msgid "" +"LLVM 22 call-site pseudo-probes provide the native labels. Diagnostic calls " +"carry `nomerge`, and backend tail merging is disabled in diagnostic images " +"because LLVM 22 statepoint lowering does not retain that machine-call flag. " +"These choices preserve distinct decision labels. A late operand fixup may " +"follow the label; the ledger follows only the same straight-line sequence to " +"its first call and verifies the helper. The sidecar contains their encoded " +"sections and the linked symbol addresses, so tools can join call-site labels " +"to the measured executable's PCs, including duplicated/inlined sites. " +"`text_sha256` binds the evidence to the executable's `.text` section. Probe " +"sections, descriptors and synthetic DWARF are removed from the executable " +"before its normal strip step. The generated program contains no diagnostic " +"state, counters, validity bits, probe instructions or lookup table." +msgstr "" + +#: src/internals/fallback-diagnostics.md:30 +msgid "" +"Object, completed-build and link caches are bypassed while diagnostics are " +"on: a warm cache must not omit records or preserve an already-removed probe " +"table. The unset and explicit `PERRY_FALLBACK_DIAG=0` paths produce the " +"ordinary IR and retain their existing cache identity. Runtime archives are " +"unchanged." +msgstr "" + +#: src/internals/fallback-diagnostics.md:35 +msgid "" +"The extraction currently requires `llvm-objcopy` or `objcopy`; the PC " +"decoder is validated on little-endian Linux ELF64 with LLVM 22. If the " +"target cannot emit probe labels or the labels cannot be extracted, the opt-" +"in compile fails instead of publishing an incomplete mapping as successful." +msgstr "" + +#: src/internals/fallback-diagnostics.md:40 +msgid "" +"The diagnostic image must pass the instruction-count perturbation gate " +"before its profile is used. The off image carries none of these attributes." +msgstr "" + +#: src/internals/fallback-diagnostics.md:43 +msgid "" +"Run the targeted acceptance check after a normal `cargo build-perry` build:" +msgstr "" + +#: src/internals/fallback-diagnostics.md:46 +#, fuzzy +msgid "target/release" +msgstr "Etiquetar una versión" + +#: src/internals/fallback-diagnostics.md:49 +msgid "" +"It checks Node parity, sidecar generation, warm-cache regeneration, removal " +"of probe tables, source-location accuracy labels, and whole-binary identity " +"with diagnostics off. Before using a diagnostic binary for profiling, " +"compare its retired user instructions against the default binary; pseudo-" +"probes must not materially perturb the measured lowering. The scoreboard " +"ledger decodes labels and keeps missing/ambiguous PC joins explicitly as `no " +"record`." +msgstr "" + #: src/contributing/architecture.md:3 msgid "" "This is a brief overview for contributors. The rules for creating, " @@ -87109,13 +90362,45 @@ msgstr "El crate de codegen está organizado en módulos enfocados:" msgid "The HIR lowering was split into 8 modules:" msgstr "El descenso de HIR fue dividido en 8 módulos:" +#: src/contributing/architecture.md:100 +#, fuzzy +msgid "Adding a native UI widget" +msgstr "Cómo crear un binding nativo" + #: src/contributing/architecture.md:102 +msgid "A new widget touches four places:" +msgstr "" + +#: src/contributing/architecture.md:104 +msgid "" +"Runtime: create the widget in `crates/perry-ui-macos/src/widgets/` and call " +"`register_widget(view)`." +msgstr "" + +#: src/contributing/architecture.md:105 +msgid "" +"FFI: export `perry_ui__create` from `crates/perry-ui-macos/src/lib." +"rs`." +msgstr "" + +#: src/contributing/architecture.md:106 +msgid "" +"Codegen: declare the extern and add the `NativeMethodCall` dispatch in " +"`crates/perry-codegen/src/lower_call/native/native_ui_widgets_branch.rs`." +msgstr "" + +#: src/contributing/architecture.md:107 +msgid "" +"HIR: `crates/perry-hir/src/lower/`, only if the widget has instance methods." +msgstr "" + +#: src/contributing/architecture.md:111 msgid "[Building from Source](building.md)" msgstr "[Compilar desde el código fuente](building.md)" -#: src/contributing/architecture.md:103 -msgid "" -"See `CLAUDE.md` in the repository root for detailed implementation notes" +#: src/contributing/architecture.md:112 +#, fuzzy +msgid "See `AGENTS.md` in the repository root for implementation traps" msgstr "" "Consulta `CLAUDE.md` en la raíz del repositorio para notas detalladas de " "implementación" @@ -87468,53 +90753,54 @@ msgstr "" #: src/contributing/crate-policy.md:116 msgid "" -"The committed baseline records only structural signals: the 76 reviewed " -"member decisions, the default dependency closure, the `perry` CLI closure, " -"and decision counts. Any structural change must update the policy " -"intentionally; ordinary Rust source edits do not churn the baseline." +"`workspace-architecture.json` schema 2 records the exact default dependency " +"closure and the `perry` CLI closure. Migrating schema 1 means deleting its " +"`baseline.workspace_members` and `baseline.decision_counts` fields while " +"retaining both closure arrays. Workspace membership and crate " +"classifications are already derived by joining Cargo metadata with the " +"explicit crate policy, so aggregate member and decision counts are not " +"stored a second time. Removing an unrelated member requires its actual " +"workspace and classification edits; it does not require editing aggregate " +"counts. A removal that changes either dependency closure still requires " +"reviewing and updating that exact structural baseline." msgstr "" -"La base de referencia comprometida registra sólo señales estructurales: las " -"76 decisiones de los miembros revisados, el cierre de dependencias por " -"defecto, el cierre de `perry` CLI, y los recuentos de decisiones. Cualquier " -"cambio estructural debe actualizar la política intencionalmente; las " -"ediciones de origen Rust ordinarias no se limitan a la línea de base." -#: src/contributing/crate-policy.md:121 +#: src/contributing/crate-policy.md:127 msgid "Adding or removing a crate" msgstr "Añadir o eliminar una caja" -#: src/contributing/crate-policy.md:123 +#: src/contributing/crate-policy.md:129 msgid "" "A crate change must update all of the following in the same pull request:" msgstr "" "Un cambio de caja debe actualizar todo lo siguiente en la misma petición de " "tracción:" -#: src/contributing/crate-policy.md:125 +#: src/contributing/crate-policy.md:131 msgid "explicit workspace membership;" msgstr "la pertenencia explícita al espacio de trabajo;" -#: src/contributing/crate-policy.md:126 +#: src/contributing/crate-policy.md:132 msgid "`workspace-architecture.json` classification and decision;" msgstr "Clasificación y decisión de `workspace-architecture.json`;" -#: src/contributing/crate-policy.md:127 +#: src/contributing/crate-policy.md:133 msgid "shared workspace dependencies, when applicable;" msgstr "las dependencias compartidas del espacio de trabajo, cuando proceda;" -#: src/contributing/crate-policy.md:128 +#: src/contributing/crate-policy.md:134 msgid "CI/release selection for its category;" msgstr "Selección de CI/release para su categoría;" -#: src/contributing/crate-policy.md:129 +#: src/contributing/crate-policy.md:135 msgid "contributor or user documentation;" msgstr "documentación del contribuyente o del usuario;" -#: src/contributing/crate-policy.md:130 +#: src/contributing/crate-policy.md:136 msgid "tests at the crate's external interface." msgstr "pruebas en la interfaz externa de la caja." -#: src/contributing/crate-policy.md:132 +#: src/contributing/crate-policy.md:138 msgid "" "Run the architecture audit before requesting review. CI rejects implicit or " "unclassified workspace members, unexpected default members, missing " @@ -87528,16 +90814,11 @@ msgstr "" #: src/contributing/building.md:5 msgid "" -"Rust toolchain (stable, **≥ 1.94**): [rustup.rs](https://rustup.rs/). The " -"workspace pins no toolchain file, so an older `stable` fails with a " -"`sqlx@0.9.0 requires rustc 1.94.0` MSRV error from deep in the dependency " -"graph. `rustup update stable` resolves it." +"Rust toolchain: install [rustup](https://rustup.rs/); the workspace pins " +"`nightly-2026-10-04` in `rust-toolchain.toml` because its exception " +"transport needs nightly unwind-table flags. Running Cargo from the checkout " +"installs or selects the pinned toolchain automatically." msgstr "" -"Cadena de herramientas Rust (estable, **≥ 1.94**): [rustup.rs](https://" -"rustup.rs/). El espacio de trabajo no contiene ningún archivo de cadena de " -"herramientas, por lo que un `stable` más antiguo falla con un error de MSRV " -"`sqlx@0.9.0 requires rustc 1.94.0` desde lo profundo del gráfico de " -"dependencia. `rustup update stable` lo resuelve." #: src/contributing/building.md:9 msgid "System C compiler (`cc` on macOS/Linux, MSVC on Windows)" @@ -87574,7 +90855,13 @@ msgstr "" "prefijo LLVM 22. En Windows esta variable es obligatoria y debe apuntar al " "archivo de desarrollo LLVM 22 extraído utilizado por la compilación." -#: src/contributing/building.md:22 +#: src/contributing/building.md:21 +msgid "" +"For the cached Make targets, install the pinned Mr Boxington once with `make " +"mbx-deps`." +msgstr "" + +#: src/contributing/building.md:24 msgid "" "An external clang is not part of the normal in-process codegen path. Install " "a matching clang only when working on a path that explicitly invokes it (for " @@ -87586,16 +90873,17 @@ msgstr "" "invoca explícitamente (por ejemplo, Windows host `--embed`) o cuando se " "construye con `--no-default-features` para biseccionar el motor textual-IR." -#: src/contributing/building.md:32 +#: src/contributing/building.md:34 #, fuzzy -msgid "# Build the default product and its dependency closure\n" +msgid "# Build the fully optimized product and its dependency closure\n" msgstr "# Construir el producto predeterminado y su cierre de dependencia" -#: src/contributing/building.md:37 -msgid "The binary is at `target/release/perry`." +#: src/contributing/building.md:39 +#, fuzzy +msgid "The binary is at `target/prod/perry`." msgstr "El binario se encuentra en `target/release/perry`." -#: src/contributing/building.md:39 +#: src/contributing/building.md:41 msgid "" "The workspace deliberately defaults to the `perry` CLI. Bindings, platform " "adapters, test support, and release-only archives are selected explicitly by " @@ -87609,65 +90897,100 @@ msgstr "" "de plataforma centralizada descritas en el [política de caja](crate-policy." "md)." -#: src/contributing/building.md:44 -msgid "Build taxonomy (dev / release / dist)" +#: src/contributing/building.md:46 +#, fuzzy +msgid "Build taxonomy (dev / prod, with compatibility profiles)" msgstr "Construir taxonomía (dev / liberación / dist)" -#: src/contributing/building.md:46 -msgid "Perry has three build profiles, each tuned for a different job (#5422):" +#: src/contributing/building.md:48 +msgid "" +"Use `dev` and `prod` for new builds. Cargo's `debug` output directory is the " +"artifact directory for the `dev` profile; it is not a separate Cargo " +"profile. The legacy `perry-dev`, `release`, and `dist` profile names remain " +"for existing CI, tooling, and reproducible investigations." msgstr "" -"Perry tiene tres perfiles de construcción, cada uno sintonizado para un " -"trabajo diferente (#5422):" -#: src/contributing/building.md:48 +#: src/contributing/building.md:53 msgid "Goal" msgstr "Goal" -#: src/contributing/building.md:48 +#: src/contributing/building.md:53 msgid "Profile" msgstr "Profile" -#: src/contributing/building.md:50 +#: src/contributing/building.md:55 msgid "Fastest correctness feedback" msgstr "Corrección más rápida feedback" -#: src/contributing/building.md:50 +#: src/contributing/building.md:55 msgid "`cargo check -p perry`" msgstr "`cargo check -p perry`" -#: src/contributing/building.md:51 -msgid "Optimized **local** development" +#: src/contributing/building.md:56 +#, fuzzy +msgid "Fast, debuggable local development" msgstr "Optimizado **local** desarrollo" -#: src/contributing/building.md:51 +#: src/contributing/building.md:56 +#, fuzzy +msgid "`make build-dev` (or `cargo build --profile dev -p perry`)" +msgstr "`cargo build --profile perry-dev -p perry`" + +#: src/contributing/building.md:57 +#, fuzzy +msgid "Optimized local development / CI" +msgstr "Optimizado **local** desarrollo" + +#: src/contributing/building.md:57 msgid "`cargo build --profile perry-dev -p perry`" msgstr "`cargo build --profile perry-dev -p perry`" -#: src/contributing/building.md:51 +#: src/contributing/building.md:57 msgid "`perry-dev`" msgstr "`perry-dev`" -#: src/contributing/building.md:52 +#: src/contributing/building.md:58 +msgid "Fully optimized local production build" +msgstr "" + +#: src/contributing/building.md:58 +msgid "`make build-prod`" +msgstr "" + +#: src/contributing/building.md:58 src/contributing/building.md:60 +#, fuzzy +msgid "`prod`" +msgstr "`product`" + +#: src/contributing/building.md:59 msgid "Release-compatible build" msgstr "Construcción compatible con el lanzamiento" -#: src/contributing/building.md:52 +#: src/contributing/building.md:59 msgid "`cargo build --release`" msgstr "`cargo build --release`" -#: src/contributing/building.md:53 +#: src/contributing/building.md:60 msgid "Official distribution artifacts" msgstr "Artefactos de distribución oficial" -#: src/contributing/building.md:53 -msgid "`cargo build --profile dist ...`" +#: src/contributing/building.md:60 +#, fuzzy +msgid "`cargo build --profile prod ...`" msgstr "`cargo build --profile dist ...`" -#: src/contributing/building.md:53 -msgid "`dist`" -msgstr "`dist`" +#: src/contributing/building.md:62 +msgid "" +"**`dev`** keeps debug info and prioritizes compilation speed (`opt-level = " +"0`, `codegen-units = 256`, debug assertions on, and no LTO). Direct Cargo " +"builds use Cargo incremental compilation; `make build-dev` lets mbx manage " +"learned incremental state while preserving shared-cache reuse for matching " +"outputs. It keeps `panic = \"abort\"` so locally built Perry runtime " +"archives preserve the production exception transport contract. `make build-" +"dev` routes through Mr Boxington. Output is at `target/debug/perry`." +msgstr "" -#: src/contributing/building.md:55 +#: src/contributing/building.md:69 msgid "" "**`perry-dev`** inherits `release` but disables the expensive distribution " "settings (`lto = false`, `codegen-units = 16`, `opt-level = 1`, `incremental " @@ -87679,18 +91002,21 @@ msgstr "" "`incremental = true`, sin tira) por lo que el bucle edit/build se mantiene " "corto. La salida está en `target/perry-dev/perry`." -#: src/contributing/building.md:59 +#: src/contributing/building.md:73 +msgid "" +"**`prod`** inherits the optimized distribution settings (ThinLTO, `opt-level " +"= 3`, strip) and uses 16 codegen units to parallelize compilation. ThinLTO " +"still optimizes across those units. Release workflows and `make build-prod` " +"use Mr Boxington and write to `target/prod/`." +msgstr "" + +#: src/contributing/building.md:77 msgid "" -"**`dist`** mirrors `release` exactly (ThinLTO, `codegen-units = 1`, `opt-" -"level = 3`, strip) and is the explicit, named profile the release workflows " -"use for shipped artifacts. Output is at `target/dist/`." +"**`dist`** is retained as a compatibility profile with the same optimized " +"settings. New build commands should use `prod`." msgstr "" -"**`dist`** espejos `release` exactamente (ThinLTO, `codegen-units = 1`, `opt-" -"level = 3`, tira) y es el perfil explícito, llamado los flujos de trabajo de " -"liberación utilizados para artefactos enviados. La salida está en `target/" -"dist/`." -#: src/contributing/building.md:63 +#: src/contributing/building.md:80 msgid "" "After a `--timings` build, `scripts/cargo_timing_summary.py` prints the " "slowest units so build-time regressions are visible." @@ -87699,11 +91025,11 @@ msgstr "" "imprime las unidades más lentas para que las regresiones de tiempo de " "construcción sean visibles." -#: src/contributing/building.md:66 +#: src/contributing/building.md:83 msgid "Compiler cache for ephemeral worktrees" msgstr "Caché de compilación para árboles de trabajo efímeros" -#: src/contributing/building.md:68 +#: src/contributing/building.md:85 msgid "" "Short-lived worktrees and coding agents can opt into a compiler cache shared " "outside the repository. Install `sccache` in your user environment, then run " @@ -87714,16 +91040,16 @@ msgstr "" "`sccache` en su entorno de usuario, luego ejecute Cargo a través de la " "envoltura:" -#: src/contributing/building.md:74 +#: src/contributing/building.md:91 #, fuzzy msgid "# Slim, optimized developer CLI\n" msgstr "# Slim, desarrollador optimizado CLI" -#: src/contributing/building.md:80 +#: src/contributing/building.md:97 msgid "" "The wrapper disables Cargo incremental compilation because `sccache` cannot " -"cache incremental artifacts. It stores compiler objects under `" -"${XDG_CACHE_HOME:-$HOME/.cache}/perry/sccache` by default, not in the " +"cache incremental artifacts. It stores compiler objects under " +"`${XDG_CACHE_HOME:-$HOME/.cache}/perry/sccache` by default, not in the " "worktree; set `SCCACHE_DIR` or `SCCACHE_CACHE_SIZE` to override its `12G` " "cache policy. It does not install or configure `sccache` globally." msgstr "" @@ -87733,7 +91059,7 @@ msgstr "" "árbol de trabajo; establece `SCCACHE_DIR` o `SCCACHE_CACHE_SIZE` para anular " "su política de caché `12G`. No instala ni configura `sccache` globalmente." -#: src/contributing/building.md:86 +#: src/contributing/building.md:103 msgid "" "In a long-lived worktree, use ordinary `cargo` commands instead so the local " "incremental cache remains available. Cache benefit depends on the compiler, " @@ -87744,16 +91070,16 @@ msgstr "" "disponible. El beneficio de Cache depende del compilador, las banderas, las " "dependencias y cuánto trabajo previo puede reutilizar la cache." -#: src/contributing/building.md:90 +#: src/contributing/building.md:107 msgid "Build Specific Crates" msgstr "Compilar crates específicos" -#: src/contributing/building.md:93 +#: src/contributing/building.md:110 #, fuzzy msgid "# Runtime only (must rebuild stdlib too!)\n" msgstr "# Tiempo de ejecución solamente (debe reconstruir stdlib también!)" -#: src/contributing/building.md:95 +#: src/contributing/building.md:112 #, fuzzy msgid "" "# The .a static archives are emitted by separate wrapper crates (#5422), so " @@ -87762,7 +91088,7 @@ msgstr "" "# Los archivos estáticos .a son emitidos por cajas de envoltura separadas " "(#5422), así que un" -#: src/contributing/building.md:97 +#: src/contributing/building.md:114 #, fuzzy msgid "" "# explicitly when you need libperry_runtime.a / libperry_stdlib.a (e.g. to " @@ -87771,12 +91097,23 @@ msgstr "" "# explícitamente cuando necesita libperry_runtime.a / libperry_stdlib.a (e." "g. para enlazar" -#: src/contributing/building.md:101 +#: src/contributing/building.md:118 +msgid "" +"# `perry` refuses to link workspace archives that lack a GC-effects sidecar\n" +msgstr "" + +#: src/contributing/building.md:120 +msgid "" +"\"the runtime GC effects sidecar cannot speak for the archives this program\n" +"# links\"" +msgstr "" + +#: src/contributing/building.md:123 #, fuzzy msgid "# Codegen only\n" msgstr "# Codificadores únicamente" -#: src/contributing/building.md:106 +#: src/contributing/building.md:128 msgid "" "**Important**: When rebuilding `perry-runtime`, you must also rebuild `perry-" "stdlib` because `libperry_stdlib.a` embeds perry-runtime as a static " @@ -87786,11 +91123,11 @@ msgstr "" "`perry-stdlib` porque `libperry_stdlib.a` incrusta perry-runtime como " "dependencia estática." -#: src/contributing/building.md:108 +#: src/contributing/building.md:130 msgid "Slim developer CLI" msgstr "Slim desarrollador CLI" -#: src/contributing/building.md:110 +#: src/contributing/building.md:132 msgid "" "The default build is the full official CLI. For compiler work you can build " "a slimmer CLI that omits the publish / mobile / updater / native / audit " @@ -87801,7 +91138,7 @@ msgstr "" "publicar / móvil / actualizador / nativo / auditoría y los backends no " "nativos del códice (#5422):" -#: src/contributing/building.md:118 +#: src/contributing/building.md:140 msgid "" "`dev-cli` keeps `compile` / `run` / `check` / `types` / `cache` / `dev`. " "Disabled commands drop out of `--help`, and disabled `--target` backends " @@ -87815,16 +91152,16 @@ msgstr "" "``\". Véase `crates/perry/Cargo.toml` para la lista completa de " "características (`full-cli`, `publish-cli`, `backend-wasm`, ...)." -#: src/contributing/building.md:123 +#: src/contributing/building.md:145 msgid "Run Tests" msgstr "Ejecutar pruebas" -#: src/contributing/building.md:126 +#: src/contributing/building.md:148 #, fuzzy msgid "# Product unit targets\n" msgstr "# Objetivos de las unidades de producto" -#: src/contributing/building.md:128 +#: src/contributing/building.md:150 #, fuzzy msgid "" "# Inspect the nightly CI test scope (all Linux-compatible test crates)\n" @@ -87832,42 +91169,42 @@ msgstr "" "# Inspeccione el alcance de prueba de IC nocturno (todas las cajas de prueba " "compatibles con Linux)" -#: src/contributing/building.md:131 +#: src/contributing/building.md:153 #, fuzzy msgid "# Specific crate\n" msgstr "# Caja específica" -#: src/contributing/building.md:137 +#: src/contributing/building.md:159 msgid "Compile and Run TypeScript" msgstr "Compilar y ejecutar TypeScript" -#: src/contributing/building.md:140 +#: src/contributing/building.md:162 #, fuzzy msgid "# Compile a TypeScript file\n" msgstr "# Compilar un archivo TypeScript" -#: src/contributing/building.md:143 +#: src/contributing/building.md:165 #, fuzzy msgid "# Debug: print HIR\n" msgstr "# Depuración: imprimir HIR" -#: src/contributing/building.md:148 +#: src/contributing/building.md:170 msgid "Development Workflow" msgstr "Flujo de trabajo de desarrollo" -#: src/contributing/building.md:150 +#: src/contributing/building.md:172 msgid "Make changes to the relevant crate" msgstr "Realiza cambios en el crate correspondiente" -#: src/contributing/building.md:151 +#: src/contributing/building.md:173 msgid "`cargo check -p perry` for fast product feedback" msgstr "`cargo check -p perry` para producto rápido feedback" -#: src/contributing/building.md:152 +#: src/contributing/building.md:174 msgid "Run tests for the crates affected by the change" msgstr "Realizar pruebas para las cajas afectadas por el cambio" -#: src/contributing/building.md:153 +#: src/contributing/building.md:175 msgid "" "Test with a real TypeScript file: `cargo run --release -- test.ts -o test " "&& ./test`" @@ -87875,16 +91212,124 @@ msgstr "" "Prueba con un archivo TypeScript real: `cargo run --release -- test.ts -o " "test && ./test`" -#: src/contributing/building.md:181 +#: src/contributing/building.md:203 msgid "[Architecture](architecture.md) — Crate map and pipeline overview" msgstr "" "[Arquitectura](architecture.md) — Mapa de crates y descripción del pipeline" -#: src/contributing/building.md:182 -msgid "See `CLAUDE.md` for detailed implementation notes and pitfalls" +#: src/contributing/building.md:204 +#, fuzzy +msgid "See `AGENTS.md` for implementation pitfalls" msgstr "" "Consulta `CLAUDE.md` para notas detalladas de implementación y advertencias" +#: src/contributing/building.md:206 +#, fuzzy +msgid "Development debug information" +msgstr "Compilaciones de desarrollo" + +#: src/contributing/building.md:208 +msgid "" +"`dev` (including tests) and `perry-dev` use `line-tables-only` debug " +"information to retain file/line backtraces while reducing build storage and " +"linking work. Variable inspection in a debugger requires an explicit local " +"override, such as `CARGO_PROFILE_DEV_DEBUG=2 make build-dev`. Production " +"stripping is unchanged." +msgstr "" + +#: src/contributing/building.md:213 +msgid "" +"The policy is checked by `python3 scripts/check_dev_debug.py` in PR lint." +msgstr "" + +#: src/contributing/building.md:215 +msgid "Cached Linux linking" +msgstr "" + +#: src/contributing/building.md:217 +msgid "" +"Use `make mbx-deps` and the cached Make targets for local builds. Linux GNU " +"x86_64 and AArch64 targets use mold 2.42.0 via `.mbx.toml`; install `clang` " +"on the build host. MBX downloads the pinned mold release and verifies its " +"GitHub SHA-256 digest. macOS, Windows, Android and custom musl linker paths " +"keep the system linker. The core-runtime and Linux release scripts require " +"MBX instead of silently bypassing the cache when it is missing." +msgstr "" + +#: src/contributing/building.md:224 +msgid "" +"Use `MBX_LINKER=system` explicitly for linker bisection. Do not replace " +"`RUSTFLAGS`: Perry requires the unwind-table and x86_64 frame-pointer flags " +"in `.cargo/config.toml`. `share_workspace_root` stays false so panic " +"locations and debug paths remain real paths; shared outputs may retain their " +"source checkout paths. Keep package and feature sets consistent across " +"comparisons." +msgstr "" + +#: src/contributing/building.md:230 +msgid "" +"See [MBX managed linkers](https://mr-boxington.jdx.dev/linkers) and [mold]" +"(https://github.com/rui314/mold)." +msgstr "" + +#: src/contributing/building.md:233 +msgid "" +"For dedicated Linux agent hosts, use [compressed ZFS build storage](build-" +"storage.md) and `make build-agent` to check storage before building." +msgstr "" + +#: src/contributing/build-storage.md:3 +msgid "" +"Repeated Rust builds need both a bounded MBX cache and compressed build " +"storage. Dedicated Linux agent hosts use `make build-agent`, which refuses a " +"non-ZFS, uncompressed, unbounded or deduplicated build dataset before " +"invoking MBX. Ordinary macOS/Windows contributors continue using `make build-" +"dev`." +msgstr "" + +#: src/contributing/build-storage.md:8 +msgid "" +"Provision a dedicated dataset in an **existing** pool as an administrator. " +"Choose the pool, mountpoint and quota for the host; this example reserves a " +"200 GiB dataset quota. It does not create or reformat a pool." +msgstr "" + +#: src/contributing/build-storage.md:23 +msgid "" +"`zstd` (or an explicit `zstd-N` level) is also accepted. Keep store and " +"managed targets on the same dataset so eligible clones need not cross a " +"filesystem boundary. Use OpenZFS with block cloning enabled if reflink reuse " +"is required; compression alone does not prove cloning is available. Check " +"`zpool get feature@block_cloning tank` and the host's `/sys/module/zfs/" +"parameters/zfs_bclone_enabled`. The storage checker verifies dataset " +"placement and properties, not kernel reflink support." +msgstr "" + +#: src/contributing/build-storage.md:31 +msgid "" +"Keep `CARGO_TARGET_DIR` and `CARGO_BUILD_BUILD_DIR` unset for this entry " +"point: MBX owns target placement. Set machine-specific cleanup budgets with " +"`mbx settings set gc.max_total_size 150GiB`, adjusted below the dataset " +"quota and available capacity. Logical and physical usage differ under " +"compression; monitor `zfs list -o name,used,available,logicalused," +"compressratio` and preview cleanup with `mbx gc --dry-run`. Do not turn on " +"block deduplication to chase identical artifacts; use MBX and compression." +msgstr "" + +#: src/contributing/build-storage.md:39 +msgid "" +"The PR lint job tests the storage rejection paths without requiring a ZFS " +"runner. Actual host provisioning remains an administrator operation." +msgstr "" + +#: src/contributing/build-storage.md:42 +msgid "" +"Sources: [Infrastructure for Agentic Rust](https://blog.brokk.ai/" +"infrastructure-for-agentic-rust/), [MBX configuration](https://mr-boxington." +"jdx.dev/configuration), and [OpenZFS dataset properties](https://openzfs." +"github.io/openzfs-docs/man/master/7/zfsprops.7.html)." +msgstr "" + #: src/contributing/releasing.md:3 msgid "" "Maintainer runbook. Every release, including a patch, is gated on the exact " @@ -87949,15 +91394,15 @@ msgstr "" "la respuesta, pero no lo hacen" #: src/contributing/releasing.md:38 +#, fuzzy msgid "" "Prepare the release candidate. Perry's normal merges already advance the " "workspace version, so use the version at the chosen commit; do not add " "another bump merely to release it. The version must exist in the source " "before builds start because it is embedded in Cargo and npm artifacts. " -"`Cargo.toml` and `CLAUDE.md` must agree, release-note fragments must exist, " -"and the Git tag must not exist locally or on origin. If that version was " -"already tagged, land a new version bump through the normal merge process " -"first." +"Release-note fragments must exist, and the Git tag must not exist locally or " +"on origin. If that version was already tagged, land a new version bump " +"through the normal merge process first." msgstr "" "Preparen al candidato de liberación. Las fusiones normales de Perry ya " "adelantan la versión del espacio de trabajo, así que usa la versión en el " @@ -87983,24 +91428,20 @@ msgid "'^version'" msgstr "«^versión»" #: src/contributing/releasing.md:50 -msgid "\"**Current Version:** $VERSION\"" -msgstr "\"**Versión actual:** $VERSION\"" - -#: src/contributing/releasing.md:51 msgid "'[0-9]*.md'" msgstr "«[0-9]*.md»" -#: src/contributing/releasing.md:52 +#: src/contributing/releasing.md:51 #, fuzzy msgid "\"refs/tags/v$VERSION\" # must print nothing\n" msgstr "\"refs/tags/v$VERSION\" # no debe imprimir nada" -#: src/contributing/releasing.md:53 src/contributing/releasing.md:54 -#: src/contributing/releasing.md:60 src/contributing/releasing.md:61 +#: src/contributing/releasing.md:52 src/contributing/releasing.md:53 +#: src/contributing/releasing.md:59 src/contributing/releasing.md:60 msgid "\"release/v$VERSION\"" msgstr "\"release/v$VERSION\"" -#: src/contributing/releasing.md:57 +#: src/contributing/releasing.md:56 msgid "" "Run the two exact-SHA CI gates on that pinned branch and wait for both to " "pass:" @@ -88008,7 +91449,7 @@ msgstr "" "Ejecute las dos puertas exactas de la SHA CI en esa rama clavada y espere a " "que ambas pasen:" -#: src/contributing/releasing.md:64 +#: src/contributing/releasing.md:63 msgid "" "Freeze that candidate SHA. Unrelated merges to `main` after the branch is " "cut do not invalidate successful gates and do not require another test " @@ -88020,7 +91461,7 @@ msgstr "" "de prueba. Actualizar el candidato sólo para una corrección de bloqueo de la " "versión o un cambio de versión requerido." -#: src/contributing/releasing.md:68 +#: src/contributing/releasing.md:67 msgid "" "Then use the npm-first pipeline. npm publication happens only in GitHub " "Actions through Trusted Publisher/OIDC. There is no `npm login`, npm account " @@ -88035,7 +91476,7 @@ msgstr "" "GitHub a dispatch/watch el flujo de trabajo y el registro anónimo lee para " "verificar los bytes publicados." -#: src/contributing/releasing.md:74 +#: src/contributing/releasing.md:73 msgid "" "Socket is an optional pre-publish tarball scan, not an npm credential. When " "enabled, Actions submits each of the exact nine `.tgz` files as a temporary " @@ -88055,7 +91496,7 @@ msgstr "" "`--socket-scan`; el flujo de trabajo registra un recibo omitido explícito y " "continúa." -#: src/contributing/releasing.md:82 +#: src/contributing/releasing.md:81 msgid "" "To enable the gate later, store `SOCKET_API_TOKEN` as a repository or " "organization Actions secret with permission to create/read full scans, read " @@ -88069,7 +91510,7 @@ msgstr "" "se requiere ningún entorno GitHub. El valor se mantiene únicamente en GitHub " "y nunca debe comprometerse o exportarse localmente:" -#: src/contributing/releasing.md:91 +#: src/contributing/releasing.md:90 msgid "" "Before the first nine-package release, an npm organization owner must " "confirm that every name in `scripts/publish/constants.mts` exists and has " @@ -88079,27 +91520,27 @@ msgstr "" "organización npm debe confirmar que cada nombre en `scripts/publish/" "constants.mts` existe y tiene esta configuración de Trusted Publisher:" -#: src/contributing/releasing.md:95 +#: src/contributing/releasing.md:94 msgid "provider: GitHub Actions" msgstr "proveedor: GitHub Acciones" -#: src/contributing/releasing.md:96 +#: src/contributing/releasing.md:95 msgid "organization/repository: `PerryTS/perry`" msgstr "organization/repository: `PerryTS/perry`" -#: src/contributing/releasing.md:97 +#: src/contributing/releasing.md:96 msgid "workflow filename: `release-packages.yml`" msgstr "nombre de archivo de flujo de trabajo: `release-packages.yml`" -#: src/contributing/releasing.md:98 +#: src/contributing/releasing.md:97 msgid "environment: none" msgstr "medio ambiente: ninguno" -#: src/contributing/releasing.md:99 +#: src/contributing/releasing.md:98 msgid "allowed action: **`npm publish`**" msgstr "medidas permitidas: **`npm publish`**" -#: src/contributing/releasing.md:101 +#: src/contributing/releasing.md:100 #, fuzzy msgid "" "npm permits only one trusted publisher per package. The canonical identity " @@ -88114,11 +91555,11 @@ msgstr "" "segundo editor y no añada un nombre de entorno que los otros paquetes no " "usen." -#: src/contributing/releasing.md:107 +#: src/contributing/releasing.md:106 msgid "In particular, verify the ARM64 Windows package:" msgstr "En particular, comprobar el paquete ARM64 Windows:" -#: src/contributing/releasing.md:113 +#: src/contributing/releasing.md:112 msgid "" "If that returns `E404`, stop: npm does not allow a Trusted Publisher to be " "configured for a package that does not exist, so OIDC cannot perform its " @@ -88135,19 +91576,43 @@ msgstr "" "Trusted Publisher de arriba. El oleoducto de liberación rechaza " "intencionalmente un conjunto parcial." -#: src/contributing/releasing.md:120 +#: src/contributing/releasing.md:119 msgid "" -"# one Release Packages run: exact-SHA gates/builds,\n" +"# one Publish to npm / GitHub Release run: exact-SHA gates/builds,\n" " # publish + verify all 9 via OIDC, then create\n" " # v0.x.y + the GitHub Release last\n" msgstr "" -#: src/contributing/releasing.md:125 +#: src/contributing/releasing.md:124 #, fuzzy msgid "# inspect the commit/run/package/Socket receipt\n" msgstr "# inspeccionar el recibo commit/run/package/Socket" -#: src/contributing/releasing.md:128 +#: src/contributing/releasing.md:127 +msgid "Automated nightly prerelease" +msgstr "" + +#: src/contributing/releasing.md:129 +msgid "" +"`release-packages.yml` runs nightly at 06:37 UTC from the latest `main` " +"commit. It builds current binaries for testers without waiting for stable " +"release gates. To request an additional prerelease from a pushed branch, run:" +msgstr "" + +#: src/contributing/releasing.md:137 +msgid "" +"The automated and on-demand runs build host and cross-platform release " +"archives from an exact commit and publish them as a GitHub prerelease named " +"`nightly-v-YYYYMMDD-ra-`. The compiler " +"keeps its Cargo workspace version; `nightly` is a separate release channel, " +"not a version suffix. They do not publish npm packages or update Homebrew, " +"APT, winget, or build workers. They skip the full-suite and simulator gates, " +"so treat these downloads as preview builds. The manual command requires `gh` " +"authentication and a pushed branch whose tip matches the checkout. Find " +"builds under [GitHub prereleases](https://github.com/PerryTS/perry/releases)." +msgstr "" + +#: src/contributing/releasing.md:147 msgid "" "Publication sends the eight platform packages first and the wrapper last. If " "a network or registry error interrupts it before the tag exists, rerun the " @@ -88162,7 +91627,7 @@ msgstr "" "sólo cuando su shasum de registro inmutable coincide con el tarball exacto " "de CI; de lo contrario se detiene y requiere una nueva versión." -#: src/contributing/releasing.md:134 +#: src/contributing/releasing.md:153 msgid "" "If the accumulated changelog fragments exceed the inline release-note " "budget, the publisher keeps the GitHub Release body concise and uploads the " @@ -88174,7 +91639,7 @@ msgstr "" "Release conciso y carga las notas completas como el activo checksummed " "`release-notes-full.md`. Ningún fragmento ha caído." -#: src/contributing/releasing.md:138 +#: src/contributing/releasing.md:157 msgid "" "Do not run `npm login`, `git tag`, or manually publish a GitHub Release. The " "local command dispatches `release-packages.yml` with `cut_release=true`; " @@ -88187,11 +91652,11 @@ msgstr "" "que las nueve versiones de npm sean públicas y sus shasums de registro " "coincidan con los tarballs CI exactos." -#: src/contributing/releasing.md:143 +#: src/contributing/releasing.md:162 msgid "2. Additional major-release verification" msgstr "2. Verificación adicional de las liberaciones importantes" -#: src/contributing/releasing.md:145 +#: src/contributing/releasing.md:164 msgid "" "The automated gates above apply to every release. For a major/minor release, " "also perform the product-level platform checks that are not fully " @@ -88202,72 +91667,72 @@ msgstr "" "nivel de producto que no están plenamente representadas por las suites " "automatizadas:" -#: src/contributing/releasing.md:149 +#: src/contributing/releasing.md:168 msgid "What to run" msgstr "Qué correr" -#: src/contributing/releasing.md:149 +#: src/contributing/releasing.md:168 msgid "Runs in CI?" msgstr "¿Se ejecuta en CI?" -#: src/contributing/releasing.md:151 +#: src/contributing/releasing.md:170 msgid "**macOS** (arm64 + x86_64)" msgstr "**macOS** (arma64 + x86_64)" -#: src/contributing/releasing.md:151 src/contributing/releasing.md:154 +#: src/contributing/releasing.md:170 src/contributing/releasing.md:173 msgid "Smoke-test installed archives on both architectures" msgstr "Archivos instalados de prueba de humo en ambas arquitecturas" -#: src/contributing/releasing.md:151 +#: src/contributing/releasing.md:170 msgid "Builds in release matrix; full tests on macOS arm64" msgstr "Construye en matriz de liberación; pruebas completas en brazo macOS64" -#: src/contributing/releasing.md:152 +#: src/contributing/releasing.md:171 msgid "**Linux glibc** (x86_64 + aarch64)" msgstr "**Linux glibc** (x86_64 + aarch64)" -#: src/contributing/releasing.md:152 +#: src/contributing/releasing.md:171 msgid "Smoke-test the packaged binary on the oldest supported glibc" msgstr "" "Prueba de humo el binario empaquetado en el glibc más antiguo soportado" -#: src/contributing/releasing.md:152 src/contributing/releasing.md:153 +#: src/contributing/releasing.md:171 src/contributing/releasing.md:172 msgid "Builds in release matrix" msgstr "Construye en la matriz de liberación" -#: src/contributing/releasing.md:153 +#: src/contributing/releasing.md:172 msgid "**Linux musl** (x86_64 + aarch64)" msgstr "**Linux musl** (x86_64 + aarch64)" -#: src/contributing/releasing.md:153 +#: src/contributing/releasing.md:172 msgid "Spot-check a compiled `hello.ts` on Alpine" msgstr "Comprobación puntual de una `hello.ts` compilada en Alpine" -#: src/contributing/releasing.md:154 +#: src/contributing/releasing.md:173 msgid "**Windows** (x86_64 + ARM64 MSVC)" msgstr "**Windows** (x86_64 + ARM64 MSVC)" -#: src/contributing/releasing.md:154 +#: src/contributing/releasing.md:173 msgid "Build plus full-tier Windows checks" msgstr "Construir más controles Windows de nivel completo" -#: src/contributing/releasing.md:155 +#: src/contributing/releasing.md:174 msgid "**iOS Simulator**" msgstr "**Simulador iOS**" -#: src/contributing/releasing.md:155 +#: src/contributing/releasing.md:174 msgid "Exercise a representative app with `xcrun simctl`" msgstr "Ejercicio de una aplicación representativa con `xcrun simctl`" -#: src/contributing/releasing.md:155 +#: src/contributing/releasing.md:174 msgid "Required `simctl-tests.yml`" msgstr "`simctl-tests.yml` requerido" -#: src/contributing/releasing.md:156 +#: src/contributing/releasing.md:175 msgid "**visionOS Simulator**" msgstr "**Simulador visionOS**" -#: src/contributing/releasing.md:156 +#: src/contributing/releasing.md:175 msgid "" "`perry compile --target visionos-simulator ...`, launch in Apple Vision Pro " "Simulator" @@ -88275,23 +91740,23 @@ msgstr "" "`perry compile --target visionos-simulator ...`, lanzamiento en Apple Vision " "Pro Simulator" -#: src/contributing/releasing.md:156 src/contributing/releasing.md:157 +#: src/contributing/releasing.md:175 src/contributing/releasing.md:176 msgid "No (Xcode required)" msgstr "No (se requiere código X)" -#: src/contributing/releasing.md:157 +#: src/contributing/releasing.md:176 msgid "**tvOS Simulator**" msgstr "**Simulador tvOS**" -#: src/contributing/releasing.md:157 +#: src/contributing/releasing.md:176 msgid "`perry compile --target tvos-simulator ...`, launch in Simulator" msgstr "`perry compile --target tvos-simulator ...`, lanzamiento en Simulador" -#: src/contributing/releasing.md:158 +#: src/contributing/releasing.md:177 msgid "**watchOS Simulator**" msgstr "**Simulador watchOS**" -#: src/contributing/releasing.md:158 +#: src/contributing/releasing.md:177 msgid "" "`perry compile --target watchos-simulator ...` — requires `rustup toolchain " "install nightly` + `cargo +nightly -Zbuild-std`" @@ -88299,11 +91764,11 @@ msgstr "" "`perry compile --target watchos-simulator ...` — requiere `rustup toolchain " "install nightly` + `cargo +nightly -Zbuild-std`" -#: src/contributing/releasing.md:158 +#: src/contributing/releasing.md:177 msgid "No (Xcode + nightly required)" msgstr "No (Xcode + por noche requerido)" -#: src/contributing/releasing.md:159 +#: src/contributing/releasing.md:178 msgid "" "`perry compile --target android examples/widget_demo.ts`; install APK on " "emulator" @@ -88311,15 +91776,15 @@ msgstr "" "`perry compile --target android examples/widget_demo.ts`; instale APK en el " "emulador" -#: src/contributing/releasing.md:159 +#: src/contributing/releasing.md:178 msgid "No (NDK required)" msgstr "No (NDK requerido)" -#: src/contributing/releasing.md:160 +#: src/contributing/releasing.md:179 msgid "**Web / WASM**" msgstr "**Web / WASM**" -#: src/contributing/releasing.md:160 +#: src/contributing/releasing.md:179 msgid "" "`perry compile --target web examples/wasm_ui_demo.ts`, open `out.html` in a " "browser" @@ -88327,19 +91792,19 @@ msgstr "" "`perry compile --target web examples/wasm_ui_demo.ts`, abrir `out.html` en " "un navegador" -#: src/contributing/releasing.md:160 src/contributing/releasing.md:161 +#: src/contributing/releasing.md:179 src/contributing/releasing.md:180 msgid "No" msgstr "No" -#: src/contributing/releasing.md:161 +#: src/contributing/releasing.md:180 msgid "**Home-screen widgets**" msgstr "**widgets de pantalla de inicio**" -#: src/contributing/releasing.md:161 +#: src/contributing/releasing.md:180 msgid "`perry compile --target widgetkit ... && perry publish ios`" msgstr "`perry compile --target widgetkit ... && perry publish ios`" -#: src/contributing/releasing.md:163 +#: src/contributing/releasing.md:182 msgid "" "Record the manual results in the release issue. These checks supplement CI; " "they never waive a red required workflow." @@ -88348,15 +91813,15 @@ msgstr "" "comprobaciones complementan a CI; nunca renuncian a un flujo de trabajo rojo " "requerido." -#: src/contributing/releasing.md:166 +#: src/contributing/releasing.md:185 msgid "2a. Simulator-run recipe (iOS / tvOS)" msgstr "2a. Receta de ejecución del simulador (iOS / tvOS)" -#: src/contributing/releasing.md:168 +#: src/contributing/releasing.md:187 msgid "" "`perry-ui-ios` and `perry-ui-tvos` honor `PERRY_UI_TEST_MODE=1` — when set, " -"the app renders one frame, optionally writes a screenshot to `" -"$PERRY_UI_SCREENSHOT_PATH`, and exits cleanly. Combine with `xcrun simctl` " +"the app renders one frame, optionally writes a screenshot to " +"`$PERRY_UI_SCREENSHOT_PATH`, and exits cleanly. Combine with `xcrun simctl` " "to verify a doc-example runs without a human:" msgstr "" "`perry-ui-ios` y `perry-ui-tvos` honran a `PERRY_UI_TEST_MODE=1` — cuando se " @@ -88365,56 +91830,57 @@ msgstr "" "Combinar con `xcrun simctl` para verificar un ejemplo doc corre sin un " "humano:" -#: src/contributing/releasing.md:174 +#: src/contributing/releasing.md:193 #, fuzzy msgid "# Compile for the simulator\n" msgstr "# Compilación para el simulador" -#: src/contributing/releasing.md:176 +#: src/contributing/releasing.md:195 #, fuzzy msgid "# Boot a device (one-time; reuse the UDID across runs)\n" msgstr "" "# Arranque un dispositivo (una vez; reutilice el UDID a través de las " "carreras)" -#: src/contributing/releasing.md:178 +#: src/contributing/releasing.md:197 msgid "\"iPhone 15\"" msgstr "\"iPhone 15\"" -#: src/contributing/releasing.md:180 +#: src/contributing/releasing.md:199 #, fuzzy msgid "# Install + launch with test mode\n" msgstr "# Instalar + lanzamiento con modo de prueba" -#: src/contributing/releasing.md:191 +#: src/contributing/releasing.md:210 msgid "" "Same recipe works for `tvos-simulator` + `\"Apple TV\"` device. On watchOS " "the Rust Tier-3 toolchain requires `+nightly -Zbuild-std` — see the `watchos-" "simulator` row in the matrix above." msgstr "" -"La misma receta funciona para el dispositivo `tvos-simulator` + `\"Apple TV" -"\"`. En watchOS la cadena de herramientas Rust Tier-3 requiere `+nightly -" +"La misma receta funciona para el dispositivo `tvos-simulator` + `\"Apple " +"TV\"`. En watchOS la cadena de herramientas Rust Tier-3 requiere `+nightly -" "Zbuild-std` — vea la fila `watchos-simulator` en la matriz anterior." -#: src/contributing/releasing.md:195 +#: src/contributing/releasing.md:214 msgid "3. What CI does on the release" msgstr "3. Lo que hace CI en la versión" -#: src/contributing/releasing.md:197 +#: src/contributing/releasing.md:216 +#, fuzzy msgid "" -"The `Release Packages` workflow (`.github/workflows/release-packages.yml`) " -"triggers on a published GitHub Release or manual `workflow_dispatch`. Matrix " -"runners build:" +"The `Publish to npm / GitHub Release` workflow (`.github/workflows/release-" +"packages.yml`) triggers on a published GitHub Release or manual " +"`workflow_dispatch`. Matrix runners build:" msgstr "" "El flujo de trabajo `Release Packages` (`.github/workflows/release-packages." "yml`) se activa en una versión GitHub publicada o manual " "`workflow_dispatch`. Los corredores matriciales construyen:" -#: src/contributing/releasing.md:201 +#: src/contributing/releasing.md:220 msgid "`macos-14` / `macos-15` — arm64 + x86_64 Darwin binaries" msgstr "`macos-14` / `macos-15` — binarios de Darwin de arm64 + x86_64" -#: src/contributing/releasing.md:202 +#: src/contributing/releasing.md:221 msgid "" "`ubuntu-24.04` / `ubuntu-24.04-arm` — glibc x86_64 + aarch64; the compiler, " "runtime, stdlib and extension archives build inside architecture-matched " @@ -88428,22 +91894,22 @@ msgstr "" "host noble y se añade después (plano del compilador glibc 2.31; mantenga " "`GLIBC_BUILD_FLOOR` en `npm/perry/bin/detect.cjs` sincronizado)" -#: src/contributing/releasing.md:207 +#: src/contributing/releasing.md:226 msgid "" "`ubuntu-24.04` / `ubuntu-24.04-arm` — musl x86_64 + aarch64 (fully static)" msgstr "" "`ubuntu-24.04` / `ubuntu-24.04-arm` — muslo x86_64 + aarch64 (totalmente " "estático)" -#: src/contributing/releasing.md:208 +#: src/contributing/releasing.md:227 msgid "`windows-latest` / `windows-11-arm` — x86_64 + ARM64 MSVC" msgstr "`windows-latest` / `windows-11-arm` — x86_64 + ARM64 MSVC" -#: src/contributing/releasing.md:210 +#: src/contributing/releasing.md:229 msgid "Artifacts are published to:" msgstr "Los artículos se publican en:" -#: src/contributing/releasing.md:212 +#: src/contributing/releasing.md:231 msgid "" "**npm** (`@perryts/perry` + eight per-platform optional-deps) — via OIDC " "Trusted Publisher" @@ -88451,26 +91917,26 @@ msgstr "" "**npm** (`@perryts/perry` + ocho unidades opcionales por plataforma) — a " "través de OIDC Trusted Publisher" -#: src/contributing/releasing.md:214 +#: src/contributing/releasing.md:233 msgid "**Homebrew** — formula auto-update" msgstr "**Homebrew** — fórmula de actualización automática" -#: src/contributing/releasing.md:215 +#: src/contributing/releasing.md:234 msgid "**APT** (Debian/Ubuntu) — GPG-signed repository" msgstr "**APT** (Debian/Ubuntu) — Depósito firmado por GPG" -#: src/contributing/releasing.md:216 +#: src/contributing/releasing.md:235 msgid "**winget** — manifest auto-update" msgstr "**ala** — actualización automática manifiesta" -#: src/contributing/releasing.md:217 +#: src/contributing/releasing.md:236 msgid "" "**hub.perryts.com** — worker notification so cloud build workers refresh" msgstr "" "**hub.perryts.com** — notificación del trabajador para que los trabajadores " "de la nube de construcción refresquen" -#: src/contributing/releasing.md:219 +#: src/contributing/releasing.md:238 msgid "" "In the canonical npm-first flow, any failing host or cross build prevents " "npm publication. The wrapper is not published when a platform package fails. " @@ -88482,11 +91948,11 @@ msgstr "" "de plataforma. Una vez que una versión se haya hecho pública, prepárese con " "una nueva versión de parche en lugar de modificar una etiqueta existente." -#: src/contributing/releasing.md:224 +#: src/contributing/releasing.md:243 msgid "4. Release gates (what blocks a release)" msgstr "4. Puertas de liberación (lo que bloquea una liberación)" -#: src/contributing/releasing.md:226 +#: src/contributing/releasing.md:245 msgid "" "`release-packages.yml` rejects a cut release unless `test.yml` has a " "successful **`full-suite-gate`** and `simctl-tests.yml` has a successful run " @@ -88499,7 +91965,7 @@ msgstr "" "main cuenta. Véase [Niveles de IC](../testing/ci-tiers.md). El nivel " "completo es:" -#: src/contributing/releasing.md:231 +#: src/contributing/releasing.md:250 msgid "" "everything the PR gate and the post-merge sweep run (`lint`, `check`, " "`warnings`, `cargo test --workspace`, the gap suite, `gc-stress`, Windows " @@ -88512,7 +91978,7 @@ msgstr "" "computer gates, `repsel-census`, `harmonyos-smoke`, `security-audit`), más " "`binary-size` y" -#: src/contributing/releasing.md:235 +#: src/contributing/releasing.md:254 msgid "" "`parity` — must clear the threshold in `test-parity/threshold.json` and add " "no new / stale known-failure entries" @@ -88520,7 +91986,7 @@ msgstr "" "`parity` — debe borrar el umbral de `test-parity/threshold.json` y no añadir " "entradas nuevas / rancios conocidas-fracaso" -#: src/contributing/releasing.md:237 +#: src/contributing/releasing.md:256 msgid "" "`compile-smoke` — must compile every file under `test-files/`, plus the UI " "styling matrix, Fastify integration and memory-stability tests" @@ -88529,7 +91995,7 @@ msgstr "" "la matriz de estilo de la interfaz de usuario, acelerar la integración y " "pruebas de estabilidad de memoria" -#: src/contributing/releasing.md:239 +#: src/contributing/releasing.md:258 msgid "" "the gap suite in its 8-shard **auto-optimize** mode (the PR/sweep tiers use " "the prebuilt-runtime `fast` mode)" @@ -88537,7 +92003,7 @@ msgstr "" "la suite gap en su 8-shard **auto-optimizar** modo (los niveles PR/sweep " "utilizan el modo `fast` preconstruido)" -#: src/contributing/releasing.md:241 +#: src/contributing/releasing.md:260 msgid "" "`doc-tests` (macOS + Windows) — must compile + run every example under `docs/" "examples/`" @@ -88545,7 +92011,7 @@ msgstr "" "`doc-tests` (macOS + Windows) — debe compilar + ejecutar cada ejemplo bajo " "`docs/examples/`" -#: src/contributing/releasing.md:243 +#: src/contributing/releasing.md:262 msgid "" "the package smokes (`drizzle-mysql-smoke`, `ink-link-smoke`, `effect-basic-" "smoke`) and `native-abi-evidence-packet`" @@ -88553,7 +92019,7 @@ msgstr "" "el envase fuma (`drizzle-mysql-smoke`, `ink-link-smoke`, `effect-basic-" "smoke`) y `native-abi-evidence-packet`" -#: src/contributing/releasing.md:245 +#: src/contributing/releasing.md:264 msgid "" "`full-suite-gate`, the fan-in which proves every required full-tier job " "above succeeded" @@ -88561,7 +92027,7 @@ msgstr "" "`full-suite-gate`, el ventilador que demuestra cada trabajo completo " "requerido por encima de succeeded" -#: src/contributing/releasing.md:248 +#: src/contributing/releasing.md:267 msgid "" "None of these carries `continue-on-error` any more: a red suite in the full " "tier blocks the release. If a suite is red for a reason that is not the " @@ -88575,7 +92041,7 @@ msgstr "" "problema y conscientemente volver a añadir un nivel de trabajo `continue-on-" "error: true` con ese número de edición) — no publicar más allá de él." -#: src/contributing/releasing.md:254 +#: src/contributing/releasing.md:273 msgid "" "The release workflow then requires every host/cross package build, all nine " "exact npm publishes, and public-registry sha1 verification. Socket is an " @@ -88592,11 +92058,11 @@ msgstr "" "distribución: monitorearlos después de que se crea la versión GitHub, pero " "no los confunda con puertas de preetiqueta." -#: src/contributing/releasing.md:261 +#: src/contributing/releasing.md:280 msgid "4a. What tells you a release is overdue" msgstr "4a. Lo que te dice que una liberación está vencida" -#: src/contributing/releasing.md:263 +#: src/contributing/releasing.md:282 msgid "" "Nothing in the sections above fires if a release simply never happens. That " "is [\\#7491](https://github.com/PerryTS/perry/issues/7491): npm served a " @@ -88613,7 +92079,7 @@ msgstr "" "`npm install @perryts/perry` te da. El único detector era un usuario leyendo " "la pestaña de versiones." -#: src/contributing/releasing.md:270 +#: src/contributing/releasing.md:289 msgid "" "`npm-publish-freshness.yml` runs daily and calls `scripts/" "check_npm_publish_freshness.py`, which reads the full packument for every " @@ -88623,27 +92089,27 @@ msgstr "" "check_npm_publish_freshness.py`, que lee el paquete completo para cada " "paquete bajo `npm/` y lo compara con `[workspace.package] version`:" -#: src/contributing/releasing.md:274 +#: src/contributing/releasing.md:293 msgid "signal" msgstr "signal" -#: src/contributing/releasing.md:274 +#: src/contributing/releasing.md:293 msgid "budget" msgstr "budget" -#: src/contributing/releasing.md:274 +#: src/contributing/releasing.md:293 msgid "why" msgstr "why" -#: src/contributing/releasing.md:276 +#: src/contributing/releasing.md:295 msgid "age of the published `latest`" msgstr "Edad de la publicación de `latest`" -#: src/contributing/releasing.md:276 +#: src/contributing/releasing.md:295 msgid "14 days" msgstr "14 días" -#: src/contributing/releasing.md:276 +#: src/contributing/releasing.md:295 msgid "" "counted **only while the tree is ahead**, so a quiet week with nothing to " "release is not a failure. This is the signal that would have caught #7491 on " @@ -88653,15 +92119,15 @@ msgstr "" "tranquila sin nada que liberar no es un fracaso. Esta es la señal que habría " "cogido el número 7491 el día 15." -#: src/contributing/releasing.md:277 +#: src/contributing/releasing.md:296 msgid "patch distance" msgstr "distancia del parche" -#: src/contributing/releasing.md:277 +#: src/contributing/releasing.md:296 msgid "500" msgstr "500" -#: src/contributing/releasing.md:277 +#: src/contributing/releasing.md:296 msgid "" "every merge bumps the workspace patch, so this is a commit count in " "disguise. A backstop for a cadence spike inside an unexpired age budget — " @@ -88672,11 +92138,11 @@ msgstr "" "dentro de un presupuesto de edad no caducado — no una regla de la cadena de " "liberación." -#: src/contributing/releasing.md:278 +#: src/contributing/releasing.md:297 msgid "platform packages match the launcher" msgstr "los paquetes de la plataforma coinciden con el lanzador" -#: src/contributing/releasing.md:278 +#: src/contributing/releasing.md:297 msgid "" "`npm/perry/package.json.tmpl` pins its optionalDependencies to its own exact " "version, so a partial publish breaks installs while both halves sit inside " @@ -88686,7 +92152,7 @@ msgstr "" "versión exacta, por lo que una parcial publica las pausas instala mientras " "que ambas mitades se encuentran dentro de sus presupuestos." -#: src/contributing/releasing.md:280 +#: src/contributing/releasing.md:299 msgid "" "Budgets live in `scripts/npm_publish_freshness.json`. A failing run files " "one sticky issue and updates it in place; it closes itself once the registry " @@ -88696,22 +92162,22 @@ msgstr "" "ejecución de archivos un problema pegajoso y lo actualiza en su lugar; se " "cierra a sí mismo una vez que el registro ha alcanzado." -#: src/contributing/releasing.md:284 +#: src/contributing/releasing.md:303 #, fuzzy msgid "# proves it can fail\n" msgstr "# prueba que puede fallar" -#: src/contributing/releasing.md:285 +#: src/contributing/releasing.md:304 #, fuzzy msgid "# offline\n" msgstr "# offline" -#: src/contributing/releasing.md:286 +#: src/contributing/releasing.md:305 #, fuzzy msgid "# real registry, no issue writes\n" msgstr "# registro real, ningún problema escribe" -#: src/contributing/releasing.md:289 +#: src/contributing/releasing.md:308 msgid "" "An unreachable or unparseable registry is **red, not a skip** — this " "detector exists because a silence read as health for a month, and a skip " @@ -88725,11 +92191,11 @@ msgstr "" "deliberadamente un contexto de estado requerido: si una versión ha sido " "cortada no es algo que un autor de relaciones públicas pueda arreglar." -#: src/contributing/releasing.md:294 +#: src/contributing/releasing.md:313 msgid "5. If a release goes wrong" msgstr "5. Si una liberación sale mal" -#: src/contributing/releasing.md:296 +#: src/contributing/releasing.md:315 msgid "" "**Wrong artifact published**: tag a new patch release with the fix; npm " "rejects re-publishes of the same version anyway." @@ -88738,7 +92204,7 @@ msgstr "" "con la solución; npm rechaza de todos modos los re-publicados de la misma " "versión." -#: src/contributing/releasing.md:298 +#: src/contributing/releasing.md:317 msgid "" "**Broken build before npm publication**: fix it and rebuild the complete " "nine-package set; the canonical flow will not tag a partial set." @@ -88747,7 +92213,7 @@ msgstr "" "el conjunto completo de nueve paquetes; el flujo canónico no etiquetará un " "conjunto parcial." -#: src/contributing/releasing.md:300 +#: src/contributing/releasing.md:319 msgid "" "**Broken binary discovered after publication**: ship a follow-up patch " "version; neither npm versions nor release tags are mutable." @@ -88756,7 +92222,7 @@ msgstr "" "de parche de seguimiento; ni versiones npm ni etiquetas de liberación son " "mutables." -#: src/contributing/releasing.md:302 +#: src/contributing/releasing.md:321 msgid "" "**A post-tag distribution hook failed**: re-run the failed workflow. To " "retry the legacy release-packages distribution legs, dispatch it with " @@ -88769,6 +92235,166 @@ msgstr "" "`existing_tag=vX.Y.Z`; añada `publish_npm=true` sólo cuando la pierna " "idempotente npm también necesite volver a intentarlo." +#~ msgid "`perry-ext-events`" +#~ msgstr "`perry-ext-events`" + +#~ msgid "`perry-ext-mongodb`" +#~ msgstr "`perry-ext-mongodb`" + +#~ msgid "`mongodb`" +#~ msgstr "`mongodb`" + +#~ msgid "`perry-ext-streams`" +#~ msgstr "`perry-ext-streams`" + +#~ msgid "" +#~ "**Async returns `*mut Promise`**. Pattern: `JsPromise::new()` → " +#~ "`spawn_blocking(move || { tokio::runtime::Handle::current()." +#~ "block_on(async {...}); promise.resolve(...) })` → return `promise." +#~ "as_raw()`." +#~ msgstr "" +#~ "**Las funciones async devuelven `*mut Promise`**. Patrón: `JsPromise::" +#~ "new()` → `spawn_blocking(move || { tokio::runtime::Handle::current()." +#~ "block_on(async {...}); promise.resolve(...) })` → devolver `promise." +#~ "as_raw()`." + +#~ msgid "Async one-shot (HTTP request, DB query)" +#~ msgstr "" +#~ "Operación asíncrona puntual (petición HTTP, consulta a base de datos)" + +#~ msgid "\"fetch: {}\"" +#~ msgstr "\"traer: . . \"" + +#~ msgid "" +#~ "These are real impls on macOS via `NSTableView.sortDescriptors` and " +#~ "`selectedRowIndexes`; other platforms link safe-default stubs." +#~ msgstr "" +#~ "Son implementaciones reales en macOS mediante `NSTableView." +#~ "sortDescriptors` y `selectedRowIndexes`; otras plataformas vinculan stubs " +#~ "con valores predeterminados seguros." + +#~ msgid "**mongodb** — MongoDB client" +#~ msgstr "**mongodb** — cliente MongoDB" + +#~ msgid "[`mongodb`](#mongodb)" +#~ msgstr "[`mongodb`](#mongodb)" + +#~ msgid "`collection` — instance" +#~ msgstr "`collection` — instancia" + +#~ msgid "`connect` — instance" +#~ msgstr "`connect` — instancia" + +#~ msgid "`countDocuments` — instance" +#~ msgstr "`countDocuments` — instancia" + +#~ msgid "`db` — instance" +#~ msgstr "`db` — instancia" + +#~ msgid "`deleteMany` — instance" +#~ msgstr "`deleteMany` — instancia" + +#~ msgid "`deleteOne` — instance" +#~ msgstr "`deleteOne` — instancia" + +#~ msgid "`findOne` — instance" +#~ msgstr "`findOne` — instancia" + +#~ msgid "`insertMany` — instance" +#~ msgstr "`insertMany` — instancia" + +#~ msgid "`insertOne` — instance" +#~ msgstr "`insertOne` — instancia" + +#~ msgid "`updateMany` — instance" +#~ msgstr "`updateMany` — instancia" + +#~ msgid "`updateOne` — instance" +#~ msgstr "`updateOne` — instancia" + +#~ msgid "" +#~ "Retain symbols/DWARF (and emit a Windows PDB) instead of stripping the " +#~ "result." +#~ msgstr "" +#~ "Retener symbols/DWARF (y emitir un Windows PDB) en lugar de eliminar el " +#~ "resultado." + +#~ msgid "tenuring feedback may grow the effective cap by up to 4×" +#~ msgstr "feedback puede crecer la tapa efectiva hasta 4×" + +#~ msgid "" +#~ "on live-set-bound workloads, where a fixed cap would multiply the per-" +#~ "collection fixed cost by an enormous collection count. Generated write " +#~ "barriers are also on by default. Turning them off makes generational " +#~ "minors unsound, so the runtime deliberately falls back to full mark-sweep." +#~ msgstr "" +#~ "sobre cargas de trabajo fijas en vivo, en las que un tope fijo " +#~ "multiplicaría el coste fijo por recogida por un enorme recuento de la " +#~ "recaudación. Las barreras de escritura generadas también están encendidas " +#~ "por defecto. Desactivarlos hace que los menores de generación no sean " +#~ "sanos, así que el tiempo de espera deliberadamente cae de nuevo a la " +#~ "marca-barra completa." + +#~ msgid "`arm64_32` watchOS, ARM64 Windows, and unsupported architectures" +#~ msgstr "`arm64_32` watchOS, ARM64 Windows y arquitecturas no soportadas" + +#~ msgid "" +#~ "The compile graph records every approved `.node` file as a native-addon " +#~ "module instead of trying to read it as UTF-8. At runtime, one loader " +#~ "operation does the following:" +#~ msgstr "" +#~ "El gráfico de compilación registra cada archivo `.node` aprobado como un " +#~ "módulo nativo-addon en lugar de tratar de leerlo como UTF-8. En tiempo de " +#~ "ejecución, una operación de cargador hace lo siguiente:" + +#~ msgid "" +#~ "The committed baseline records only structural signals: the 76 reviewed " +#~ "member decisions, the default dependency closure, the `perry` CLI " +#~ "closure, and decision counts. Any structural change must update the " +#~ "policy intentionally; ordinary Rust source edits do not churn the " +#~ "baseline." +#~ msgstr "" +#~ "La base de referencia comprometida registra sólo señales estructurales: " +#~ "las 76 decisiones de los miembros revisados, el cierre de dependencias " +#~ "por defecto, el cierre de `perry` CLI, y los recuentos de decisiones. " +#~ "Cualquier cambio estructural debe actualizar la política " +#~ "intencionalmente; las ediciones de origen Rust ordinarias no se limitan a " +#~ "la línea de base." + +#~ msgid "" +#~ "Rust toolchain (stable, **≥ 1.94**): [rustup.rs](https://rustup.rs/). The " +#~ "workspace pins no toolchain file, so an older `stable` fails with a " +#~ "`sqlx@0.9.0 requires rustc 1.94.0` MSRV error from deep in the dependency " +#~ "graph. `rustup update stable` resolves it." +#~ msgstr "" +#~ "Cadena de herramientas Rust (estable, **≥ 1.94**): [rustup.rs](https://" +#~ "rustup.rs/). El espacio de trabajo no contiene ningún archivo de cadena " +#~ "de herramientas, por lo que un `stable` más antiguo falla con un error de " +#~ "MSRV `sqlx@0.9.0 requires rustc 1.94.0` desde lo profundo del gráfico de " +#~ "dependencia. `rustup update stable` lo resuelve." + +#~ msgid "" +#~ "Perry has three build profiles, each tuned for a different job (#5422):" +#~ msgstr "" +#~ "Perry tiene tres perfiles de construcción, cada uno sintonizado para un " +#~ "trabajo diferente (#5422):" + +#~ msgid "`dist`" +#~ msgstr "`dist`" + +#~ msgid "" +#~ "**`dist`** mirrors `release` exactly (ThinLTO, `codegen-units = 1`, `opt-" +#~ "level = 3`, strip) and is the explicit, named profile the release " +#~ "workflows use for shipped artifacts. Output is at `target/dist/`." +#~ msgstr "" +#~ "**`dist`** espejos `release` exactamente (ThinLTO, `codegen-units = 1`, " +#~ "`opt-level = 3`, tira) y es el perfil explícito, llamado los flujos de " +#~ "trabajo de liberación utilizados para artefactos enviados. La salida está " +#~ "en `target/dist/`." + +#~ msgid "\"**Current Version:** $VERSION\"" +#~ msgstr "\"**Versión actual:** $VERSION\"" + #~ msgid "# Arch" #~ msgstr "# Arch" @@ -88854,9 +92480,6 @@ msgstr "" #~ msgid "`perry-ext-fastify`" #~ msgstr "`perry-ext-fastify`" -#~ msgid "`fastify`" -#~ msgstr "`fastify`" - #~ msgid "`perry-ext-fetch`" #~ msgstr "`perry-ext-fetch`" @@ -89265,17 +92888,14 @@ msgstr "" #~ "}\n" #~ "```" -#~ msgid "commander (CLI Parsing)" -#~ msgstr "commander (análisis de CLI)" - #~ msgid "" #~ "```typescript,no-test\n" #~ "import { Command } from \"commander\"\n" #~ "\n" #~ "function commanderExample(): void {\n" #~ " const program = new Command()\n" -#~ " program.name(\"my-cli\").version(\"1.0.0\").description(\"My CLI tool" -#~ "\")\n" +#~ " program.name(\"my-cli\").version(\"1.0.0\").description(\"My CLI " +#~ "tool\")\n" #~ "\n" #~ " program\n" #~ " .command(\"serve\")\n" @@ -89294,8 +92914,8 @@ msgstr "" #~ "\n" #~ "function commanderExample(): void {\n" #~ " const program = new Command()\n" -#~ " program.name(\"my-cli\").version(\"1.0.0\").description(\"My CLI tool" -#~ "\")\n" +#~ " program.name(\"my-cli\").version(\"1.0.0\").description(\"My CLI " +#~ "tool\")\n" #~ "\n" #~ " program\n" #~ " .command(\"serve\")\n" @@ -89867,9 +93487,6 @@ msgstr "" #~ msgid "`isBetween` — instance" #~ msgstr "`isBetween` — instancia" -#~ msgid "`moment` — module" -#~ msgstr "`moment` — módulo" - #~ msgid "`toDate` — instance" #~ msgstr "`toDate` — instancia" @@ -90658,8 +94275,8 @@ msgstr "" #~ msgstr "Luego golpe y etiqueta:" #~ msgid "" -#~ "# Bump [workspace.package] version in Cargo.toml AND the \"Current Version" -#~ "\"" +#~ "# Bump [workspace.package] version in Cargo.toml AND the \"Current " +#~ "Version\"" #~ msgstr "" #~ "# Versión Bump [workspace.package] en Cargo.toml Y la \"Versión actual\"" @@ -90973,9 +94590,9 @@ msgstr "" #~ "`StringHeader` from `perry-runtime` directly." #~ msgstr "" #~ "`StringHeader` se reexporta como el tipo canónico para tipos de retorno y " -#~ "parámetros en `extern \"C\"` — los wrappers deben escribir `pub extern \"C" -#~ "\" fn js_my_module_thing() -> *mut perry_ffi::StringHeader`, no importar " -#~ "`StringHeader` directamente desde `perry-runtime`." +#~ "parámetros en `extern \"C\"` — los wrappers deben escribir `pub extern " +#~ "\"C\" fn js_my_module_thing() -> *mut perry_ffi::StringHeader`, no " +#~ "importar `StringHeader` directamente desde `perry-runtime`." #~ msgid "What's NOT in v0.5" #~ msgstr "Qué NO está en v0.5" @@ -91199,8 +94816,8 @@ msgstr "" #~ "authoring inline styles compiles and links cleanly on Windows; the visual " #~ "rendering catches up when that issue lands." #~ msgstr "" -#~ "**Windows** tiene 5 propiedades en una \"familia de pintado diferido" -#~ "\" (`shadow`, `opacity`, `border_color`, `border_width`, `text." +#~ "**Windows** tiene 5 propiedades en una \"familia de pintado " +#~ "diferido\" (`shadow`, `opacity`, `border_color`, `border_width`, `text." #~ "decoration`) donde el símbolo FFI existe y almacena los parámetros " #~ "solicitados, pero se necesita un paso de renderizado personalizado " #~ "`WM_PAINT` para hacerlos visibles — rastreado en el issue [\\#210]" @@ -91652,8 +95269,9 @@ msgstr "" #~ msgid "" #~ "The result: at any GC safepoint, the collector can walk the shadow stack " #~ "and see the live NaN-boxed value of every TS-level local in every active " -#~ "frame, regardless of what LLVM did with registers. This is the \"precise" -#~ "\" half of the root scan — `shadow_stack_root_scanner` (`gc.rs:3860`)." +#~ "frame, regardless of what LLVM did with registers. This is the " +#~ "\"precise\" half of the root scan — `shadow_stack_root_scanner` (`gc." +#~ "rs:3860`)." #~ msgstr "" #~ "El resultado: en cualquier punto seguro del GC, el recolector puede " #~ "recorrer la shadow stack y ver el valor NaN-boxed vivo de cada local a " @@ -91793,9 +95411,6 @@ msgstr "" #~ msgid "Shadow stack" #~ msgstr "Shadow stack" -#~ msgid "Minor GC" -#~ msgstr "GC menor" - #~ msgid "" #~ "This is a brief overview for contributors. For detailed implementation " #~ "notes, see the project's `CLAUDE.md`." @@ -91905,9 +95520,6 @@ msgstr "" #~ "Angular / NestJS / TypeORM. Consulta [Decoradores](decorators.md) para la " #~ "postura completa y una receta de migración detallada." -#~ msgid "No Reflection" -#~ msgstr "Sin reflexión" - #~ msgid "There is no `Reflect` API or runtime type metadata:" #~ msgstr "" #~ "No existe API `Reflect` ni metadatos de tipos en tiempo de ejecución:" diff --git a/docs/po/fr.po b/docs/po/fr.po index d9b8dcaec10..02d05a2a93e 100644 --- a/docs/po/fr.po +++ b/docs/po/fr.po @@ -166,7 +166,7 @@ msgid "Events" msgstr "Événements" #: src/SUMMARY.md:51 src/ui/canvas.md:1 src/platforms/macos.md:37 -#: src/platforms/android.md:38 src/platforms/windows.md:62 +#: src/platforms/android.md:43 src/platforms/windows.md:62 #: src/platforms/linux.md:52 msgid "Canvas" msgstr "Canvas" @@ -222,11 +222,11 @@ msgstr "Hooks" #: src/SUMMARY.md:68 src/threading/parallel-map.md:157 #: src/threading/parallel-filter.md:78 src/threading/spawn.md:191 -#: src/tui/examples.md:1 src/cli/flags.md:504 +#: src/tui/examples.md:1 src/cli/flags.md:508 msgid "Examples" msgstr "Exemples" -#: src/SUMMARY.md:70 src/system/overview.md:21 +#: src/SUMMARY.md:70 src/system/overview.md:21 src/cli/function-order.md:52 msgid "Platforms" msgstr "Plateformes" @@ -392,7 +392,7 @@ msgstr "HTTP et réseau" msgid "Databases" msgstr "Bases de données" -#: src/SUMMARY.md:94 src/stdlib/overview.md:42 src/stdlib/crypto.md:1 +#: src/SUMMARY.md:94 src/stdlib/overview.md:41 src/stdlib/crypto.md:1 msgid "Cryptography" msgstr "Cryptographie" @@ -401,7 +401,7 @@ msgstr "Cryptographie" msgid "Containers" msgstr "Conteneurs" -#: src/SUMMARY.md:96 src/stdlib/overview.md:49 src/stdlib/utilities.md:1 +#: src/SUMMARY.md:96 src/stdlib/overview.md:48 src/stdlib/utilities.md:1 #: src/cli/perry-toml.md:238 msgid "Utilities" msgstr "Utilitaires" @@ -500,7 +500,7 @@ msgstr "Géolocalisation et sélecteur d'images" msgid "Background Tasks" msgstr "Tâches en arrière-plan" -#: src/SUMMARY.md:133 src/ui/menus.md:68 src/stdlib/overview.md:56 +#: src/SUMMARY.md:133 src/ui/menus.md:68 src/stdlib/overview.md:55 msgid "Other" msgstr "Autre" @@ -582,155 +582,190 @@ msgid "CI Tiers (PR gate / sweep / full)" msgstr "Niveaux de CI (contrôle de PR / balayage / suite complète)" #: src/SUMMARY.md:161 -msgid "Claude Code Bundle Parity" +msgid "Perry CLI Performance Reports (tak)" msgstr "" #: src/SUMMARY.md:162 +msgid "Claude Code Bundle Parity" +msgstr "" + +#: src/SUMMARY.md:163 msgid "CI Gate Scheduling" msgstr "Planification des contrôles CI" -#: src/SUMMARY.md:163 +#: src/SUMMARY.md:164 msgid "Linux Incident Capture" msgstr "" -#: src/SUMMARY.md:165 +#: src/SUMMARY.md:166 msgid "CLI Reference" msgstr "Référence CLI" -#: src/SUMMARY.md:167 +#: src/SUMMARY.md:168 msgid "Commands" msgstr "Commandes" -#: src/SUMMARY.md:168 src/cli/flags.md:1 +#: src/SUMMARY.md:169 src/cli/flags.md:1 msgid "Compiler Flags" msgstr "Drapeaux du compilateur" -#: src/SUMMARY.md:169 +#: src/SUMMARY.md:170 +#, fuzzy +msgid "Source-level Debugging" +msgstr "épingle au niveau du procédé" + +#: src/SUMMARY.md:171 msgid "Cache Directory" msgstr "Répertoire de cache" -#: src/SUMMARY.md:170 +#: src/SUMMARY.md:172 msgid "Fast-math (`--fast-math`)" msgstr "Fast-math (`--fast-math`)" -#: src/SUMMARY.md:171 +#: src/SUMMARY.md:173 +msgid "Function Order (`--function-order`)" +msgstr "" + +#: src/SUMMARY.md:174 msgid "Dynamic Stdlib Dispatch" msgstr "Dispatch Dynamique de la Bibliothèque Standard" -#: src/SUMMARY.md:172 +#: src/SUMMARY.md:175 msgid "JS Runtime Opt-In" msgstr "Activation du Runtime JS" -#: src/SUMMARY.md:173 src/cli/sandbox-buildrs.md:1 +#: src/SUMMARY.md:176 src/cli/sandbox-buildrs.md:1 msgid "`PERRY_SANDBOX_BUILDRS`" msgstr "`PERRY_SANDBOX_BUILDRS`" -#: src/SUMMARY.md:174 src/cli/emit-attest.md:1 +#: src/SUMMARY.md:177 src/cli/emit-attest.md:1 msgid "`--emit-attest` (binary attestation sidecar)" msgstr "`--emit-attest` (sidecar d'attestation binaire)" -#: src/SUMMARY.md:175 src/cli/flags.md:426 +#: src/SUMMARY.md:178 src/cli/flags.md:428 msgid "`--emit-sandbox`" msgstr "`--emit-sandbox`" -#: src/SUMMARY.md:176 src/cli/flags.md:427 +#: src/SUMMARY.md:179 src/cli/flags.md:429 msgid "`--lockdown`" msgstr "`--lockdown`" -#: src/SUMMARY.md:177 +#: src/SUMMARY.md:180 msgid "Egress Allowlist (`allowedHosts`)" msgstr "Liste d'autorisation de sortie (`allowedHosts`)" -#: src/SUMMARY.md:178 src/cli/capabilities.md:1 +#: src/SUMMARY.md:181 src/cli/capabilities.md:1 msgid "Per-Package Capabilities (`perry.permissions`)" msgstr "Capacités par paquet (`perry.permissions`)" -#: src/SUMMARY.md:179 +#: src/SUMMARY.md:182 msgid "`perry audit --sbom`" msgstr "`perry audit --sbom`" -#: src/SUMMARY.md:180 +#: src/SUMMARY.md:183 msgid "Host Allowlist (nativeLibrary, compilePackages)" msgstr "Liste d'autorisation hôte (nativeLibrary, compilePackages)" -#: src/SUMMARY.md:181 src/cli/perry-toml.md:1 +#: src/SUMMARY.md:184 src/cli/perry-toml.md:1 msgid "perry.toml Reference" msgstr "Référence perry.toml" -#: src/SUMMARY.md:182 src/cli/updates.md:1 +#: src/SUMMARY.md:185 src/cli/updates.md:1 msgid "Updates" msgstr "Updates" -#: src/SUMMARY.md:183 +#: src/SUMMARY.md:186 msgid "Update Checks in Your Apps" msgstr "Recherche de mises à jour dans vos applications" -#: src/SUMMARY.md:184 src/cli/telemetry.md:1 +#: src/SUMMARY.md:187 src/cli/telemetry.md:1 msgid "Privacy & Telemetry" msgstr "Confidentialité et télémétrie" -#: src/SUMMARY.md:188 +#: src/SUMMARY.md:191 msgid "Internals" msgstr "Internals" -#: src/SUMMARY.md:190 src/internals/memory-model.md:1 +#: src/SUMMARY.md:193 src/internals/memory-model.md:1 msgid "Memory Model" msgstr "Modèle Mémoire" -#: src/SUMMARY.md:191 src/internals/regexp-program-cache.md:1 +#: src/SUMMARY.md:194 src/internals/retained-function-source.md:1 +msgid "Retained function source" +msgstr "" + +#: src/SUMMARY.md:195 src/internals/regexp-program-cache.md:1 msgid "RegExp program ownership and caching" msgstr "" -#: src/SUMMARY.md:192 +#: src/SUMMARY.md:196 src/internals/weakmap-owned-index-design.md:1 +msgid "WeakMap lookup and owned identity storage" +msgstr "" + +#: src/SUMMARY.md:197 +#, fuzzy +msgid "Implementation validation" +msgstr "État de la mise en œuvre" + +#: src/SUMMARY.md:198 msgid "Garbage Collector" msgstr "Ramasse-miettes" -#: src/SUMMARY.md:193 src/internals/explicit-memory.md:1 +#: src/SUMMARY.md:199 src/internals/explicit-memory.md:1 msgid "Explicit Memory Control" msgstr "Gestion explicite de la mémoire" -#: src/SUMMARY.md:194 src/internals/gc-rooting-invariant.md:1 +#: src/SUMMARY.md:200 src/internals/gc-rooting-invariant.md:1 msgid "The GC rooting invariant (codegen)" msgstr "L’invariant d’enracinement du GC (génération de code)" -#: src/SUMMARY.md:195 src/internals/local-binding-type-evidence.md:1 +#: src/SUMMARY.md:201 src/internals/local-binding-type-evidence.md:1 msgid "Local binding type evidence" msgstr "Preuves de type pour les liaisons locales" -#: src/SUMMARY.md:196 src/internals/codegen-mechanisms.md:1 +#: src/SUMMARY.md:202 src/internals/codegen-mechanisms.md:1 msgid "Codegen mechanisms and workload evidence" msgstr "" -#: src/SUMMARY.md:197 +#: src/SUMMARY.md:203 msgid "Incremental GC step bounds" msgstr "Limites des étapes du GC incrémental" -#: src/SUMMARY.md:198 src/internals/rfc-rooting-by-construction.md:1 +#: src/SUMMARY.md:204 src/internals/rfc-rooting-by-construction.md:1 msgid "RFC: rooting by construction" msgstr "RFC : enracinement par construction" -#: src/SUMMARY.md:199 src/internals/node-api-host.md:1 +#: src/SUMMARY.md:205 src/internals/node-api-host.md:1 msgid "Node-API host design" msgstr "Node-API host design" -#: src/SUMMARY.md:201 +#: src/SUMMARY.md:206 src/internals/fallback-diagnostics.md:1 +#, fuzzy +msgid "Generic fallback diagnostics" +msgstr "Sémantique générale des objets" + +#: src/SUMMARY.md:208 msgid "Contributing" msgstr "Contribuer" -#: src/SUMMARY.md:203 src/platforms/watchos.md:25 src/platforms/harmonyos.md:5 +#: src/SUMMARY.md:210 src/platforms/watchos.md:25 src/platforms/harmonyos.md:5 #: src/testing/geisterhand.md:683 src/contributing/architecture.md:1 msgid "Architecture" msgstr "Architecture" -#: src/SUMMARY.md:204 src/contributing/crate-policy.md:1 +#: src/SUMMARY.md:211 src/contributing/crate-policy.md:1 msgid "Crate policy" msgstr "Politique des crates" -#: src/SUMMARY.md:205 src/contributing/building.md:1 +#: src/SUMMARY.md:212 src/contributing/building.md:1 msgid "Building from Source" msgstr "Compiler depuis les sources" -#: src/SUMMARY.md:206 src/contributing/releasing.md:1 +#: src/SUMMARY.md:213 src/contributing/build-storage.md:1 +msgid "Linux agent build storage" +msgstr "" + +#: src/SUMMARY.md:214 src/contributing/releasing.md:1 msgid "Releasing Perry" msgstr "Publier une version de Perry" @@ -999,21 +1034,21 @@ msgstr "" #: src/introduction.md:96 src/getting-started/hello-world.md:155 #: src/getting-started/first-app.md:184 -#: src/getting-started/project-config.md:325 +#: src/getting-started/project-config.md:327 #: src/language/supported-features.md:631 src/language/type-system.md:149 #: src/language/limitations.md:393 src/threading/overview.md:350 #: src/ui/overview.md:239 src/ui/widgets.md:706 src/ui/layout.md:393 #: src/ui/styling.md:387 src/ui/state.md:226 src/ui/events.md:167 #: src/ui/canvas.md:93 src/ui/menus.md:119 src/ui/tray.md:106 -#: src/ui/dialogs.md:166 src/ui/table.md:150 src/ui/animation.md:71 +#: src/ui/dialogs.md:166 src/ui/table.md:158 src/ui/animation.md:71 #: src/ui/multi-window.md:158 src/ui/theming.md:166 src/ui/camera.md:143 #: src/ui/webview.md:239 src/platforms/overview.md:80 src/platforms/macos.md:86 #: src/platforms/ios.md:207 src/platforms/tvos.md:180 -#: src/platforms/watchos.md:316 src/platforms/android.md:92 +#: src/platforms/watchos.md:316 src/platforms/android.md:97 #: src/platforms/wearos.md:208 src/platforms/windows.md:144 #: src/platforms/linux.md:84 src/platforms/web.md:21 src/platforms/wasm.md:191 -#: src/stdlib/overview.md:129 src/stdlib/fs.md:98 src/stdlib/http.md:408 -#: src/stdlib/database.md:107 src/stdlib/crypto.md:87 +#: src/stdlib/overview.md:128 src/stdlib/fs.md:98 src/stdlib/http.md:408 +#: src/stdlib/database.md:112 src/stdlib/crypto.md:87 #: src/stdlib/utilities.md:96 src/stdlib/other.md:333 src/i18n/overview.md:108 #: src/updater/overview.md:445 src/system/overview.md:77 #: src/system/preferences.md:44 src/system/keychain.md:35 @@ -1024,8 +1059,8 @@ msgstr "" #: src/plugins/overview.md:96 src/plugins/creating-plugins.md:162 #: src/plugins/hooks-and-events.md:144 src/plugins/native-extensions.md:324 #: src/plugins/appstore-review.md:199 src/cli/commands.md:437 -#: src/cli/flags.md:541 src/contributing/architecture.md:100 -#: src/contributing/building.md:179 +#: src/cli/flags.md:545 src/contributing/architecture.md:109 +#: src/contributing/building.md:201 msgid "Next Steps" msgstr "Étapes suivantes" @@ -1210,7 +1245,8 @@ msgstr "" #: src/system/background.md:78 src/system/other.md:18 src/system/other.md:35 #: src/widgets/data-fetching.md:142 src/widgets/platforms.md:14 #: src/plugins/native-extensions.md:298 src/testing/geisterhand.md:257 -#: src/cli/flags.md:96 src/contributing/releasing.md:149 +#: src/cli/flags.md:96 src/cli/function-order.md:54 +#: src/contributing/releasing.md:168 msgid "Platform" msgstr "Plateforme" @@ -1830,7 +1866,10 @@ msgstr "" "```" #: src/getting-started/hello-world.md:98 -msgid "Perry compiles async/await to a native async runtime backed by Tokio." +#, fuzzy +msgid "" +"Perry compiles async/await to native code driven by its own event loop " +"(turnloop)." msgstr "" "Perry compile async/await vers un runtime asynchrone natif reposant sur " "Tokio." @@ -1939,12 +1978,15 @@ msgid "The result is a standalone executable with no external dependencies." msgstr "Le résultat est un exécutable autonome sans dépendances externes." #: src/getting-started/hello-world.md:144 -#: src/getting-started/hello-world.md:146 src/stdlib/overview.md:74 -#: src/stdlib/overview.md:78 +#: src/getting-started/hello-world.md:146 src/stdlib/overview.md:73 +#: src/stdlib/overview.md:77 msgid "Binary Size" msgstr "Taille du binaire" #: src/getting-started/hello-world.md:146 +#: src/internals/weakmap-owned-index-design.md:60 +#: src/internals/weakmap-owned-index-validation.md:71 +#: src/internals/weakmap-owned-index-validation.md:93 msgid "Program" msgstr "Programme" @@ -1952,7 +1994,7 @@ msgstr "Programme" msgid "Hello world" msgstr "Hello world" -#: src/getting-started/hello-world.md:148 src/stdlib/overview.md:80 +#: src/getting-started/hello-world.md:148 src/stdlib/overview.md:79 msgid "~300KB" msgstr "~300 Ko" @@ -1961,7 +2003,7 @@ msgid "CLI with fs/path" msgstr "CLI avec fs/path" #: src/getting-started/hello-world.md:149 -#: src/getting-started/hello-world.md:150 src/stdlib/overview.md:81 +#: src/getting-started/hello-world.md:150 src/stdlib/overview.md:80 msgid "~3MB" msgstr "~3 Mo" @@ -1973,7 +2015,7 @@ msgstr "Application UI" msgid "Full app with stdlib" msgstr "Application complète avec stdlib" -#: src/getting-started/hello-world.md:151 src/stdlib/overview.md:82 +#: src/getting-started/hello-world.md:151 src/stdlib/overview.md:81 msgid "~48MB" msgstr "~48 Mo" @@ -2432,8 +2474,8 @@ msgstr "" #: src/getting-started/project-config.md:26 #: src/native-libraries/overview.md:131 src/native-libraries/overview.md:136 -#: src/native-libraries/authoring-guide.md:119 -#: src/native-libraries/authoring-guide.md:128 +#: src/native-libraries/authoring-guide.md:121 +#: src/native-libraries/authoring-guide.md:130 #: src/native-libraries/manifest-v1.md:156 #: src/native-libraries/manifest-v1.md:159 #: src/native-libraries/manifest-v1.md:160 @@ -2444,7 +2486,7 @@ msgstr "" #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 src/plugins/native-extensions.md:58 #: src/plugins/native-extensions.md:64 src/plugins/appstore-review.md:190 -#: src/cli/app-updates.md:23 +#: src/cli/debugging.md:42 src/cli/app-updates.md:23 msgid "\"name\"" msgstr "\"name\"" @@ -2453,7 +2495,7 @@ msgid "\"my-project\"" msgstr "\"my-project\"" #: src/getting-started/project-config.md:27 -#: src/native-libraries/authoring-guide.md:120 +#: src/native-libraries/authoring-guide.md:122 #: src/native-libraries/manifest-v1.md:385 #: src/native-libraries/manifest-v1.md:513 src/plugins/native-extensions.md:59 #: src/cli/emit-attest.md:61 src/cli/perry-audit-sbom.md:47 @@ -2462,7 +2504,7 @@ msgid "\"version\"" msgstr "\"version\"" #: src/getting-started/project-config.md:27 -#: src/native-libraries/authoring-guide.md:120 +#: src/native-libraries/authoring-guide.md:122 #: src/plugins/native-extensions.md:59 msgid "\"0.1.0\"" msgstr "\"0.1.0\"" @@ -2472,7 +2514,7 @@ msgid "\"private\"" msgstr "\"privé\"" #: src/getting-started/project-config.md:29 -#: src/native-libraries/authoring-guide.md:121 +#: src/native-libraries/authoring-guide.md:123 #: src/plugins/native-extensions.md:60 msgid "\"main\"" msgstr "\"main\"" @@ -2489,15 +2531,15 @@ msgstr "\"src/main.ts\"" #: src/getting-started/project-config.md:184 #: src/getting-started/project-config.md:197 #: src/getting-started/project-config.md:218 src/packages/porting.md:84 -#: src/native-libraries/authoring-guide.md:123 -#: src/native-libraries/authoring-guide.md:271 -#: src/native-libraries/authoring-guide.md:296 src/native-libraries/abi.md:49 +#: src/native-libraries/authoring-guide.md:125 +#: src/native-libraries/authoring-guide.md:273 +#: src/native-libraries/authoring-guide.md:298 src/native-libraries/abi.md:49 #: src/native-libraries/manifest-v1.md:31 #: src/native-libraries/manifest-v1.md:514 #: src/native-libraries/zero-config-and-faithfulness.md:25 #: src/platforms/ios.md:168 src/platforms/ios.md:181 -#: src/platforms/android.md:57 src/platforms/android.md:72 -#: src/stdlib/overview.md:113 src/stdlib/http.md:186 src/stdlib/http.md:349 +#: src/platforms/android.md:62 src/platforms/android.md:77 +#: src/stdlib/overview.md:112 src/stdlib/http.md:186 src/stdlib/http.md:349 #: src/plugins/native-extensions.md:61 src/plugins/appstore-review.md:187 #: src/cli/fast-math.md:34 src/cli/dynamic-dispatch.md:101 #: src/cli/dynamic-dispatch.md:117 src/cli/allow-js-runtime.md:44 @@ -2506,7 +2548,8 @@ msgstr "\"src/main.ts\"" #: src/cli/capabilities.md:28 src/cli/allow-perry-features.md:52 #: src/cli/allow-perry-features.md:69 src/cli/allow-perry-features.md:83 #: src/cli/app-updates.md:25 src/cli/app-updates.md:140 -#: src/cli/app-updates.md:151 src/internals/node-api-host.md:438 +#: src/cli/app-updates.md:151 src/internals/node-api-host.md:450 +#: src/internals/node-api-host.md:507 msgid "\"perry\"" msgstr "\"perry\"" @@ -2515,7 +2558,7 @@ msgstr "\"perry\"" #: src/getting-started/project-config.md:86 #: src/getting-started/project-config.md:87 src/packages/porting.md:85 #: src/native-libraries/zero-config-and-faithfulness.md:26 -#: src/stdlib/overview.md:114 src/stdlib/http.md:187 src/stdlib/http.md:350 +#: src/stdlib/overview.md:113 src/stdlib/http.md:187 src/stdlib/http.md:350 #: src/cli/allow-perry-features.md:53 src/cli/allow-perry-features.md:56 #: src/cli/allow-perry-features.md:71 src/cli/allow-perry-features.md:83 msgid "\"compilePackages\"" @@ -2563,11 +2606,11 @@ msgstr "" #: src/getting-started/project-config.md:53 msgid "" -"The existing `\"jsx\": \"solid\"` selects `perry-solid`; `\"jsx\": \"default" -"\"` disables automatic Solid detection. A host setting overrides per-file " -"detection. The equivalent TOML setting is `[perry]` with `jsx = { runtime = " -"\"@opentui/solid\" }`; TOML overrides the host's package setting. React/" -"Preact import sources keep their existing JSX behavior." +"The existing `\"jsx\": \"solid\"` selects `perry-solid`; `\"jsx\": " +"\"default\"` disables automatic Solid detection. A host setting overrides " +"per-file detection. The equivalent TOML setting is `[perry]` with `jsx = " +"{ runtime = \"@opentui/solid\" }`; TOML overrides the host's package " +"setting. React/Preact import sources keep their existing JSX behavior." msgstr "" #: src/getting-started/project-config.md:59 @@ -2593,13 +2636,13 @@ msgstr "" #: src/getting-started/project-config.md:71 #: src/getting-started/project-config.md:86 src/packages/porting.md:85 -#: src/stdlib/overview.md:114 +#: src/stdlib/overview.md:113 msgid "\"@noble/curves\"" msgstr "\"@noble/curves\"" #: src/getting-started/project-config.md:71 #: src/getting-started/project-config.md:86 src/packages/porting.md:85 -#: src/stdlib/overview.md:114 +#: src/stdlib/overview.md:113 msgid "\"@noble/hashes\"" msgstr "\"@noble/hashes\"" @@ -2609,16 +2652,16 @@ msgid "" "Compiling third-party TypeScript into your binary is a privileged operation, " "so every entry in `compilePackages` must _also_ be matched by an entry in " "`perry.allow.compilePackages` in the same `package.json` — otherwise the " -"build refuses. Patterns accept exact names, scope wildcards (`\"@scope/*" -"\"`), or the universal `\"*\"`:" +"build refuses. Patterns accept exact names, scope wildcards (`\"@scope/" +"*\"`), or the universal `\"*\"`:" msgstr "" "**Deux touches pour s'inscrire.** La liste d'un colis n'est pas suffisante à " "elle seule. La compilation de TypeScript de tiers dans votre binaire est une " "opération privilégiée, de sorte que chaque entrée dans `compilePackages` " "doit également être assortie d'une entrée dans `perry.allow.compilePackages` " "dans le même `package.json` sinon la compilation refuse. Les modèles " -"acceptent des noms exacts, des jokers de portée (`\"@scope/*\"`) ou le `\"*" -"\"` universel:" +"acceptent des noms exacts, des jokers de portée (`\"@scope/*\"`) ou le " +"`\"*\"` universel:" #: src/getting-started/project-config.md:87 src/cli/allow-perry-features.md:55 #: src/cli/allow-perry-features.md:70 src/cli/allow-perry-features.md:83 @@ -2687,9 +2730,9 @@ msgid "" "actual `.node` edge fails. Naming the addon package exactly still fails " "immediately with the native-addon diagnostic." msgstr "" -"Les formulaires universels (`\"auto\"`, `\"all\"`, `true`, ou un joker `\"*" -"\"`) sautent les paquets identifiés comme des addons natifs de Node au lieu " -"d'essayer de compiler les binaires N-API comme source. Cela permet à " +"Les formulaires universels (`\"auto\"`, `\"all\"`, `true`, ou un joker " +"`\"*\"`) sautent les paquets identifiés comme des addons natifs de Node au " +"lieu d'essayer de compiler les binaires N-API comme source. Cela permet à " "l'accélérateur natif optionnel protégé d'une dépendance de revenir à son " "implémentation JavaScript. Un sous-piste de source pure importé statiquement " "d'un tel paquet peut encore être compilé, mais un bord `.node` réel échoue. " @@ -2976,8 +3019,8 @@ msgstr "" #: src/getting-started/project-config.md:185 #: src/getting-started/project-config.md:198 #: src/getting-started/project-config.md:219 src/platforms/ios.md:169 -#: src/platforms/ios.md:182 src/platforms/android.md:58 -#: src/platforms/android.md:73 +#: src/platforms/ios.md:182 src/platforms/android.md:63 +#: src/platforms/android.md:78 msgid "\"splash\"" msgstr "\"Éclaboussure\"" @@ -2985,13 +3028,13 @@ msgstr "\"Éclaboussure\"" #: src/getting-started/project-config.md:199 #: src/getting-started/project-config.md:202 #: src/getting-started/project-config.md:206 src/platforms/ios.md:170 -#: src/platforms/android.md:59 +#: src/platforms/android.md:64 msgid "\"image\"" msgstr "\"image\"" #: src/getting-started/project-config.md:186 #: src/getting-started/project-config.md:199 src/platforms/ios.md:170 -#: src/platforms/android.md:59 +#: src/platforms/android.md:64 msgid "\"logo/icon-256.png\"" msgstr "\"logo/icon-256.png\"" @@ -2999,13 +3042,13 @@ msgstr "\"logo/icon-256.png\"" #: src/getting-started/project-config.md:200 #: src/getting-started/project-config.md:203 #: src/getting-started/project-config.md:207 src/ui/theming.md:26 -#: src/platforms/ios.md:171 src/platforms/android.md:60 +#: src/platforms/ios.md:171 src/platforms/android.md:65 msgid "\"background\"" msgstr "\"dans le passé\"" #: src/getting-started/project-config.md:187 #: src/getting-started/project-config.md:200 src/platforms/ios.md:171 -#: src/platforms/android.md:60 +#: src/platforms/android.md:65 msgid "\"#FFF5EE\"" msgstr "\"#FFF5EE\" est une chanson" @@ -3015,7 +3058,7 @@ msgstr "**Surcharges par plateforme :**" #: src/getting-started/project-config.md:201 #: src/getting-started/project-config.md:220 -#: src/native-libraries/authoring-guide.md:299 +#: src/native-libraries/authoring-guide.md:301 #: src/native-libraries/manifest-v1.md:434 src/platforms/ios.md:183 #: src/plugins/native-extensions.md:67 msgid "\"ios\"" @@ -3032,7 +3075,7 @@ msgid "\"#FFFFFF\"" msgstr "\" #FFFFFF\"" #: src/getting-started/project-config.md:205 -#: src/getting-started/project-config.md:223 src/platforms/android.md:74 +#: src/getting-started/project-config.md:223 src/platforms/android.md:79 #: src/plugins/native-extensions.md:72 msgid "\"android\"" msgstr "\"android\"" @@ -3053,19 +3096,19 @@ msgstr "\"Storyboard\" est un mot anglais pour \"storyboard\"" msgid "\"splash/LaunchScreen.storyboard\"" msgstr "\"splash/LaunchScreen.storyboard\"" -#: src/getting-started/project-config.md:224 src/platforms/android.md:75 +#: src/getting-started/project-config.md:224 src/platforms/android.md:80 msgid "\"layout\"" msgstr "\"Layout\"" -#: src/getting-started/project-config.md:224 src/platforms/android.md:75 +#: src/getting-started/project-config.md:224 src/platforms/android.md:80 msgid "\"splash/splash_background.xml\"" msgstr "\"splash/splash_background.xml\"" -#: src/getting-started/project-config.md:225 src/platforms/android.md:76 +#: src/getting-started/project-config.md:225 src/platforms/android.md:81 msgid "\"theme\"" msgstr "Le thème" -#: src/getting-started/project-config.md:225 src/platforms/android.md:76 +#: src/getting-started/project-config.md:225 src/platforms/android.md:81 msgid "\"splash/themes.xml\"" msgstr "\"splash/themes.xml\"" @@ -3103,8 +3146,8 @@ msgstr "Champ" #: src/cli/commands.md:268 src/cli/commands.md:283 src/cli/commands.md:295 #: src/cli/flags.md:80 src/cli/flags.md:135 src/cli/flags.md:143 #: src/cli/flags.md:191 src/cli/flags.md:291 src/cli/flags.md:379 -#: src/cli/flags.md:397 src/cli/flags.md:410 src/cli/flags.md:417 -#: src/cli/flags.md:431 src/cli/perry-toml.md:117 src/cli/perry-toml.md:128 +#: src/cli/flags.md:399 src/cli/flags.md:412 src/cli/flags.md:419 +#: src/cli/flags.md:435 src/cli/perry-toml.md:117 src/cli/perry-toml.md:128 #: src/cli/perry-toml.md:156 src/cli/perry-toml.md:172 #: src/cli/perry-toml.md:182 src/cli/perry-toml.md:188 #: src/cli/perry-toml.md:198 src/cli/perry-toml.md:248 @@ -3235,10 +3278,15 @@ msgid "" "// requires: auto-optimize\n" "// run: false\n" "\n" -"// These four imports are Perry's most-used built-in stdlib shims:\n" -"// fastify (HTTP server), mysql2 (db), ioredis (Redis), bcrypt (password\n" -"// hashing). They're compiled to native code via Perry's per-package\n" -"// implementations — no `compilePackages` needed.\n" +"// Four common npm packages: fastify (HTTP server), mysql2 (db), ioredis\n" +"// (Redis), bcrypt (password hashing). With no `perry.compilePackages` " +"entry,\n" +"// Perry compiles each installed package's real source to native code " +"(bcrypt,\n" +"// a Node native addon, routes to Perry's perry-ext-bcrypt wrapper). They " +"must\n" +"// be installed: the doc-tests job runs `npm ci` at the repo root, whose\n" +"// devDependencies list them.\n" "//\n" "// `// run: false` because each one needs a live external service (DB,\n" "// Redis, network port) to actually do anything; the binary still has to\n" @@ -3287,7 +3335,7 @@ msgstr "" "console.log(typeof app, typeof db, typeof redis, hashed.length)\n" "```" -#: src/getting-started/project-config.md:283 +#: src/getting-started/project-config.md:285 msgid "" "These are compiled to native code using Perry's built-in implementations. " "See [Standard Library](../stdlib/overview.md) for the full list." @@ -3296,7 +3344,7 @@ msgstr "" "de Perry. Voir [Bibliothèque standard](../stdlib/overview.md) pour la liste " "complète." -#: src/getting-started/project-config.md:285 +#: src/getting-started/project-config.md:287 msgid "" "For packages not natively supported, use `compilePackages` for pure TS/JS " "packages, or the JavaScript runtime fallback for complex packages." @@ -3305,49 +3353,49 @@ msgstr "" "pour les packages TS/JS purs, ou le repli sur le runtime JavaScript pour les " "packages complexes." -#: src/getting-started/project-config.md:287 src/contributing/building.md:155 +#: src/getting-started/project-config.md:289 src/contributing/building.md:177 msgid "Project Structure" msgstr "Structure du projet" -#: src/getting-started/project-config.md:289 +#: src/getting-started/project-config.md:291 msgid "Perry is flexible about project structure. Common patterns:" msgstr "Perry est flexible quant à la structure du projet. Modèles courants :" -#: src/getting-started/project-config.md:299 +#: src/getting-started/project-config.md:301 msgid "For UI apps:" msgstr "Pour les applications UI :" -#: src/getting-started/project-config.md:310 src/widgets/watchos.md:60 +#: src/getting-started/project-config.md:312 src/widgets/watchos.md:60 #: src/widgets/wearos.md:61 msgid "Compilation" msgstr "Compilation" -#: src/getting-started/project-config.md:313 +#: src/getting-started/project-config.md:315 #, fuzzy msgid "# Compile a file\n" msgstr "# Compiler un fichier" -#: src/getting-started/project-config.md:315 +#: src/getting-started/project-config.md:317 #, fuzzy msgid "# Compile with a specific target\n" msgstr "# Compiler avec une cible spécifique" -#: src/getting-started/project-config.md:318 +#: src/getting-started/project-config.md:320 #, fuzzy msgid "# Debug: print intermediate representation\n" msgstr "# Débogage: représentation intermédiaire d'impression" -#: src/getting-started/project-config.md:323 +#: src/getting-started/project-config.md:325 msgid "See [CLI Commands](../cli/commands.md) for all options." msgstr "Voir [Commandes CLI](../cli/commands.md) pour toutes les options." -#: src/getting-started/project-config.md:327 +#: src/getting-started/project-config.md:329 msgid "[CLI Commands](../cli/commands.md) — All compiler commands and flags" msgstr "" "[Commandes CLI](../cli/commands.md) — Toutes les commandes et options du " "compilateur" -#: src/getting-started/project-config.md:328 +#: src/getting-started/project-config.md:330 msgid "" "[Supported Features](../language/supported-features.md) — What TypeScript " "features work" @@ -3355,7 +3403,7 @@ msgstr "" "[Fonctionnalités prises en charge](../language/supported-features.md) — " "Quelles fonctionnalités TypeScript fonctionnent" -#: src/getting-started/project-config.md:329 +#: src/getting-started/project-config.md:331 msgid "[Standard Library](../stdlib/overview.md) — Supported npm packages" msgstr "" "[Bibliothèque standard](../stdlib/overview.md) — Packages npm pris en charge" @@ -3503,13 +3551,13 @@ msgstr "Notification locale" #: src/platforms/windows-7.md:25 src/container/overview.md:71 #: src/container/security.md:105 src/container/determinism.md:59 #: src/testing/geisterhand.md:87 src/testing/geisterhand.md:101 -#: src/cli/flags.md:558 src/cli/flags.md:664 src/cli/flags.md:665 +#: src/cli/flags.md:562 src/cli/flags.md:668 src/cli/flags.md:669 #: src/cli/dynamic-dispatch.md:123 src/cli/allow-js-runtime.md:67 #: src/cli/sandbox-buildrs.md:25 src/cli/sandbox-buildrs.md:53 -#: src/cli/perry-toml.md:431 src/internals/gc-rooting-invariant.md:258 +#: src/cli/perry-toml.md:431 src/internals/gc-rooting-invariant.md:285 #: src/internals/codegen-mechanisms.md:56 #: src/internals/rfc-rooting-by-construction.md:354 -#: src/contributing/releasing.md:183 +#: src/contributing/releasing.md:202 msgid "1" msgstr "1" @@ -3631,8 +3679,8 @@ msgid "" " // Arrow functions\n" " const double = (x: number) => x * 2;\n" "\n" -" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} sum=" -"${sum(1, 2, 3)} double=${double(5)}`)\n" +" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} " +"sum=${sum(1, 2, 3)} double=${double(5)}`)\n" "}\n" "```" msgstr "" @@ -3655,23 +3703,23 @@ msgstr "" " // Arrow functions\n" " const double = (x: number) => x * 2;\n" "\n" -" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} sum=" -"${sum(1, 2, 3)} double=${double(5)}`)\n" +" console.log(`functions: add=${add(2, 3)} greet=${greet(\"Perry\")} " +"sum=${sum(1, 2, 3)} double=${double(5)}`)\n" "}\n" "```" #: src/language/supported-features.md:60 src/api/reference.md:223 #: src/api/reference.md:257 src/api/reference.md:291 src/api/reference.md:349 -#: src/api/reference.md:373 src/api/reference.md:460 src/api/reference.md:507 -#: src/api/reference.md:528 src/api/reference.md:553 src/api/reference.md:828 -#: src/api/reference.md:911 src/api/reference.md:959 src/api/reference.md:979 -#: src/api/reference.md:1088 src/api/reference.md:1166 -#: src/api/reference.md:1205 src/api/reference.md:1254 -#: src/api/reference.md:1282 src/api/reference.md:1443 -#: src/api/reference.md:1651 src/api/reference.md:1674 -#: src/api/reference.md:1728 src/api/reference.md:1759 -#: src/api/reference.md:1813 src/api/reference.md:1876 -#: src/api/reference.md:2008 src/api/reference.md:2150 +#: src/api/reference.md:373 src/api/reference.md:462 src/api/reference.md:509 +#: src/api/reference.md:530 src/api/reference.md:555 src/api/reference.md:830 +#: src/api/reference.md:913 src/api/reference.md:961 src/api/reference.md:981 +#: src/api/reference.md:1090 src/api/reference.md:1168 +#: src/api/reference.md:1207 src/api/reference.md:1256 +#: src/api/reference.md:1284 src/api/reference.md:1445 +#: src/api/reference.md:1653 src/api/reference.md:1676 +#: src/api/reference.md:1730 src/api/reference.md:1761 +#: src/api/reference.md:1815 src/api/reference.md:1859 +#: src/api/reference.md:1993 src/api/reference.md:2135 #: src/api/reference.md:2371 src/api/reference.md:2860 #: src/api/reference.md:2873 src/api/reference.md:2944 #: src/api/reference.md:3006 src/api/reference.md:3115 @@ -3894,11 +3942,11 @@ msgid "" " console.log(item);\n" " }\n" "\n" -" console.log(`arrays: len=${len} doubled=${doubled.length} filtered=" -"${filtered.length} sum=${sum} found=${found} idx=${idx} joined=${joined} " -"sliced=${sliced.length} sorted=${sorted.length} reversed=${reversed.length} " -"includes=${includes} every=${every} some=${some} flat=${flat.length} " -"concatted=${concatted.length} arr=${arr.length}`)\n" +" console.log(`arrays: len=${len} doubled=${doubled.length} " +"filtered=${filtered.length} sum=${sum} found=${found} idx=${idx} " +"joined=${joined} sliced=${sliced.length} sorted=${sorted.length} " +"reversed=${reversed.length} includes=${includes} every=${every} some=${some} " +"flat=${flat.length} concatted=${concatted.length} arr=${arr.length}`)\n" "}\n" "```" msgstr "" @@ -3940,11 +3988,11 @@ msgstr "" " console.log(item);\n" " }\n" "\n" -" console.log(`arrays: len=${len} doubled=${doubled.length} filtered=" -"${filtered.length} sum=${sum} found=${found} idx=${idx} joined=${joined} " -"sliced=${sliced.length} sorted=${sorted.length} reversed=${reversed.length} " -"includes=${includes} every=${every} some=${some} flat=${flat.length} " -"concatted=${concatted.length} arr=${arr.length}`)\n" +" console.log(`arrays: len=${len} doubled=${doubled.length} " +"filtered=${filtered.length} sum=${sum} found=${found} idx=${idx} " +"joined=${joined} sliced=${sliced.length} sorted=${sorted.length} " +"reversed=${reversed.length} includes=${includes} every=${every} some=${some} " +"flat=${flat.length} concatted=${concatted.length} arr=${arr.length}`)\n" "}\n" "```" @@ -4037,8 +4085,8 @@ msgid "" " }\n" "\n" " process(user)\n" -" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} name=" -"${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" +" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} " +"name=${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" "}\n" "```" msgstr "" @@ -4066,8 +4114,8 @@ msgstr "" " }\n" "\n" " process(user)\n" -" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} name=" -"${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" +" console.log(`destructuring: a=${a} b=${b} rest=${rest.length} " +"name=${name} age=${age} email=${email} userName=${userName} id=${id}`)\n" "}\n" "```" @@ -4087,8 +4135,8 @@ msgid "" "`;\n" " const expr = `Result: ${1 + 2}`;\n" "\n" -" console.log(`template-literals: greeting=${greeting} multiline_len=" -"${multiline.length} expr=${expr}`)\n" +" console.log(`template-literals: greeting=${greeting} " +"multiline_len=${multiline.length} expr=${expr}`)\n" "}\n" "```" msgstr "" @@ -4102,8 +4150,8 @@ msgstr "" "`;\n" " const expr = `Result: ${1 + 2}`;\n" "\n" -" console.log(`template-literals: greeting=${greeting} multiline_len=" -"${multiline.length} expr=${expr}`)\n" +" console.log(`template-literals: greeting=${greeting} " +"multiline_len=${multiline.length} expr=${expr}`)\n" "}\n" "```" @@ -4241,9 +4289,10 @@ msgstr "" "```" #: src/language/supported-features.md:319 +#, fuzzy msgid "" -"Perry compiles async functions to a state machine backed by Tokio's async " -"runtime." +"Perry compiles async functions to a state machine driven by its own event " +"loop (turnloop)." msgstr "" "Perry compile les fonctions async en une machine à états soutenue par le " "runtime async de Tokio." @@ -5485,8 +5534,8 @@ msgstr "" #: src/language/native-values.md:90 msgid "" "```typescript,no-test\n" -"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/native" -"\";\n" +"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/" +"native\";\n" "\n" "const delta = i8(dynamicDelta);\n" "const offset16 = i16(dynamicOffset);\n" @@ -5500,8 +5549,8 @@ msgid "" "```" msgstr "" "```typescript,no-test\n" -"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/native" -"\";\n" +"import { i8, i16, u8, u16, i32, u32, u64, isize, f32 } from \"perry/" +"native\";\n" "\n" "const delta = i8(dynamicDelta);\n" "const offset16 = i16(dynamicOffset);\n" @@ -6128,14 +6177,14 @@ msgstr "Pas d'eval() ni de code dynamique" msgid "" "Perry compiles to native code ahead of time. It cannot evaluate a code " "string that is only known at runtime. A _constant_ code string is the " -"exception — `eval(\"1 + 1\")` and `new Function(\"a\", \"b\", \"return a + b" -"\")` are compiled to real native functions (#1679). Only a body built from " +"exception — `eval(\"1 + 1\")` and `new Function(\"a\", \"b\", \"return a + " +"b\")` are compiled to real native functions (#1679). Only a body built from " "runtime data hits this limit:" msgstr "" "Perry compile en code natif à l'avance. Il ne peut pas évaluer une chaîne de " "code qui n'est connue qu'à l'exécution. Une chaîne de code _constant_ est " -"l'exception `eval(\"1 + 1\")` et `new Function(\"a\", \"b\", \"return a + b" -"\")` sont compilées en fonctions natives réelles (#1679). Seul un corps " +"l'exception `eval(\"1 + 1\")` et `new Function(\"a\", \"b\", \"return a + " +"b\")` sont compilées en fonctions natives réelles (#1679). Seul un corps " "construit à partir de données d'exécution atteint cette limite:" #: src/language/limitations.md:37 @@ -6413,18 +6462,18 @@ msgid "" "The same strict controls apply to runtime-computed dynamic `import()` " "(#5230). The broad `perry.strict = true` covers both eval and dynamic " "import. For a knob scoped to dynamic imports only, use `--strict-dynamic-" -"import` or `\"perry\": { \"dynamicImport\": \"error\" }` (accepts `\"defer" -"\"` (default) or `\"error\"`); the dedicated knob overrides the broad `perry." -"strict` for import sites. `PERRY_ALLOW_EVAL=1` is the shared AOT escape " -"hatch — it forces defer for both eval and dynamic import." +"import` or `\"perry\": { \"dynamicImport\": \"error\" }` (accepts " +"`\"defer\"` (default) or `\"error\"`); the dedicated knob overrides the " +"broad `perry.strict` for import sites. `PERRY_ALLOW_EVAL=1` is the shared " +"AOT escape hatch — it forces defer for both eval and dynamic import." msgstr "" "Les mêmes contrôles stricts s'appliquent à `import()` (#5230) dynamique " "calculé en temps d'exécution. Le large `perry.strict = true` couvre à la " "fois eval et importation dynamique. Pour un bouton destiné uniquement aux " "importations dynamiques, utilisez `--strict-dynamic-import` ou `\"perry\": " -"{ \"dynamicImport\": \"error\" }` (accepte `\"defer\"` (par défaut) ou `" -"\"error\"`); le bouton dédié remplace le large `perry.strict` pour les sites " -"d'importation. `PERRY_ALLOW_EVAL=1` est la trappe d'échappement AOT " +"{ \"dynamicImport\": \"error\" }` (accepte `\"defer\"` (par défaut) ou " +"`\"error\"`); le bouton dédié remplace le large `perry.strict` pour les " +"sites d'importation. `PERRY_ALLOW_EVAL=1` est la trappe d'échappement AOT " "partagée elle force à reporter à la fois l'évaluation et l'importation " "dynamique." @@ -7165,8 +7214,8 @@ msgstr "" #: src/packages/porting.md:35 msgid "" -"Packages that ship `.node` files, `binding.gyp`, `prebuilds/`, or a `" -"\"gypfile\"` package marker are compiled against Node's native addon ABI. " +"Packages that ship `.node` files, `binding.gyp`, `prebuilds/`, or a " +"`\"gypfile\"` package marker are compiled against Node's native addon ABI. " "The JavaScript entry point is usually just loader glue around a shared " "library that expects Node-API/N-API, NAN, V8, libuv, or Node internals. " "Perry does not host that ABI as part of `compilePackages`. Common examples " @@ -7931,7 +7980,7 @@ msgstr "" "exporté par la staticlib ainsi que sa signature visible côté TypeScript :" #: src/native-libraries/overview.md:129 -#: src/native-libraries/authoring-guide.md:126 +#: src/native-libraries/authoring-guide.md:128 #: src/native-libraries/manifest-v1.md:517 src/plugins/native-extensions.md:63 #: src/plugins/appstore-review.md:189 msgid "\"functions\"" @@ -7942,7 +7991,7 @@ msgid "\"js_mysql2_create_connection\"" msgstr "\"js_mysql2_create_connection\"" #: src/native-libraries/overview.md:132 src/native-libraries/overview.md:137 -#: src/native-libraries/authoring-guide.md:129 +#: src/native-libraries/authoring-guide.md:131 #: src/native-libraries/manifest-v1.md:518 #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 src/plugins/native-extensions.md:64 @@ -7956,7 +8005,7 @@ msgid "\"jsvalue\"" msgstr "\"jsvalue\"" #: src/native-libraries/overview.md:133 src/native-libraries/overview.md:138 -#: src/native-libraries/authoring-guide.md:130 +#: src/native-libraries/authoring-guide.md:132 #: src/native-libraries/manifest-v1.md:518 #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 src/plugins/native-extensions.md:64 @@ -7978,7 +8027,7 @@ msgid "\"i64\"" msgstr "\"i64\"" #: src/native-libraries/overview.md:137 -#: src/native-libraries/authoring-guide.md:130 +#: src/native-libraries/authoring-guide.md:132 #: src/native-libraries/manifest-v1.md:519 #: src/native-libraries/manifest-v1.md:520 msgid "\"string\"" @@ -8049,12 +8098,13 @@ msgid "5. Runtime" msgstr "5. Exécution" #: src/native-libraries/overview.md:172 +#, fuzzy msgid "" "User code runs. Calls into `js_mysql2_*` happen at native speed — function " "call overhead is one register-pass for the receiver handle plus one each per " "param. Promise resolution / closure invocation / async work bridge through " -"perry-ffi's surface (`JsPromise`, `JsClosure`, `spawn_blocking + tokio::" -"Handle::current().block_on`). The wrapper sees Perry's NaN-boxed JsValues " +"perry-ffi's surface (`JsPromise`, `JsClosure`, `spawn_blocking` / `pool::" +"submit`, `turnloop_net`). The wrapper sees Perry's NaN-boxed JsValues " "directly; user TypeScript sees a normal Promise / object / array." msgstr "" "Le code utilisateur s'exécute. Les appels vers `js_mysql2_*` s'effectuent à " @@ -8289,9 +8339,9 @@ msgstr "(c)" #: src/native-libraries/overview.md:253 #, fuzzy msgid "" -"Compatibility path: `import 'mysql2'` / `import 'mongodb'` route to in-tree " -"Rust wrappers. They remain available until the source-package migration " -"gates pass. `pg` has already migrated off this path — see the row below." +"Compatibility path: `import 'mysql2'` routes to an in-tree Rust wrapper. It " +"remains available until the source-package migration gates pass. `pg` and " +"`mongodb` have already migrated off this path — see the row below." msgstr "" "Chemin de compatibilité: route `import 'mysql2'` / `import 'pg'` / `import " "'mongodb'` vers les enveloppes Rust dans l'arbre. Ils restent disponibles " @@ -8359,18 +8409,18 @@ msgstr "**Quand choisir quoi :**" #: src/native-libraries/overview.md:266 #, fuzzy msgid "" -"**Well-known native (`mysql2` / `mongodb`)** — current zero-install " -"compatibility path; its feature set tracks Perry's release cadence and it is " -"scheduled to yield to compiled package source. `pg` no longer has a native " -"binding: a plain `import ... from \"pg\"` compiles the real npm `pg` package " -"from source instead." +"**Well-known native (`mysql2`)** — current zero-install compatibility path; " +"its feature set tracks Perry's release cadence and it is scheduled to yield " +"to compiled package source. `pg` and `mongodb` no longer have a native " +"binding: a plain `import ... from \"pg\"` or `import { MongoClient } from " +"\"mongodb\"` compiles the real npm package from source instead." msgstr "" "**Native bien connu (`mysql2` / `pg` / `mongodb`)** le chemin de " "compatibilité zéro installation actuel; son ensemble de fonctionnalités suit " "la cadence de sortie de Perry et il est prévu qu'il renonce à la source du " "paquet compilé." -#: src/native-libraries/overview.md:271 +#: src/native-libraries/overview.md:272 msgid "" "**`@perryts/postgres` / `@perryts/mysql` / `@perryts/mongodb` / `@perryts/" "redis`** — you want to read / fork / patch the driver in plain TypeScript; " @@ -8383,7 +8433,7 @@ msgstr "" "repli ; vous avez besoin d'une fonctionnalité avant la prochaine publication " "de Perry." -#: src/native-libraries/overview.md:275 +#: src/native-libraries/overview.md:276 msgid "" "**External native binding** — you're wrapping a Rust crate that doesn't have " "a JS-only equivalent (Tursodb's embedded SQLite- compatible engine, Iroh's " @@ -8393,23 +8443,23 @@ msgstr "" "d'équivalent purement JS (moteur SQLite embarqué de Tursodb, transport QUIC " "d'Iroh)." -#: src/native-libraries/overview.md:279 +#: src/native-libraries/overview.md:280 msgid "Concrete how-tos" msgstr "Guides pratiques" -#: src/native-libraries/overview.md:281 +#: src/native-libraries/overview.md:282 msgid "If you want to …" msgstr "Si vous souhaitez …" -#: src/native-libraries/overview.md:281 +#: src/native-libraries/overview.md:282 msgid "Read" msgstr "Lire" -#: src/native-libraries/overview.md:283 +#: src/native-libraries/overview.md:284 msgid "**Use a currently bundled compatibility shim**" msgstr "**Utilisez une fonctionnalité de compatibilité actuellement fournie**" -#: src/native-libraries/overview.md:283 +#: src/native-libraries/overview.md:284 msgid "" "`import` it directly, or explicitly select the installed package in `perry." "compilePackages` to exercise the preferred source path." @@ -8417,11 +8467,11 @@ msgstr "" "`import` directement, ou sélectionnez explicitement le paquet installé dans " "`perry.compilePackages` pour exercer le chemin source préféré." -#: src/native-libraries/overview.md:284 +#: src/native-libraries/overview.md:285 msgid "**Use a third-party native binding**" msgstr "**Utiliser un binding natif tiers**" -#: src/native-libraries/overview.md:284 +#: src/native-libraries/overview.md:285 msgid "" "`bun add `, then `import`. Perry's resolver finds it via " "`node_modules//package.json`." @@ -8429,19 +8479,19 @@ msgstr "" "`bun add `, puis `import`. Le résolveur de Perry le trouve via " "`node_modules//package.json`." -#: src/native-libraries/overview.md:285 +#: src/native-libraries/overview.md:286 msgid "**Find which packages ship out-of-the-box**" msgstr "**Connaître les packages fournis prêts à l'emploi**" -#: src/native-libraries/overview.md:285 src/cli/commands.md:416 +#: src/native-libraries/overview.md:286 src/cli/commands.md:416 msgid "`perry native list`" msgstr "`perry native list`" -#: src/native-libraries/overview.md:286 +#: src/native-libraries/overview.md:287 msgid "**Write your own native binding**" msgstr "**Écrire votre propre binding natif**" -#: src/native-libraries/overview.md:286 +#: src/native-libraries/overview.md:287 msgid "" "`perry native init my-bindings` scaffolds the Cargo crate + `package.json` + " "`release.yml` for prebuilds. Then read [`abi.md`](abi.md) for the perry-ffi " @@ -8452,11 +8502,11 @@ msgstr "" "md`](abi.md) pour la surface perry-ffi et [`manifest-v1.md`](manifest-v1.md) " "pour le schéma du manifeste." -#: src/native-libraries/overview.md:287 +#: src/native-libraries/overview.md:288 msgid "**Verify your binding's manifest matches its `.a`**" msgstr "**Vérifier que le manifeste de votre binding correspond à son `.a`**" -#: src/native-libraries/overview.md:287 +#: src/native-libraries/overview.md:288 msgid "" "`cd my-bindings && perry native validate` (runs `cargo build --release`, " "walks `nm -gP` over the staticlib, diffs against `functions[]`, reports " @@ -8466,11 +8516,11 @@ msgstr "" "parcourt `nm -gP` sur la staticlib, compare avec `functions[]`, signale les " "symboles manquants ou non déclarés)." -#: src/native-libraries/overview.md:288 +#: src/native-libraries/overview.md:289 msgid "**Override a well-known binding**" msgstr "**Remplacer un binding connu**" -#: src/native-libraries/overview.md:288 +#: src/native-libraries/overview.md:289 msgid "" "Install your fork into `node_modules//` with a `perry.nativeLibrary` " "block. Resolution layer (a) wins over layer (c)." @@ -8478,11 +8528,11 @@ msgstr "" "Installez votre fork dans `node_modules//` avec un bloc `perry." "nativeLibrary`. La couche de résolution (a) l'emporte sur la couche (c)." -#: src/native-libraries/overview.md:289 +#: src/native-libraries/overview.md:290 msgid "**See what stdlib APIs Perry implements**" msgstr "**Voir quelles API stdlib Perry implémente**" -#: src/native-libraries/overview.md:289 +#: src/native-libraries/overview.md:290 msgid "" "Auto-generated from the manifest: [`docs/src/api/reference.md`](../api/" "reference.md). The `perry types` command writes a current snapshot to `." @@ -8492,20 +8542,20 @@ msgstr "" "(../api/reference.md). La commande `perry types` écrit un instantané courant " "dans `.perry/types/stdlib/index.d.ts` pour les indications de l'éditeur." -#: src/native-libraries/overview.md:291 +#: src/native-libraries/overview.md:292 msgid "Authoring a binding — the 60-second tour" msgstr "Créer un binding — le tour en 60 secondes" -#: src/native-libraries/overview.md:294 +#: src/native-libraries/overview.md:295 #, fuzzy msgid "# Scaffold\n" msgstr "# Scaffold" -#: src/native-libraries/overview.md:295 +#: src/native-libraries/overview.md:296 msgid "\"PDF rendering bindings\"" msgstr "\"Bindings de rendu PDF\"" -#: src/native-libraries/overview.md:321 +#: src/native-libraries/overview.md:322 msgid "" "A user can now `bun add my-pdf` and `import { renderPdf } from \"my-pdf\"` " "in their Perry program." @@ -8513,11 +8563,11 @@ msgstr "" "Un utilisateur peut maintenant faire `bun add my-pdf` et `import " "{ renderPdf } from \"my-pdf\"` dans son programme Perry." -#: src/native-libraries/overview.md:324 +#: src/native-libraries/overview.md:325 msgid "Versioning policy" msgstr "Politique de versionnage" -#: src/native-libraries/overview.md:326 +#: src/native-libraries/overview.md:327 msgid "" "**`perry-ffi`** semver: tracks Perry's minor today (`perry-ffi = \"0.5\"` " "for Perry `0.5.x`). Backwards-incompatible changes to anything documented in " @@ -8532,7 +8582,7 @@ msgstr "" "utilisent une révision testée de la caisse Perry `0.5.x`; voir [Consommation " "actuelle](#consumption-today-v05x)." -#: src/native-libraries/overview.md:331 +#: src/native-libraries/overview.md:332 msgid "" "**Manifest spec v1**: locked at `abiVersion: \"0.5\"`; missing field is " "warning-only in v0.5.x, hard error from v0.6.0. Schema changes bump the spec " @@ -8543,7 +8593,7 @@ msgstr "" "partir de v0.6.0. Les changements de schéma incrémentent la version de spec " "(`v2`) et sont livrés avec un nouveau fichier de schéma de manifeste." -#: src/native-libraries/overview.md:335 +#: src/native-libraries/overview.md:336 msgid "" "**Wrappers**: each ships independent semver; users `bun update` a binding " "without touching Perry." @@ -8551,11 +8601,11 @@ msgstr "" "**Wrappers** : chacun dispose d'un semver indépendant ; les utilisateurs " "font `bun update` d'un binding sans toucher à Perry." -#: src/native-libraries/overview.md:338 +#: src/native-libraries/overview.md:339 msgid "Consumption today (v0.5.x)" msgstr "Utilisation actuelle (v0.5.x)" -#: src/native-libraries/overview.md:340 +#: src/native-libraries/overview.md:341 msgid "" "`perry-ffi` owns its public ABI types, but it is not currently available " "from crates.io. Publishing it requires publishing the optional `perry-" @@ -8568,21 +8618,21 @@ msgstr "" "dépendance de l'espace de travail. Les enveloppes externes utilisent la " "dépendance du référentiel émise par `perry native init`:" -#: src/native-libraries/overview.md:345 src/native-libraries/abi.md:26 +#: src/native-libraries/overview.md:346 src/native-libraries/abi.md:26 msgid "" "```toml\n" "[dependencies]\n" -"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = \"main" -"\" }\n" +"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = " +"\"main\" }\n" "```" msgstr "" "```toml\n" "[dependencies]\n" -"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = \"main" -"\" }\n" +"perry-ffi = { git = \"https://github.com/PerryTS/perry\", branch = " +"\"main\" }\n" "```" -#: src/native-libraries/overview.md:350 +#: src/native-libraries/overview.md:351 msgid "" "Pin a tested Perry tag or commit for a released wrapper rather than " "following `main` indefinitely. Leave the optional `runtime-link` feature off " @@ -8599,11 +8649,11 @@ msgstr "" "l'archive d'exécution à l'étape de lien final d'une application. Voir [`abi." "md`](abi.md#versioning-and-dependency-setup) pour le contrat exact." -#: src/native-libraries/overview.md:357 +#: src/native-libraries/overview.md:358 msgid "Limits" msgstr "Limitations" -#: src/native-libraries/overview.md:359 +#: src/native-libraries/overview.md:360 msgid "" "Bindings are **build-time linked**. Perry doesn't `dlopen` plugins at " "runtime — the staticlib joins the link line, the binary stands on its own." @@ -8612,7 +8662,7 @@ msgstr "" "`dlopen` pour charger des plugins à l'exécution — la staticlib s'intègre à " "la ligne de liaison, le binaire est autonome." -#: src/native-libraries/overview.md:362 +#: src/native-libraries/overview.md:363 msgid "" "Bindings can't bring their own JS runtime — they extend Perry's, not replace " "it. A binding that wants its own GC / event loop / threading is out of scope." @@ -8621,7 +8671,7 @@ msgstr "" "celui de Perry, sans le remplacer. Un binding qui souhaite son propre GC / " "boucle d'événements / threading est hors du périmètre." -#: src/native-libraries/overview.md:365 +#: src/native-libraries/overview.md:366 msgid "" "Cross-target prebuilds are the binding author's responsibility. The " "scaffolded GitHub Actions workflow handles the common matrix (x86_64+aarch64 " @@ -8632,15 +8682,15 @@ msgstr "" "matrice courante (x86_64+aarch64 macOS/Linux + Windows) ; les autres cibles " "nécessitent des ajouts manuels." -#: src/native-libraries/overview.md:370 +#: src/native-libraries/overview.md:371 msgid "Next pages" msgstr "Pages suivantes" -#: src/native-libraries/overview.md:372 +#: src/native-libraries/overview.md:373 msgid "[`abi.md`](abi.md) — the perry-ffi surface, reference grade." msgstr "[`abi.md`](abi.md) — la surface perry-ffi, niveau référence." -#: src/native-libraries/overview.md:373 +#: src/native-libraries/overview.md:374 msgid "" "[`manifest-v1.md`](manifest-v1.md) — the `perry.nativeLibrary` schema, every " "field documented." @@ -8648,7 +8698,7 @@ msgstr "" "[`manifest-v1.md`](manifest-v1.md) — le schéma `perry.nativeLibrary`, chaque " "champ documenté." -#: src/native-libraries/overview.md:375 +#: src/native-libraries/overview.md:376 msgid "" "[API reference](../api/reference.md) — auto-generated list of every stdlib " "symbol Perry implements." @@ -8689,7 +8739,7 @@ msgstr "" "npm." #: src/native-libraries/governance.md:14 src/ui/multi-window.md:133 -#: src/widgets/data-fetching.md:134 src/internals/node-api-host.md:54 +#: src/widgets/data-fetching.md:134 src/internals/node-api-host.md:58 msgid "Policy" msgstr "Politique" @@ -8935,7 +8985,7 @@ msgstr "Statut actuel" msgid "`perry-ext-ads`" msgstr "`perry-ext-ads`" -#: src/native-libraries/governance.md:101 src/api/reference.md:2187 +#: src/native-libraries/governance.md:101 src/api/reference.md:2172 msgid "`perry/ads`" msgstr "`perry/ads`" @@ -8962,18 +9012,18 @@ msgstr "`argon2`" #: src/native-libraries/governance.md:102 #: src/native-libraries/governance.md:103 #: src/native-libraries/governance.md:104 +#: src/native-libraries/governance.md:110 +#: src/native-libraries/governance.md:111 #: src/native-libraries/governance.md:112 -#: src/native-libraries/governance.md:113 -#: src/native-libraries/governance.md:114 msgid "External integration" msgstr "Intégration extérieure" #: src/native-libraries/governance.md:102 #: src/native-libraries/governance.md:103 #: src/native-libraries/governance.md:104 +#: src/native-libraries/governance.md:110 +#: src/native-libraries/governance.md:111 #: src/native-libraries/governance.md:112 -#: src/native-libraries/governance.md:113 -#: src/native-libraries/governance.md:114 msgid "Move to an external native package" msgstr "Passer à un paquetage natif externe" @@ -8983,12 +9033,11 @@ msgstr "Passer à un paquetage natif externe" #: src/native-libraries/governance.md:105 #: src/native-libraries/governance.md:106 #: src/native-libraries/governance.md:109 +#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:111 #: src/native-libraries/governance.md:112 #: src/native-libraries/governance.md:113 #: src/native-libraries/governance.md:114 -#: src/native-libraries/governance.md:116 -#: src/native-libraries/governance.md:117 msgid "Bundled; migration pending" msgstr "En attente de migration" @@ -9012,25 +9061,23 @@ msgstr "`better-sqlite3`" msgid "`perry-ext-cheerio`" msgstr "`perry-ext-cheerio`" -#: src/native-libraries/governance.md:105 src/api/reference.md:487 +#: src/native-libraries/governance.md:105 src/api/reference.md:489 msgid "`cheerio`" msgstr "`cheerio`" #: src/native-libraries/governance.md:105 #: src/native-libraries/governance.md:106 #: src/native-libraries/governance.md:109 -#: src/native-libraries/governance.md:111 -#: src/native-libraries/governance.md:116 -#: src/native-libraries/governance.md:117 +#: src/native-libraries/governance.md:113 +#: src/native-libraries/governance.md:114 msgid "Source package" msgstr "Paquet source" #: src/native-libraries/governance.md:105 #: src/native-libraries/governance.md:106 #: src/native-libraries/governance.md:109 -#: src/native-libraries/governance.md:111 -#: src/native-libraries/governance.md:116 -#: src/native-libraries/governance.md:117 +#: src/native-libraries/governance.md:113 +#: src/native-libraries/governance.md:114 msgid "Compile the upstream package source" msgstr "Compiler la source du paquet en amont" @@ -9038,82 +9085,60 @@ msgstr "Compiler la source du paquet en amont" msgid "`perry-ext-ethers`" msgstr "`perry-ext-ethers`" -#: src/native-libraries/governance.md:106 src/api/reference.md:1192 +#: src/native-libraries/governance.md:106 src/api/reference.md:1194 msgid "`ethers`" msgstr "`ethers`" #: src/native-libraries/governance.md:107 -msgid "`perry-ext-events`" -msgstr "`perry-ext-events`" +msgid "`perry-ext-http`" +msgstr "`perry-ext-http`" -#: src/native-libraries/governance.md:107 src/api/reference.md:1203 -msgid "`events`" -msgstr "`events`" +#: src/native-libraries/governance.md:107 +msgid "`http`
`http2`
`https`" +msgstr "`http`
`http2`
`https`" #: src/native-libraries/governance.md:107 #: src/native-libraries/governance.md:108 -#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:115 -#: src/native-libraries/governance.md:118 -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "Runtime API" msgstr "API en cours d'exécution" #: src/native-libraries/governance.md:107 #: src/native-libraries/governance.md:108 -#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:115 -#: src/native-libraries/governance.md:118 -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "Keep near core; consolidate when practical" msgstr "Gardez près du noyau; consolider lorsque cela est pratique" #: src/native-libraries/governance.md:107 #: src/native-libraries/governance.md:108 -#: src/native-libraries/governance.md:110 #: src/native-libraries/governance.md:115 -#: src/native-libraries/governance.md:118 -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "Bundled; retained" msgstr "En paquet; conservés" #: src/native-libraries/governance.md:108 -msgid "`perry-ext-http`" -msgstr "`perry-ext-http`" - -#: src/native-libraries/governance.md:108 -msgid "`http`
`http2`
`https`" -msgstr "`http`
`http2`
`https`" - -#: src/native-libraries/governance.md:109 -msgid "`perry-ext-mongodb`" -msgstr "`perry-ext-mongodb`" - -#: src/native-libraries/governance.md:109 src/api/reference.md:1855 -msgid "`mongodb`" -msgstr "`mongodb`" - -#: src/native-libraries/governance.md:110 msgid "`perry-ext-net`" msgstr "`perry-ext-net`" -#: src/native-libraries/governance.md:110 src/api/reference.md:1874 +#: src/native-libraries/governance.md:108 src/api/reference.md:1857 msgid "`net`" msgstr "`net`" -#: src/native-libraries/governance.md:111 +#: src/native-libraries/governance.md:109 msgid "`perry-ext-nodemailer`" msgstr "`perry-ext-nodemailer`" -#: src/native-libraries/governance.md:111 src/api/reference.md:2030 +#: src/native-libraries/governance.md:109 src/api/reference.md:2015 msgid "`nodemailer`" msgstr "`nodemailer`" -#: src/native-libraries/governance.md:112 +#: src/native-libraries/governance.md:110 msgid "`perry-ext-parcel-watcher`" msgstr "`perry-ext-parcel-watcher`" -#: src/native-libraries/governance.md:112 +#: src/native-libraries/governance.md:110 msgid "" "`@parcel/watcher`
`@parcel/watcher-darwin-arm64`
`@parcel/watcher-" "darwin-x64`
`@parcel/watcher-linux-arm64-glibc`
`@parcel/watcher-linux-" @@ -9125,59 +9150,51 @@ msgstr "" "arm64-musl`
`@parcel/watcher-linux-x64-glibc`
`@parcel/watcher-linux-" "x64-musl`
`@parcel/watcher-win32-arm64`
`@parcel/watcher-win32-x64`" -#: src/native-libraries/governance.md:113 +#: src/native-libraries/governance.md:111 msgid "`perry-ext-pdf`" msgstr "`perry-ext-pdf`" -#: src/native-libraries/governance.md:113 src/api/reference.md:192 +#: src/native-libraries/governance.md:111 src/api/reference.md:192 msgid "`@perryts/pdf`" msgstr "`@perryts/pdf`" -#: src/native-libraries/governance.md:114 +#: src/native-libraries/governance.md:112 msgid "`perry-ext-sharp`" msgstr "`perry-ext-sharp`" -#: src/native-libraries/governance.md:114 src/api/reference.md:2914 +#: src/native-libraries/governance.md:112 src/api/reference.md:2914 msgid "`sharp`" msgstr "`sharp`" -#: src/native-libraries/governance.md:115 -msgid "`perry-ext-streams`" -msgstr "`perry-ext-streams`" - -#: src/native-libraries/governance.md:115 src/api/reference.md:3139 -msgid "`streams`" -msgstr "`streams`" - -#: src/native-libraries/governance.md:116 +#: src/native-libraries/governance.md:113 msgid "`perry-ext-typescript`" msgstr "`perry-ext-typescript`" -#: src/native-libraries/governance.md:116 src/api/reference.md:3363 +#: src/native-libraries/governance.md:113 src/api/reference.md:3363 msgid "`typescript`" msgstr "`typescript`" -#: src/native-libraries/governance.md:117 +#: src/native-libraries/governance.md:114 msgid "`perry-ext-undici`" msgstr "`perry-ext-undici`" -#: src/native-libraries/governance.md:117 src/api/reference.md:3376 +#: src/native-libraries/governance.md:114 src/api/reference.md:3376 msgid "`undici`" msgstr "`undici`" -#: src/native-libraries/governance.md:118 +#: src/native-libraries/governance.md:115 msgid "`perry-ext-ws`" msgstr "`perry-ext-ws`" -#: src/native-libraries/governance.md:118 src/api/reference.md:3681 +#: src/native-libraries/governance.md:115 src/api/reference.md:3681 msgid "`ws`" msgstr "`ws`" -#: src/native-libraries/governance.md:119 +#: src/native-libraries/governance.md:116 msgid "`perry-ext-zlib`" msgstr "`perry-ext-zlib`" -#: src/native-libraries/governance.md:119 src/api/reference.md:3721 +#: src/native-libraries/governance.md:116 src/api/reference.md:3721 msgid "`zlib`" msgstr "`zlib`" @@ -9281,12 +9298,12 @@ msgstr "" "/// cette paire depuis un paramètre manifeste `buffer+len`.\n" #: src/native-libraries/authoring-guide.md:65 -#: src/native-libraries/authoring-guide.md:360 -#: src/native-libraries/authoring-guide.md:396 -#: src/native-libraries/authoring-guide.md:401 -#: src/native-libraries/authoring-guide.md:436 -#: src/native-libraries/authoring-guide.md:445 src/native-libraries/abi.md:106 -#: src/native-libraries/abi.md:148 src/native-libraries/abi.md:157 +#: src/native-libraries/authoring-guide.md:369 +#: src/native-libraries/authoring-guide.md:415 +#: src/native-libraries/authoring-guide.md:420 +#: src/native-libraries/authoring-guide.md:455 +#: src/native-libraries/authoring-guide.md:464 src/native-libraries/abi.md:106 +#: src/native-libraries/abi.md:177 src/native-libraries/abi.md:186 #: src/plugins/native-extensions.md:183 src/plugins/native-extensions.md:191 #: src/plugins/native-extensions.md:283 msgid "\"C\"" @@ -9324,19 +9341,19 @@ msgstr "" #: src/native-libraries/authoring-guide.md:89 msgid "" -"**Async returns `*mut Promise`**. Pattern: `JsPromise::new()` → " -"`spawn_blocking(move || { tokio::runtime::Handle::current().block_on(async " -"{...}); promise.resolve(...) })` → return `promise.as_raw()`." +"**Async returns `*mut Promise`**. Pattern: `JsPromise::new()` → `perry_ffi::" +"pool::submit(work, deliver)` (bounded CPU work; `deliver` settles the " +"promise on the owning thread) or `spawn_blocking(move || { …; promise." +"resolve_with(...) })` → return `promise.as_raw()`. There is no tokio runtime " +"to `block_on`: Perry runs on turnloop, and socket I/O goes through " +"`perry_ffi::turnloop_net`." msgstr "" -"**Les retours async sont `*mut Promise`**. Modèle : `JsPromise::new()` → " -"`spawn_blocking(move || { tokio::runtime::Handle::current().block_on(async " -"{...}); promise.resolve(...) })` → retourner `promise.as_raw()`." -#: src/native-libraries/authoring-guide.md:93 +#: src/native-libraries/authoring-guide.md:95 msgid "`src/index.ts`" msgstr "`src/index.ts`" -#: src/native-libraries/authoring-guide.md:95 +#: src/native-libraries/authoring-guide.md:97 msgid "" "Declare the FFI symbol from your manifest, then export the TypeScript " "surface user code imports. Perry's FFI dispatch keys on the call-site " @@ -9349,12 +9366,12 @@ msgstr "" "appeler explicitement le symbole `js_*` listé dans `perry.nativeLibrary." "functions[]`." -#: src/native-libraries/authoring-guide.md:111 src/cli/perry-toml.md:583 +#: src/native-libraries/authoring-guide.md:113 src/cli/perry-toml.md:583 #: src/cli/perry-toml.md:584 msgid "`package.json`" msgstr "`package.json`" -#: src/native-libraries/authoring-guide.md:113 +#: src/native-libraries/authoring-guide.md:115 msgid "" "The `perry.nativeLibrary` block tells Perry's compiler about every `extern " "\"C\"` export plus the build config. Schema details in [`manifest-v1.md`]" @@ -9364,23 +9381,23 @@ msgstr "" "`extern \"C\"` ainsi que la configuration de compilation. Détails du schéma " "dans [`manifest-v1.md`](manifest-v1.md)." -#: src/native-libraries/authoring-guide.md:119 +#: src/native-libraries/authoring-guide.md:121 msgid "\"my-bindings\"" msgstr "\"Mes liens\"" -#: src/native-libraries/authoring-guide.md:121 -#: src/native-libraries/authoring-guide.md:122 +#: src/native-libraries/authoring-guide.md:123 +#: src/native-libraries/authoring-guide.md:124 #: src/plugins/native-extensions.md:60 msgid "\"src/index.ts\"" msgstr "\"src/index.ts\"" -#: src/native-libraries/authoring-guide.md:122 +#: src/native-libraries/authoring-guide.md:124 msgid "\"types\"" msgstr "\"types\"" -#: src/native-libraries/authoring-guide.md:124 -#: src/native-libraries/authoring-guide.md:272 -#: src/native-libraries/authoring-guide.md:297 src/native-libraries/abi.md:50 +#: src/native-libraries/authoring-guide.md:126 +#: src/native-libraries/authoring-guide.md:274 +#: src/native-libraries/authoring-guide.md:299 src/native-libraries/abi.md:50 #: src/native-libraries/manifest-v1.md:32 #: src/native-libraries/manifest-v1.md:515 src/plugins/native-extensions.md:62 #: src/plugins/appstore-review.md:188 src/cli/allow-perry-features.md:54 @@ -9388,24 +9405,24 @@ msgstr "\"types\"" msgid "\"nativeLibrary\"" msgstr "\"nativeLibrary\"" -#: src/native-libraries/authoring-guide.md:125 src/native-libraries/abi.md:51 +#: src/native-libraries/authoring-guide.md:127 src/native-libraries/abi.md:51 #: src/native-libraries/manifest-v1.md:33 #: src/native-libraries/manifest-v1.md:516 msgid "\"abiVersion\"" msgstr "\"abiVersion\"" -#: src/native-libraries/authoring-guide.md:125 src/native-libraries/abi.md:51 +#: src/native-libraries/authoring-guide.md:127 src/native-libraries/abi.md:51 #: src/native-libraries/manifest-v1.md:33 #: src/native-libraries/manifest-v1.md:516 msgid "\"0.5\"" msgstr "\"0.5\"" -#: src/native-libraries/authoring-guide.md:128 +#: src/native-libraries/authoring-guide.md:130 msgid "\"js_pdf_parse\"" msgstr "\"js_pdf_parse\"" -#: src/native-libraries/authoring-guide.md:129 -#: src/native-libraries/authoring-guide.md:164 +#: src/native-libraries/authoring-guide.md:131 +#: src/native-libraries/authoring-guide.md:166 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:144 #: src/native-libraries/manifest-v1.md:152 @@ -9413,34 +9430,34 @@ msgstr "\"js_pdf_parse\"" #: src/native-libraries/manifest-v1.md:155 #: src/native-libraries/manifest-v1.md:161 #: src/native-libraries/manifest-v1.md:192 -#: src/native-libraries/manifest-v1.md:386 src/cli/flags.md:592 +#: src/native-libraries/manifest-v1.md:386 src/cli/flags.md:596 msgid "\"kind\"" msgstr "\"Bonne\"" -#: src/native-libraries/authoring-guide.md:129 +#: src/native-libraries/authoring-guide.md:131 #: src/native-libraries/manifest-v1.md:153 msgid "\"buffer+len\"" msgstr "\"buffer+len\" ou \"buffer+len\"" -#: src/native-libraries/authoring-guide.md:133 -#: src/native-libraries/authoring-guide.md:273 -#: src/native-libraries/authoring-guide.md:298 +#: src/native-libraries/authoring-guide.md:135 +#: src/native-libraries/authoring-guide.md:275 +#: src/native-libraries/authoring-guide.md:300 #: src/native-libraries/manifest-v1.md:374 #: src/native-libraries/manifest-v1.md:433 #: src/native-libraries/manifest-v1.md:522 src/plugins/native-extensions.md:66 msgid "\"targets\"" msgstr "\"objectifs\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:274 +#: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:276 #: src/native-libraries/manifest-v1.md:375 #: src/native-libraries/manifest-v1.md:523 src/plugins/native-extensions.md:77 msgid "\"macos\"" msgstr "\"macos\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 #: src/native-libraries/manifest-v1.md:435 #: src/native-libraries/manifest-v1.md:523 #: src/native-libraries/manifest-v1.md:524 src/plugins/native-extensions.md:68 @@ -9448,15 +9465,15 @@ msgstr "\"macos\"" msgid "\"crate\"" msgstr "\"casse\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 msgid "\"native\"" msgstr "\"négatif\"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 #: src/native-libraries/manifest-v1.md:436 #: src/native-libraries/manifest-v1.md:523 #: src/native-libraries/manifest-v1.md:524 src/plugins/native-extensions.md:69 @@ -9464,31 +9481,31 @@ msgstr "\"négatif\"" msgid "\"lib\"" msgstr "\" lib \"" -#: src/native-libraries/authoring-guide.md:134 -#: src/native-libraries/authoring-guide.md:135 #: src/native-libraries/authoring-guide.md:136 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:138 msgid "\"perry_ext_my_bindings\"" msgstr "\"perry_ext_my_bindings\"" -#: src/native-libraries/authoring-guide.md:135 -#: src/native-libraries/authoring-guide.md:275 -#: src/native-libraries/authoring-guide.md:310 +#: src/native-libraries/authoring-guide.md:137 +#: src/native-libraries/authoring-guide.md:277 +#: src/native-libraries/authoring-guide.md:312 #: src/native-libraries/manifest-v1.md:524 msgid "\"linux\"" msgstr "\" linux \"" -#: src/native-libraries/authoring-guide.md:136 -#: src/native-libraries/authoring-guide.md:276 -#: src/native-libraries/authoring-guide.md:319 +#: src/native-libraries/authoring-guide.md:138 +#: src/native-libraries/authoring-guide.md:278 +#: src/native-libraries/authoring-guide.md:321 #: src/native-libraries/manifest-v1.md:395 msgid "\"windows\"" msgstr "\"fenêtres\"" -#: src/native-libraries/authoring-guide.md:143 +#: src/native-libraries/authoring-guide.md:145 msgid "Every entry in `functions[]` must:" msgstr "Chaque entrée de `functions[]` doit :" -#: src/native-libraries/authoring-guide.md:144 +#: src/native-libraries/authoring-guide.md:146 msgid "" "have a `name` matching exactly the symbol the staticlib exports (Perry's " "`perry native validate` verifies this for you)" @@ -9496,31 +9513,32 @@ msgstr "" "avoir un `name` correspondant exactement au symbole exporté par la staticlib " "(la commande `perry native validate` de Perry le vérifie pour vous)" -#: src/native-libraries/authoring-guide.md:146 +#: src/native-libraries/authoring-guide.md:148 msgid "declare `params` and `returns` so codegen knows the calling convention" msgstr "" "déclarer `params` et `returns` pour que le codegen connaisse la convention " "d'appel" -#: src/native-libraries/authoring-guide.md:148 +#: src/native-libraries/authoring-guide.md:150 msgid "" "Manifest descriptors are native ABI descriptors, not TypeScript surface " -"types. Existing strings such as `\"string\"`, `\"number\"`, `\"i64\"`, and `" -"\"void\"` still work. Use the explicit vocabulary when you need native " -"precision or metadata: `\"f32\"`, `\"u32\"`, `\"u64\"`, `\"usize\"`, `" -"\"buffer_len\"`, `{ \"kind\": \"buffer+len\" }`, `{ \"kind\": \"handle\", " -"\"type\": \"MyThing\" }`, and `{ \"kind\": \"promise\", \"result\": \"jsvalue" -"\" }`." +"types. Existing strings such as `\"string\"`, `\"number\"`, `\"i64\"`, and " +"`\"void\"` still work. Use the explicit vocabulary when you need native " +"precision or metadata: `\"f32\"`, `\"u32\"`, `\"u64\"`, `\"usize\"`, " +"`\"buffer_len\"`, `{ \"kind\": \"buffer+len\" }`, `{ \"kind\": \"handle\", " +"\"type\": \"MyThing\" }`, and `{ \"kind\": \"promise\", \"result\": " +"\"jsvalue\" }`." msgstr "" "Les descripteurs de manifeste sont des descripteurs ABI natifs, pas des " "types de surface TypeScript. Les chaînes existantes telles que `\"string\"`, " "`\"number\"`, `\"i64\"` et `\"void\"` fonctionnent toujours. Utilisez le " "vocabulaire explicite lorsque vous avez besoin de précision native ou de " -"métadonnées : `\"f32\"`, `\"u32\"`, `\"u64\"`, `\"usize\"`, `\"buffer_len" -"\"`, `{ \"kind\": \"buffer+len\" }`, `{ \"kind\": \"handle\", \"type\": " -"\"MyThing\" }`, et `{ \"kind\": \"promise\", \"result\": \"jsvalue\" }`." +"métadonnées : `\"f32\"`, `\"u32\"`, `\"u64\"`, `\"usize\"`, " +"`\"buffer_len\"`, `{ \"kind\": \"buffer+len\" }`, `{ \"kind\": \"handle\", " +"\"type\": \"MyThing\" }`, et `{ \"kind\": \"promise\", \"result\": " +"\"jsvalue\" }`." -#: src/native-libraries/authoring-guide.md:156 +#: src/native-libraries/authoring-guide.md:158 msgid "" "Handles are opaque Perry native handle objects in JavaScript, not raw " "numbers. Legacy `\"handle\"` and `\"handle\"` descriptors still parse as " @@ -9533,7 +9551,7 @@ msgstr "" "structurés peuvent ajouter la propriété, la nullabilité, l'affinité de " "thread, des noms de débogage et un finaliseur pour les retours possédés :" -#: src/native-libraries/authoring-guide.md:164 +#: src/native-libraries/authoring-guide.md:166 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:144 src/testing/geisterhand.md:68 #: src/testing/geisterhand.md:69 src/testing/geisterhand.md:70 @@ -9543,58 +9561,58 @@ msgstr "" msgid "\"handle\"" msgstr "\"maintenant\"" -#: src/native-libraries/authoring-guide.md:165 +#: src/native-libraries/authoring-guide.md:167 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:145 #: src/native-libraries/manifest-v1.md:159 -#: src/native-libraries/manifest-v1.md:160 +#: src/native-libraries/manifest-v1.md:160 src/cli/debugging.md:40 msgid "\"type\"" msgstr "\"type\"" -#: src/native-libraries/authoring-guide.md:165 -#: src/native-libraries/authoring-guide.md:169 +#: src/native-libraries/authoring-guide.md:167 +#: src/native-libraries/authoring-guide.md:171 #: src/native-libraries/manifest-v1.md:142 #: src/native-libraries/manifest-v1.md:145 #: src/native-libraries/manifest-v1.md:150 msgid "\"MyThing\"" msgstr "\"MyThing\"" -#: src/native-libraries/authoring-guide.md:166 +#: src/native-libraries/authoring-guide.md:168 #: src/native-libraries/manifest-v1.md:146 msgid "\"ownership\"" msgstr "\"propriété\"" -#: src/native-libraries/authoring-guide.md:166 +#: src/native-libraries/authoring-guide.md:168 #: src/native-libraries/manifest-v1.md:146 msgid "\"owned\"" msgstr "\"propriété\"" -#: src/native-libraries/authoring-guide.md:167 +#: src/native-libraries/authoring-guide.md:169 #: src/native-libraries/manifest-v1.md:148 msgid "\"thread\"" msgstr "\"fil\"" -#: src/native-libraries/authoring-guide.md:167 +#: src/native-libraries/authoring-guide.md:169 #: src/native-libraries/manifest-v1.md:148 msgid "\"creator\"" msgstr "\"créateur\"" -#: src/native-libraries/authoring-guide.md:168 +#: src/native-libraries/authoring-guide.md:170 #: src/native-libraries/manifest-v1.md:149 msgid "\"finalizer\"" msgstr "\"finalisateur\"" -#: src/native-libraries/authoring-guide.md:168 +#: src/native-libraries/authoring-guide.md:170 #: src/native-libraries/manifest-v1.md:149 msgid "\"my_thing_free\"" msgstr "\"my_thing_free\"" -#: src/native-libraries/authoring-guide.md:169 +#: src/native-libraries/authoring-guide.md:171 #: src/native-libraries/manifest-v1.md:150 msgid "\"debugName\"" msgstr "\"debugName\"" -#: src/native-libraries/authoring-guide.md:173 +#: src/native-libraries/authoring-guide.md:175 msgid "" "The finalizer symbol must use `void(ptr, ptr)` ABI and must only free native " "resources. It can run from GC finalization, so it must not call Perry JS " @@ -9607,11 +9625,11 @@ msgstr "" "de valeurs JS. Utilisez `\"ptr\"` lorsqu'une API accepte intentionnellement " "un payload de pointeur brut plutôt qu'un handle géré." -#: src/native-libraries/authoring-guide.md:179 +#: src/native-libraries/authoring-guide.md:181 msgid "3. Verify" msgstr "3. Vérifier" -#: src/native-libraries/authoring-guide.md:185 +#: src/native-libraries/authoring-guide.md:187 msgid "" "This runs `cargo build --release`, locates the resulting `.a`, walks `nm -" "gP` over its symbols, and diffs against the manifest's `functions[]`. The " @@ -9621,7 +9639,7 @@ msgstr "" "`nm -gP` sur ses symboles et compare avec les `functions[]` du manifeste. La " "sortie signale deux modes d'échec :" -#: src/native-libraries/authoring-guide.md:189 +#: src/native-libraries/authoring-guide.md:191 msgid "" "**❌ declared function has NO matching symbol** — your manifest lists a " "function the staticlib doesn't export. Either you typo'd the name, or you " @@ -9631,7 +9649,7 @@ msgstr "" "manifeste liste une fonction que la staticlib n'exporte pas. Soit vous avez " "fait une faute de frappe dans le nom, soit vous avez oublié `#[no_mangle]`." -#: src/native-libraries/authoring-guide.md:192 +#: src/native-libraries/authoring-guide.md:194 msgid "" "**⚠ `js_*` symbol NOT in the manifest** — your staticlib exports a function " "user code can't reach. Either add it to `functions[]`, rename it (drop the " @@ -9641,28 +9659,28 @@ msgstr "" "une fonction que le code utilisateur ne peut pas atteindre. Soit ajoutez-la " "à `functions[]`, renommez-la (supprimez le préfixe `js_`), ou supprimez-la." -#: src/native-libraries/authoring-guide.md:196 +#: src/native-libraries/authoring-guide.md:198 msgid "A green run looks like:" msgstr "Une exécution réussie ressemble à :" -#: src/native-libraries/authoring-guide.md:209 +#: src/native-libraries/authoring-guide.md:211 msgid "4. Test in a Perry program" msgstr "4. Tester dans un programme Perry" -#: src/native-libraries/authoring-guide.md:211 +#: src/native-libraries/authoring-guide.md:213 msgid "In a separate directory:" msgstr "Dans un répertoire séparé :" -#: src/native-libraries/authoring-guide.md:216 +#: src/native-libraries/authoring-guide.md:218 #, fuzzy msgid "# or any path your tooling supports\n" msgstr "# ou n'importe quel chemin que votre outil supporte" -#: src/native-libraries/authoring-guide.md:219 +#: src/native-libraries/authoring-guide.md:221 msgid "Add to your TS:" msgstr "Ajoutez à votre TS :" -#: src/native-libraries/authoring-guide.md:221 +#: src/native-libraries/authoring-guide.md:223 msgid "" "```typescript\n" "import { parse } from \"my-bindings\";\n" @@ -9676,19 +9694,19 @@ msgstr "" "console.log(parse(buf));\n" "```" -#: src/native-libraries/authoring-guide.md:227 +#: src/native-libraries/authoring-guide.md:229 msgid "Then `perry compile main.ts -o main && ./main`." msgstr "Ensuite `perry compile main.ts -o main && ./main`." -#: src/native-libraries/authoring-guide.md:229 +#: src/native-libraries/authoring-guide.md:231 msgid "5. Publish" msgstr "5. Publier" -#: src/native-libraries/authoring-guide.md:231 +#: src/native-libraries/authoring-guide.md:233 msgid "Tag a release" msgstr "Créer un tag de release" -#: src/native-libraries/authoring-guide.md:238 +#: src/native-libraries/authoring-guide.md:240 msgid "" "The scaffolded `.github/workflows/release.yml` builds prebuilt staticlibs " "for x86_64 + aarch64 macOS/Linux + Windows on tag and attaches them to the " @@ -9700,11 +9718,11 @@ msgstr "" "lors d'un tag et les attache à la release GitHub. Ajoutez ou supprimez des " "cibles dans le bloc `matrix` du workflow selon vos besoins." -#: src/native-libraries/authoring-guide.md:243 +#: src/native-libraries/authoring-guide.md:245 msgid "npm publish" msgstr "npm publish" -#: src/native-libraries/authoring-guide.md:249 +#: src/native-libraries/authoring-guide.md:251 msgid "" "The scaffolded `package.json` includes the right `files: [...]` list to " "bundle `src/` + `Cargo.toml` + the README. If you also vendor the prebuilt " @@ -9715,37 +9733,37 @@ msgstr "" "vendorisez également les artefacts pré-construits dans le tarball npm, " "ajoutez-les au bloc `files`." -#: src/native-libraries/authoring-guide.md:253 +#: src/native-libraries/authoring-guide.md:255 msgid "Two distribution models" msgstr "Deux modèles de distribution" -#: src/native-libraries/authoring-guide.md:255 +#: src/native-libraries/authoring-guide.md:257 msgid "There are two ways your users get the staticlib:" msgstr "Il existe deux façons pour vos utilisateurs d'obtenir la staticlib :" -#: src/native-libraries/authoring-guide.md:257 +#: src/native-libraries/authoring-guide.md:259 msgid "Model" msgstr "Modèle" -#: src/native-libraries/authoring-guide.md:257 +#: src/native-libraries/authoring-guide.md:259 msgid "What ships in the npm tarball" msgstr "Ce qui est inclus dans le tarball npm" -#: src/native-libraries/authoring-guide.md:257 +#: src/native-libraries/authoring-guide.md:259 msgid "Trade-off" msgstr "Compromis" -#: src/native-libraries/authoring-guide.md:259 +#: src/native-libraries/authoring-guide.md:261 msgid "**Vendor prebuilts**" msgstr "**Vendorisation des pré-construits**" -#: src/native-libraries/authoring-guide.md:259 +#: src/native-libraries/authoring-guide.md:261 msgid "" "`src/`, `Cargo.toml`, AND `prebuilt//lib.a` for every target" msgstr "" "`src/`, `Cargo.toml`, ET `prebuilt//lib.a` pour chaque cible" -#: src/native-libraries/authoring-guide.md:259 +#: src/native-libraries/authoring-guide.md:261 msgid "" "Bigger npm tarball; install is fast (no compile); user doesn't need a Rust " "toolchain" @@ -9753,15 +9771,15 @@ msgstr "" "Tarball npm plus volumineux ; l'installation est rapide (pas de " "compilation) ; l'utilisateur n'a pas besoin d'une toolchain Rust" -#: src/native-libraries/authoring-guide.md:260 +#: src/native-libraries/authoring-guide.md:262 msgid "**Source-only**" msgstr "**Source uniquement**" -#: src/native-libraries/authoring-guide.md:260 +#: src/native-libraries/authoring-guide.md:262 msgid "`src/`, `Cargo.toml`, no prebuilts" msgstr "`src/`, `Cargo.toml`, pas de pré-construits" -#: src/native-libraries/authoring-guide.md:260 +#: src/native-libraries/authoring-guide.md:262 msgid "" "Tiny tarball; first `perry compile` runs `cargo build --release` (slow); " "user needs Rust" @@ -9769,7 +9787,7 @@ msgstr "" "Tarball minuscule ; le premier `perry compile` exécute `cargo build --" "release` (lent) ; l'utilisateur a besoin de Rust" -#: src/native-libraries/authoring-guide.md:262 +#: src/native-libraries/authoring-guide.md:264 msgid "" "Vendoring is the friendlier default for npm consumers. Source-only makes " "sense if your matrix is too big for one tarball or if you're publishing a " @@ -9780,7 +9798,7 @@ msgstr "" "est trop grande pour un seul tarball ou si vous publiez un wrapper privé " "pour une audience restreinte." -#: src/native-libraries/authoring-guide.md:266 +#: src/native-libraries/authoring-guide.md:268 msgid "" "The manifest's `targets..prebuilt` field tells Perry where to find a " "prebuilt for the user's compile target:" @@ -9788,30 +9806,30 @@ msgstr "" "Le champ `targets..prebuilt` du manifeste indique à Perry où trouver " "un pré-construit pour la cible de compilation de l'utilisateur :" -#: src/native-libraries/authoring-guide.md:274 -#: src/native-libraries/authoring-guide.md:275 #: src/native-libraries/authoring-guide.md:276 -#: src/native-libraries/authoring-guide.md:300 -#: src/native-libraries/authoring-guide.md:311 -#: src/native-libraries/authoring-guide.md:320 +#: src/native-libraries/authoring-guide.md:277 +#: src/native-libraries/authoring-guide.md:278 +#: src/native-libraries/authoring-guide.md:302 +#: src/native-libraries/authoring-guide.md:313 +#: src/native-libraries/authoring-guide.md:322 #: src/native-libraries/manifest-v1.md:376 #: src/native-libraries/manifest-v1.md:396 msgid "\"prebuilt\"" msgstr "\"pré-construit\"" -#: src/native-libraries/authoring-guide.md:274 +#: src/native-libraries/authoring-guide.md:276 msgid "\"./prebuilt/macos/libperry_ext_my_bindings.a\"" msgstr "\"./prebuilt/macos/libperry_ext_my_bindings.a\"" -#: src/native-libraries/authoring-guide.md:275 +#: src/native-libraries/authoring-guide.md:277 msgid "\"./prebuilt/linux/libperry_ext_my_bindings.a\"" msgstr "\"./prebuilt/linux/libperry_ext_my_bindings.a\"" -#: src/native-libraries/authoring-guide.md:276 +#: src/native-libraries/authoring-guide.md:278 msgid "\"./prebuilt/windows/perry_ext_my_bindings.lib\"" msgstr "\"./prebuilt/windows/perry_ext_my_bindings.lib\"" -#: src/native-libraries/authoring-guide.md:283 +#: src/native-libraries/authoring-guide.md:285 msgid "" "If a `prebuilt` field is present, Perry treats the archive as required for " "that target and fails with a diagnostic when it cannot be resolved or " @@ -9823,11 +9841,11 @@ msgstr "" "résolue ou liée. Omettez `prebuilt` et fournissez `crate` / `lib` lorsque la " "cible doit être compilée depuis les sources." -#: src/native-libraries/authoring-guide.md:288 +#: src/native-libraries/authoring-guide.md:290 msgid "Backend-aware packaging" msgstr "Packaging tenant compte du backend" -#: src/native-libraries/authoring-guide.md:290 +#: src/native-libraries/authoring-guide.md:292 msgid "" "Graphics or compute wrappers can describe backend-owned artifacts without " "adding app-specific APIs to Perry. Put backend metadata under the target " @@ -9838,52 +9856,52 @@ msgstr "" "Perry. Placez les métadonnées du backend sous la cible qui peut réellement " "les utiliser :" -#: src/native-libraries/authoring-guide.md:300 +#: src/native-libraries/authoring-guide.md:302 msgid "\"./prebuilt/ios/libdemo.a\"" msgstr "\"./prebuilt/ios/libdemo.a\"" -#: src/native-libraries/authoring-guide.md:301 -#: src/native-libraries/authoring-guide.md:312 -#: src/native-libraries/authoring-guide.md:321 +#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:314 +#: src/native-libraries/authoring-guide.md:323 #: src/native-libraries/manifest-v1.md:377 #: src/native-libraries/manifest-v1.md:397 msgid "\"backends\"" msgstr "\"Retour en arrière\"" -#: src/native-libraries/authoring-guide.md:302 +#: src/native-libraries/authoring-guide.md:304 #: src/native-libraries/manifest-v1.md:378 msgid "\"metal\"" msgstr "\"métal\"" -#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:305 #: src/native-libraries/manifest-v1.md:379 src/plugins/native-extensions.md:70 #: src/plugins/native-extensions.md:75 src/plugins/native-extensions.md:80 msgid "\"frameworks\"" msgstr "\"cadres\"" -#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:305 #: src/native-libraries/manifest-v1.md:379 msgid "\"Metal\"" msgstr "\"Metal\"" -#: src/native-libraries/authoring-guide.md:303 +#: src/native-libraries/authoring-guide.md:305 #: src/native-libraries/manifest-v1.md:379 msgid "\"QuartzCore\"" msgstr "\"QuartzCore\"" -#: src/native-libraries/authoring-guide.md:304 +#: src/native-libraries/authoring-guide.md:306 #: src/native-libraries/manifest-v1.md:380 msgid "\"shaderSources\"" msgstr "\"shaderSources\"" -#: src/native-libraries/authoring-guide.md:304 +#: src/native-libraries/authoring-guide.md:306 #: src/native-libraries/manifest-v1.md:380 msgid "\"shaders/default.metal\"" msgstr "\"shaders/default.metal\"" -#: src/native-libraries/authoring-guide.md:305 -#: src/native-libraries/authoring-guide.md:315 -#: src/native-libraries/authoring-guide.md:324 +#: src/native-libraries/authoring-guide.md:307 +#: src/native-libraries/authoring-guide.md:317 +#: src/native-libraries/authoring-guide.md:326 #: src/native-libraries/manifest-v1.md:381 #: src/native-libraries/manifest-v1.md:391 #: src/native-libraries/manifest-v1.md:400 @@ -9891,75 +9909,75 @@ msgstr "\"shaders/default.metal\"" msgid "\"shaderOutputs\"" msgstr "\"shaderOutputs\"" -#: src/native-libraries/authoring-guide.md:305 +#: src/native-libraries/authoring-guide.md:307 #: src/native-libraries/manifest-v1.md:381 msgid "\"prebuilt/default.metallib\"" msgstr "\"prebuilt/default.metallib\"" -#: src/native-libraries/authoring-guide.md:306 +#: src/native-libraries/authoring-guide.md:308 #: src/native-libraries/manifest-v1.md:382 msgid "\"resources\"" msgstr "\"ressources\"" -#: src/native-libraries/authoring-guide.md:306 +#: src/native-libraries/authoring-guide.md:308 #: src/native-libraries/manifest-v1.md:382 msgid "\"resources/metal\"" msgstr "\"resources/metal\"" -#: src/native-libraries/authoring-guide.md:311 +#: src/native-libraries/authoring-guide.md:313 msgid "\"./prebuilt/linux/libdemo.a\"" msgstr "\"./prebuilt/linux/libdemo.a\"" -#: src/native-libraries/authoring-guide.md:313 -#: src/native-libraries/authoring-guide.md:314 +#: src/native-libraries/authoring-guide.md:315 +#: src/native-libraries/authoring-guide.md:316 #: src/native-libraries/manifest-v1.md:389 #: src/native-libraries/manifest-v1.md:390 #: src/native-libraries/manifest-v1.md:402 msgid "\"vulkan\"" msgstr "\"volcan\"" -#: src/native-libraries/authoring-guide.md:314 -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:316 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:390 #: src/native-libraries/manifest-v1.md:399 #: src/native-libraries/manifest-v1.md:403 msgid "\"libs\"" msgstr "Les libs" -#: src/native-libraries/authoring-guide.md:315 +#: src/native-libraries/authoring-guide.md:317 #: src/native-libraries/manifest-v1.md:391 #: src/native-libraries/manifest-v1.md:404 msgid "\"prebuilt/default.spv\"" msgstr "\"prebuilt/default.spv\"" -#: src/native-libraries/authoring-guide.md:320 +#: src/native-libraries/authoring-guide.md:322 #: src/native-libraries/manifest-v1.md:396 msgid "\"./prebuilt/windows/demo.lib\"" msgstr "\"./prebuilt/windows/demo.lib\"" -#: src/native-libraries/authoring-guide.md:322 -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:324 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:398 #: src/native-libraries/manifest-v1.md:399 msgid "\"d3d12\"" msgstr "\"d3d12\"" -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:399 msgid "\"dxgi\"" msgstr "\"dxgi\"" -#: src/native-libraries/authoring-guide.md:323 +#: src/native-libraries/authoring-guide.md:325 #: src/native-libraries/manifest-v1.md:399 msgid "\"dxguid\"" msgstr "\"dxguid\" est un mot" -#: src/native-libraries/authoring-guide.md:324 +#: src/native-libraries/authoring-guide.md:326 #: src/native-libraries/manifest-v1.md:400 msgid "\"prebuilt/default.dxil\"" msgstr "\"prebuilt/default.dxil\"" -#: src/native-libraries/authoring-guide.md:334 +#: src/native-libraries/authoring-guide.md:336 msgid "" "Perry validates the backend/target pairing early: Metal is Apple-only, " "Vulkan is available on macOS/Linux/Windows/Android/HarmonyOS, and D3D12 is " @@ -9972,11 +9990,11 @@ msgstr "" "ressources sont copiées sous `NativeLibraries///` dans les " "bundles d'application." -#: src/native-libraries/authoring-guide.md:339 +#: src/native-libraries/authoring-guide.md:341 msgid "6. Update over time" msgstr "6. Mettre à jour au fil du temps" -#: src/native-libraries/authoring-guide.md:341 +#: src/native-libraries/authoring-guide.md:343 msgid "" "**A new perry-ffi feature lands**: bump your `Cargo.toml`'s `perry-ffi` " "version, rebuild prebuilts, tag a new release. Users `bun update` to pick it " @@ -9988,7 +10006,7 @@ msgstr "" "update` pour récupérer la mise à jour. La spécification du manifeste Perry " "reste à v1 sauf si le schéma change." -#: src/native-libraries/authoring-guide.md:345 +#: src/native-libraries/authoring-guide.md:347 msgid "" "**A new Perry minor**: same — `perry-ffi`'s semver moves with Perry's minor. " "The git-URL consumption (v0.5.x) means rebuilding against `main` picks it up " @@ -9998,7 +10016,7 @@ msgstr "" "mineur de Perry. La consommation via URL git (v0.5.x) signifie que " "recompiler contre `main` le récupère automatiquement." -#: src/native-libraries/authoring-guide.md:348 +#: src/native-libraries/authoring-guide.md:350 msgid "" "**Breaking change to the `js_*` surface you exported**: bump your package's " "major version (`1.0.0` → `2.0.0`). Users who pin a major aren't affected." @@ -10007,19 +10025,61 @@ msgstr "" "incrémentez la version majeure de votre package (`1.0.0` → `2.0.0`). Les " "utilisateurs qui épinglent une version majeure ne sont pas affectés." -#: src/native-libraries/authoring-guide.md:352 +#: src/native-libraries/authoring-guide.md:354 msgid "Common patterns" msgstr "Patterns courants" -#: src/native-libraries/authoring-guide.md:354 -msgid "Async one-shot (HTTP request, DB query)" -msgstr "Appel asynchrone ponctuel (requête HTTP, requête DB)" +#: src/native-libraries/authoring-guide.md:356 +msgid "Async one-shot (hashing, compression, a blocking client call)" +msgstr "" + +#: src/native-libraries/authoring-guide.md:360 +msgid "" +"/// Stand-in for your real CPU-bound work. Owned Rust data in, owned out.\n" +msgstr "" + +#: src/native-libraries/authoring-guide.md:363 +msgid "\"{:08x}\"" +msgstr "" -#: src/native-libraries/authoring-guide.md:371 -msgid "\"fetch: {}\"" -msgstr "\"Récupérer: {}\"" +#: src/native-libraries/authoring-guide.md:365 +#, fuzzy +msgid "" +"/// # Safety\n" +"/// `input_ptr` must be null or a Perry-runtime `StringHeader`.\n" +msgstr "" +"**Documentez `# Safety` pour les fonctions unsafe** — indiquez au minimum " +"\"le pointeur doit être null ou un Perry-runtime `
`\"." + +#: src/native-libraries/authoring-guide.md:372 +msgid "// Copy the argument out of the JS heap before crossing threads.\n" +msgstr "" -#: src/native-libraries/authoring-guide.md:378 +#: src/native-libraries/authoring-guide.md:377 +msgid "" +"// `work` runs on a pool thread with owned Rust data only; `deliver` runs\n" +" // on the thread that owns the JS heap, where the promise is settled.\n" +msgstr "" + +#: src/native-libraries/authoring-guide.md:384 +#, fuzzy +msgid "\"cancelled\"" +msgstr "\"Activé\"" + +#: src/native-libraries/authoring-guide.md:385 +#, fuzzy +msgid "\"digest panicked\"" +msgstr "\"L'épreuve est passée\"" + +#: src/native-libraries/authoring-guide.md:392 +msgid "" +"Perry has no tokio runtime (it runs on turnloop), so there is nothing for " +"`Handle::current().block_on` to find. Network I/O belongs on `perry_ffi::" +"turnloop_net`; the old `spawn_async` / `spawn_blocking_with_reactor` entry " +"points were retired with tokio (see the ABI reference)." +msgstr "" + +#: src/native-libraries/authoring-guide.md:397 msgid "" "`reject_string(message)` rejects with a real JavaScript `Error`: consumers " "can use `error instanceof Error`, `error.message`, and `error.stack`. Use " @@ -10033,11 +10093,11 @@ msgstr "" "intentionnellement avec une valeur non-Erreur, ou `reject_with(...)` lorsque " "l'Erreur a besoin de champs structurés construits sur le fil principal." -#: src/native-libraries/authoring-guide.md:384 +#: src/native-libraries/authoring-guide.md:403 msgid "Sync handle-based class" msgstr "Classe synchrone basée sur des handles" -#: src/native-libraries/authoring-guide.md:386 +#: src/native-libraries/authoring-guide.md:405 msgid "" "Use a `handle` descriptor for synchronous resource-style APIs. The native " "function receives or returns the raw resource pointer as `i64`, while " @@ -10048,17 +10108,17 @@ msgstr "" "forme de `i64`, tandis que les appelants TypeScript ne voient que l'objet " "handle opaque." -#: src/native-libraries/authoring-guide.md:406 +#: src/native-libraries/authoring-guide.md:425 msgid "Event listeners (`.on(event, cb)`)" msgstr "Écouteurs d'événements (`.on(event, cb)`)" -#: src/native-libraries/authoring-guide.md:415 +#: src/native-libraries/authoring-guide.md:434 #, fuzzy msgid "// closure pointers, kept alive by the GC scanner below\n" msgstr "" "// les pointeurs de fermeture, maintenus en vie par le scanner GC ci-dessous" -#: src/native-libraries/authoring-guide.md:458 +#: src/native-libraries/authoring-guide.md:477 msgid "" "The GC scanner is **load-bearing**: without it, a malloc-triggered GC " "between `.on(cb)` and `.emit()` will sweep the closure and the next emit " @@ -10070,11 +10130,11 @@ msgstr "" "appellera de la mémoire libérée. Enregistrez toujours un scanner si vos " "handles stockent des pointeurs de closure." -#: src/native-libraries/authoring-guide.md:463 +#: src/native-libraries/authoring-guide.md:482 msgid "When to extend the perry-ffi surface" msgstr "Quand étendre la surface perry-ffi" -#: src/native-libraries/authoring-guide.md:465 +#: src/native-libraries/authoring-guide.md:484 msgid "" "If your binding genuinely needs something perry-ffi doesn't expose, file an " "issue against [`PerryTS/perry`](https://github.com/PerryTS/perry/issues) " @@ -10084,22 +10144,22 @@ msgstr "" "n'expose pas, ouvrez une issue sur [`PerryTS/perry`](https://github.com/" "PerryTS/perry/issues) en décrivant :" -#: src/native-libraries/authoring-guide.md:469 +#: src/native-libraries/authoring-guide.md:488 msgid "the binding you're writing," msgstr "le binding que vous écrivez," -#: src/native-libraries/authoring-guide.md:470 +#: src/native-libraries/authoring-guide.md:489 msgid "the perry-runtime function/type you'd otherwise reach into," msgstr "" "la fonction/type perry-runtime dans laquelle vous auriez autrement accès " "direct," -#: src/native-libraries/authoring-guide.md:471 +#: src/native-libraries/authoring-guide.md:490 msgid "why a higher-level perry-ffi entry would generalize." msgstr "" "pourquoi une entrée perry-ffi de plus haut niveau serait généralisable." -#: src/native-libraries/authoring-guide.md:473 +#: src/native-libraries/authoring-guide.md:492 msgid "" "The bar for adding to perry-ffi is high — every helper is a forever " "commitment — but real wrappers driving real needs is exactly the right " @@ -10113,7 +10173,7 @@ msgstr "" "v0.5.556, JSON-stringify + event-pump en v0.5.567) proviennent tous de " "wrappers spécifiques en ayant besoin." -#: src/native-libraries/authoring-guide.md:479 +#: src/native-libraries/authoring-guide.md:498 msgid "" "Don't reach into `perry_runtime::*` directly to \"unblock\" your wrapper " "today — it'll break the next time those internals change." @@ -10122,7 +10182,7 @@ msgstr "" "wrapper aujourd'hui — cela cassera la prochaine fois que ces internes " "changeront." -#: src/native-libraries/authoring-guide.md:482 src/container/containers.md:223 +#: src/native-libraries/authoring-guide.md:501 src/container/containers.md:223 #: src/container/compose.md:358 src/container/networking.md:183 #: src/container/volumes.md:184 src/container/security.md:216 #: src/container/production-patterns.md:298 src/cli/allow-js-runtime.md:81 @@ -10133,19 +10193,19 @@ msgstr "" msgid "See also" msgstr "Voir aussi" -#: src/native-libraries/authoring-guide.md:484 +#: src/native-libraries/authoring-guide.md:503 msgid "[`overview.md`](overview.md) — the architectural picture." msgstr "[`overview.md`](overview.md) — la vue d'ensemble architecturale." -#: src/native-libraries/authoring-guide.md:485 +#: src/native-libraries/authoring-guide.md:504 msgid "[`abi.md`](abi.md) — perry-ffi reference." msgstr "[`abi.md`](abi.md) — référence perry-ffi." -#: src/native-libraries/authoring-guide.md:486 +#: src/native-libraries/authoring-guide.md:505 msgid "[`manifest-v1.md`](manifest-v1.md) — the manifest schema in full." msgstr "[`manifest-v1.md`](manifest-v1.md) — le schéma complet du manifeste." -#: src/native-libraries/authoring-guide.md:487 +#: src/native-libraries/authoring-guide.md:506 msgid "" "[`PerryTS/tursodb-bindings`](https://github.com/PerryTS/tursodb-bindings) " "and [`PerryTS/iroh-bindings`](https://github.com/PerryTS/iroh-bindings) for " @@ -10291,7 +10351,7 @@ msgstr "" "ffi/src/lib.rs) et sa documentation Rust sont la source de vérité pour les " "signatures exactes et les exigences de sécurité." -#: src/native-libraries/abi.md:71 src/internals/node-api-host.md:41 +#: src/native-libraries/abi.md:71 src/internals/node-api-host.md:45 msgid "Area" msgstr "Area" @@ -10356,9 +10416,10 @@ msgid "Async work" msgstr "Travail asynchrone" #: src/native-libraries/abi.md:78 +#, fuzzy msgid "" -"`JsPromise`, `JsNativeAsyncCompletion`, `spawn_async`, `spawn_blocking`, " -"`spawn_blocking_with_reactor`, `run_pending`" +"`JsPromise`, `JsNativeAsyncCompletion`, `spawn_blocking`, `run_pending`, " +"`pool::{submit, run, cancel, turn}`, `agent_post`, `turnloop_net`" msgstr "" "`JsPromise`, `JsNativeAsyncCompletion`, `spawn_async`, `spawn_blocking`, " "`spawn_blocking_with_reactor`, `run_pending`" @@ -10408,10 +10469,83 @@ msgid "Use `perry_ffi::StringHeader` in exported signatures:" msgstr "Utiliser `perry_ffi::StringHeader` dans les signatures exportées:" #: src/native-libraries/abi.md:109 +msgid "Retired: `spawn_async` and `spawn_blocking_with_reactor`" +msgstr "" + +#: src/native-libraries/abi.md:111 +msgid "" +"Both were removed together with tokio, which Perry no longer contains in any " +"crate. Their contract was \"tokio's I/O reactor is ambient\": `spawn_async` " +"drove a boxed tokio future on perry-stdlib's shared runtime, and " +"`spawn_blocking_with_reactor` ran a closure on a tokio blocking thread that " +"carried that reactor. Nothing can honour that contract without tokio, so the " +"Rust functions and their C symbols (`perry_ffi_spawn_async`, " +"`perry_ffi_spawn_blocking_with_reactor`) were deleted rather than stubbed: a " +"wrapper that still calls them fails to compile against current `perry-ffi` " +"(or, if prebuilt, fails to link naming the symbol) instead of aborting at " +"its first socket. No in-tree or known out-of-tree wrapper used them when " +"they were retired — every in-tree caller had moved to turnloop first." +msgstr "" + +#: src/native-libraries/abi.md:123 +msgid "" +"This is a backwards-incompatible change to the `0.5.x` surface, made without " +"a major bump because `perry-ffi` tracks Perry's workspace version (there is " +"no independent major to raise) and the symbols had no remaining users. " +"Migrate as follows:" +msgstr "" + +#: src/native-libraries/abi.md:128 +#, fuzzy +msgid "Was" +msgstr "Watches" + +#: src/native-libraries/abi.md:128 +#, fuzzy +msgid "Use instead" +msgstr "Cas d'usage" + +#: src/native-libraries/abi.md:130 +msgid "`spawn_async(future)` for socket / TLS / HTTP I/O" +msgstr "" + +#: src/native-libraries/abi.md:130 +msgid "" +"`perry_ffi::turnloop_net` (sockets on the agent's turnloop loop) and " +"`perry_ffi::agent_post`" +msgstr "" + +#: src/native-libraries/abi.md:131 +msgid "`spawn_blocking_with_reactor(closure)`" +msgstr "" + +#: src/native-libraries/abi.md:131 +msgid "" +"`spawn_blocking` for work that holds its thread, `pool::submit` for bounded " +"CPU work" +msgstr "" + +#: src/native-libraries/abi.md:132 +msgid "`Handle::current().block_on(…)` inside `spawn_blocking`" +msgstr "" + +#: src/native-libraries/abi.md:132 +msgid "a blocking client, or turnloop I/O; there is no ambient runtime" +msgstr "" + +#: src/native-libraries/abi.md:134 +msgid "" +"`spawn_blocking` and `run_pending` are unchanged in signature: " +"`spawn_blocking` runs on turnloop's long-occupancy worker set (one plain OS " +"thread when the caller has no event loop), and `run_pending` takes one " +"bounded loop turn." +msgstr "" + +#: src/native-libraries/abi.md:138 msgid "Async promise rejection" msgstr "Rejet de promesse asynchrone" -#: src/native-libraries/abi.md:111 +#: src/native-libraries/abi.md:140 msgid "" "`JsPromise::reject_string(message)` copies the message and rejects with a " "real JavaScript `Error` allocated on the runtime's main thread. Its `." @@ -10429,11 +10563,11 @@ msgstr "" "Utilisez `JsPromise::reject_with` pour construire une valeur de rejet " "structurée en toute sécurité sur le fil principal." -#: src/native-libraries/abi.md:118 +#: src/native-libraries/abi.md:147 msgid "ABI boundaries and thread safety" msgstr "Limites de l'ABI et sécurité des fils" -#: src/native-libraries/abi.md:120 +#: src/native-libraries/abi.md:149 msgid "" "Use the exported constructors, accessors, and `JsValue` conversions. Do not " "depend on private runtime field offsets or hard-code pointer tags." @@ -10442,7 +10576,7 @@ msgstr "" "exportés. Ne dépendez pas des décalages de champs privés en temps " "d'exécution ou des balises de pointeurs en code dur." -#: src/native-libraries/abi.md:123 +#: src/native-libraries/abi.md:152 msgid "" "JavaScript heap allocation is tied to Perry's main-thread arena. If worker-" "thread work must produce an object, array, or other complex `JsValue`, carry " @@ -10454,7 +10588,7 @@ msgstr "" "un autre `JsValue` complexe, ramener les données `Send` simples et " "construire la valeur avec `JsPromise::resolve_with` sur le fil principal." -#: src/native-libraries/abi.md:127 +#: src/native-libraries/abi.md:156 msgid "" "Register native values that retain JavaScript references with the handle/" "root-scanner APIs. Use `TransientRootScope` for temporary values that must " @@ -10465,7 +10599,7 @@ msgstr "" "valeurs temporaires qui doivent survivre à un point d'attribution ou de " "collecte." -#: src/native-libraries/abi.md:130 +#: src/native-libraries/abi.md:159 msgid "" "Respect the `unsafe` contracts on raw pointer constructors and FFI entry " "points. `perry-ffi` stabilizes the interface; it cannot prove that a caller " @@ -10475,7 +10609,7 @@ msgstr "" "les points d'entrée FFI. `perry-ffi` stabilise l'interface; il ne peut pas " "prouver qu'un appelant a fourni un pointeur en direct du type déclaré." -#: src/native-libraries/abi.md:133 +#: src/native-libraries/abi.md:162 msgid "" "Keep `runtime-link` out of production wrapper dependencies unless the crate " "genuinely needs a Cargo-level `perry-runtime` link. It is normally enabled " @@ -10485,7 +10619,7 @@ msgstr "" "sauf si la caisse a réellement besoin d'un lien `perry-runtime` au niveau du " "chargement. Il est normalement activé uniquement dans les essais d'emballage." -#: src/native-libraries/abi.md:137 +#: src/native-libraries/abi.md:166 msgid "" "Any new ABI helper should be documented and covered by a focused test in " "`crates/perry-ffi` in the same change." @@ -10493,30 +10627,30 @@ msgstr "" "Tout nouvel assistant ABI doit être documenté et couvert par un test ciblé " "en `crates/perry-ffi` dans le même changement." -#: src/native-libraries/abi.md:140 +#: src/native-libraries/abi.md:169 msgid "Reference example: `perry-ext-dotenv`" msgstr "Exemple de référence : `perry-ext-dotenv`" -#: src/native-libraries/abi.md:142 +#: src/native-libraries/abi.md:171 msgid "The smallest in-tree wrapper demonstrates string input and output:" msgstr "" "Le plus petit enveloppeur d'arbre démontre l'entrée et la sortie de chaîne:" -#: src/native-libraries/abi.md:152 +#: src/native-libraries/abi.md:181 msgid "\".env\"" msgstr "\".env\"" -#: src/native-libraries/abi.md:153 +#: src/native-libraries/abi.md:182 #, fuzzy msgid "// … read file, set env vars, return 1.0 / 0.0 …\n" msgstr "" "// ... lire le fichier, régler les environnements, retourner 1.0 / 0.0 " -#: src/native-libraries/abi.md:165 +#: src/native-libraries/abi.md:194 msgid "\"{}\"" msgstr "\"{}\"" -#: src/native-libraries/abi.md:170 +#: src/native-libraries/abi.md:199 msgid "" "Source: [`crates/perry-ext-dotenv/src/lib.rs`](https://github.com/PerryTS/" "perry/blob/main/crates/perry-ext-dotenv/src/lib.rs). The crate's normal " @@ -10528,11 +10662,11 @@ msgstr "" "de la caisse est `perry-ffi`; sa dépendance de développement permet `runtime-" "link` afin que le test aller-retour FFI puisse lier les symboles d'exécution." -#: src/native-libraries/abi.md:174 +#: src/native-libraries/abi.md:203 msgid "Tooling and implementation status" msgstr "État des outils et de la mise en œuvre" -#: src/native-libraries/abi.md:176 +#: src/native-libraries/abi.md:205 msgid "" "The native-library work tracked by [\\#466](https://github.com/PerryTS/perry/" "issues/466) has landed:" @@ -10540,17 +10674,17 @@ msgstr "" "Le travail de bibliothèque native suivi par [\\#466](https://github.com/" "PerryTS/perry/issues/466) est arrivé:" -#: src/native-libraries/abi.md:178 +#: src/native-libraries/abi.md:207 msgid "manifests declare their native functions and ABI version;" msgstr "les manifestes déclarent leurs fonctions natives et leur version ABI;" -#: src/native-libraries/abi.md:179 +#: src/native-libraries/abi.md:208 msgid "incompatible declared ABI ranges are rejected during resolution;" msgstr "" "les fourchettes déclarées d'ABI incompatibles sont rejetées pendant la " "résolution;" -#: src/native-libraries/abi.md:180 +#: src/native-libraries/abi.md:209 msgid "" "`perry native init`, `perry native validate`, and `perry native list` " "provide authoring and inspection workflows;" @@ -10558,13 +10692,13 @@ msgstr "" "`perry native init`, `perry native validate` et `perry native list` " "fournissent des flux de travail d'écriture et d'inspection;" -#: src/native-libraries/abi.md:182 +#: src/native-libraries/abi.md:211 msgid "the well-known bindings table routes supported package imports; and" msgstr "" "les routes bien connues de la table des liens ont soutenu les importations " "de colis; et" -#: src/native-libraries/abi.md:183 +#: src/native-libraries/abi.md:212 msgid "" "wrappers can depend on the repository's stable `perry-ffi` API instead of " "`perry-runtime` internals." @@ -10572,7 +10706,7 @@ msgstr "" "Les enveloppes peuvent dépendre de l'API stable `perry-ffi` du référentiel " "au lieu des enveloppes internes `perry-runtime`." -#: src/native-libraries/abi.md:186 +#: src/native-libraries/abi.md:215 msgid "" "Issue #466 is retained as the historical design record. Open a new issue for " "a missing ABI helper or a new native-library capability." @@ -10819,9 +10953,9 @@ msgstr "Requis" #: src/platforms/tvos.md:149 src/platforms/watchos.md:137 #: src/platforms/wearos.md:23 src/container/containers.md:133 #: src/system/media.md:37 src/testing/geisterhand.md:257 src/cli/flags.md:96 -#: src/cli/cache-dir.md:42 src/internals/node-api-host.md:548 -#: src/internals/node-api-host.md:584 src/internals/node-api-host.md:598 -#: src/internals/node-api-host.md:609 +#: src/cli/cache-dir.md:42 src/internals/node-api-host.md:588 +#: src/internals/node-api-host.md:624 src/internals/node-api-host.md:638 +#: src/internals/node-api-host.md:649 msgid "Notes" msgstr "Notes" @@ -10884,16 +11018,17 @@ msgstr "string" #: src/testing/http2-conformance.md:424 src/testing/http2-conformance.md:425 #: src/testing/http2-conformance.md:426 src/testing/http2-conformance.md:427 #: src/testing/http2-conformance.md:428 src/testing/http2-conformance.md:429 -#: src/testing/ci-tiers.md:26 src/testing/ci-tiers.md:27 -#: src/testing/ci-tiers.md:28 src/testing/ci-tiers.md:29 -#: src/testing/ci-tiers.md:30 src/testing/ci-tiers.md:33 -#: src/testing/ci-tiers.md:34 src/testing/ci-tiers.md:35 -#: src/testing/ci-tiers.md:36 src/testing/ci-tiers.md:37 -#: src/testing/ci-tiers.md:38 src/testing/ci-tiers.md:39 -#: src/testing/ci-tiers.md:40 src/testing/ci-tiers.md:41 -#: src/testing/ci-tiers.md:42 src/testing/ci-tiers.md:43 -#: src/testing/ci-tiers.md:44 src/testing/ci-tiers.md:45 -#: src/testing/ci-tiers.md:46 src/testing/ci-tiers.md:47 +#: src/testing/ci-tiers.md:39 src/testing/ci-tiers.md:40 +#: src/testing/ci-tiers.md:41 src/testing/ci-tiers.md:42 +#: src/testing/ci-tiers.md:43 src/testing/ci-tiers.md:45 +#: src/testing/ci-tiers.md:46 src/testing/ci-tiers.md:48 +#: src/testing/ci-tiers.md:49 src/testing/ci-tiers.md:50 +#: src/testing/ci-tiers.md:51 src/testing/ci-tiers.md:52 +#: src/testing/ci-tiers.md:53 src/testing/ci-tiers.md:54 +#: src/testing/ci-tiers.md:55 src/testing/ci-tiers.md:56 +#: src/testing/ci-tiers.md:57 src/testing/ci-tiers.md:58 +#: src/testing/ci-tiers.md:59 src/testing/ci-tiers.md:60 +#: src/testing/ci-tiers.md:61 src/testing/ci-tiers.md:62 #: src/internals/rfc-rooting-by-construction.md:277 #: src/internals/rfc-rooting-by-construction.md:278 #: src/internals/rfc-rooting-by-construction.md:279 @@ -10968,8 +11103,8 @@ msgid "" "Unlike handles and promises, `pod` has no string-only spelling; use object " "form so the field order and scalar ABI types are explicit. `json` is " "parameter-only: it serializes its argument with `JSON.stringify` at the " -"callsite and passes the result in a `string`\\-shaped slot (see \"Param types" -"\")." +"callsite and passes the result in a `string`\\-shaped slot (see \"Param " +"types\")." msgstr "" "`number` est un alias de compatibilité pour `f64`; `js_value` et `boolean` " "sont des alias de compatibilité pour `jsvalue` et `bool`. `handle` nu est le " @@ -11172,7 +11307,7 @@ msgid "symbol string" msgstr "chaîne de symbole" #: src/native-libraries/manifest-v1.md:179 src/cli/app-updates.md:61 -#: src/cli/app-updates.md:66 src/contributing/releasing.md:278 +#: src/cli/app-updates.md:66 src/contributing/releasing.md:297 msgid "none" msgstr "aucun" @@ -11260,8 +11395,8 @@ msgstr "" "`byte` alias `u8`, `number` alias `f64`, et `buffer_len` est un scalaire de " "longueur d'octet `u32`. `handle_id` est un identifiant entier sans pointeur; " "il n'est pas un `handle` détenu ou emprunté. Les descripteurs dynamiques ou " -"pointerful tels que `jsvalue`, `string`, `json`, `bool`, `ptr`, `buffer" -"+len`, `handle`, `promise` et `void` sont rejetés dans les champs POD." +"pointerful tels que `jsvalue`, `string`, `json`, `bool`, `ptr`, " +"`buffer+len`, `handle`, `promise` et `void` sont rejetés dans les champs POD." #: src/native-libraries/manifest-v1.md:219 msgid "Param types" @@ -11662,8 +11797,8 @@ msgstr "" #: src/native-libraries/manifest-v1.md:276 msgid "" "Note on `\"string\"` vs. `\"i64_str\"`: both produce a string on the " -"TypeScript side, but they differ in how Rust returns the pointer. Use `" -"\"string\"` / `\"ptr\"` when your `extern \"C\" fn` is declared `-> *const " +"TypeScript side, but they differ in how Rust returns the pointer. Use " +"`\"string\"` / `\"ptr\"` when your `extern \"C\" fn` is declared `-> *const " "u8` (or `*const StringHeader`); use `\"i64_str\"` when it's `-> i64` and the " "value happens to be a `StringHeader` address (closes [\\#222](https://github." "com/PerryTS/perry/issues/222))." @@ -11671,24 +11806,24 @@ msgstr "" "Note sur `\"string\"` vs. `\"i64_str\"` : les deux produisent une chaîne du " "côté TypeScript, mais ils diffèrent dans la façon dont Rust retourne le " "pointeur. Utilisez `\"string\"` / `\"ptr\"` lorsque votre `extern \"C\" fn` " -"est déclarée `-> *const u8` (ou `*const StringHeader`) ; utilisez `\"i64_str" -"\"` lorsqu'elle retourne `-> i64` et que la valeur est une adresse " +"est déclarée `-> *const u8` (ou `*const StringHeader`) ; utilisez " +"`\"i64_str\"` lorsqu'elle retourne `-> i64` et que la valeur est une adresse " "`StringHeader` (ferme [\\#222](https://github.com/PerryTS/perry/issues/222))." #: src/native-libraries/manifest-v1.md:283 msgid "" -"`\"void\"` is valid only as a return descriptor. `\"buffer+len\"`, `\"json" -"\"`, and `{ \"kind\": \"pod\", ... }` are valid only as parameter " +"`\"void\"` is valid only as a return descriptor. `\"buffer+len\"`, " +"`\"json\"`, and `{ \"kind\": \"pod\", ... }` are valid only as parameter " "descriptors: `\"buffer+len\"` expands one JavaScript argument into two " "native ABI slots, while `pod` lowers one object-shaped argument to a pointer " "to verifier-backed C-layout storage." msgstr "" -"`\"void\"` est valable uniquement en tant que descripteur de retour. `" -"\"buffer+len\"`, `\"json\"` et `{ \"kind\": \"pod\", ... }` ne sont valables " -"que comme descripteurs de paramètres: `\"buffer+len\"` étend un argument " -"JavaScript en deux emplacements ABI natifs, tandis que `pod` abaisse un " -"argument en forme d'objet à un pointeur vers le stockage de mise en page C " -"pris en charge par le vérificateur." +"`\"void\"` est valable uniquement en tant que descripteur de retour. " +"`\"buffer+len\"`, `\"json\"` et `{ \"kind\": \"pod\", ... }` ne sont " +"valables que comme descripteurs de paramètres: `\"buffer+len\"` étend un " +"argument JavaScript en deux emplacements ABI natifs, tandis que `pod` " +"abaisse un argument en forme d'objet à un pointeur vers le stockage de mise " +"en page C pris en charge par le vérificateur." #: src/native-libraries/manifest-v1.md:289 msgid "" @@ -12539,19 +12674,17 @@ msgstr "" #, fuzzy msgid "" "```toml\n" -"[bindings.mongodb]\n" -"crate = \"perry-ext-mongodb\"\n" -"lib = \"perry_ext_mongodb\"\n" +"[bindings.bcrypt]\n" +"crate = \"perry-ext-bcrypt\"\n" +"lib = \"perry_ext_bcrypt\"\n" "tracking = \"#466\"\n" "\n" -"[bindings.mongodb.upstream]\n" -"version = \"7.5.0\" # pinned npm release (immutable dist)\n" -"sha256 = \"4d93c312…\" # sha256 of the registry tarball at pin " +"[bindings.bcrypt.upstream]\n" +"version = \"6.0.0\" # pinned npm release (immutable dist)\n" +"sha256 = \"3b2478cd…\" # sha256 of the registry tarball at pin " "time\n" -"repo = \"https://github.com/mongodb/node-mongodb-native\"\n" -"ref = \"c4368315…\" # publisher's gitHead for the release, when " -"known\n" -"ported-at = \"7.5.0\" # release the wrapper was last REVIEWED " +"repo = \"https://github.com/kelektiv/node.bcrypt.js\"\n" +"ported-at = \"6.0.0\" # release the wrapper was last REVIEWED " "against\n" "date = \"2026-07-30\"\n" "```" @@ -12574,11 +12707,11 @@ msgstr "" "date = \"2026-07-30\"\n" "```" -#: src/native-libraries/upstream-pins.md:25 +#: src/native-libraries/upstream-pins.md:24 msgid "The lock-step rule" msgstr "La règle du verrou" -#: src/native-libraries/upstream-pins.md:27 +#: src/native-libraries/upstream-pins.md:26 msgid "" "**`ported-at` must equal `version`.** Re-pinning a binding to a newer " "upstream release without re-reviewing the wrapper against the upstream diff " @@ -12595,15 +12728,15 @@ msgstr "" "ne peut jamais dépasser l'examen qu'elle exige: bousculer `version` vous " "oblige à avancer `ported-at`, ce qui oblige l'examen." -#: src/native-libraries/upstream-pins.md:34 +#: src/native-libraries/upstream-pins.md:33 msgid "Exempt entries" msgstr "Enregistrements exemptés" -#: src/native-libraries/upstream-pins.md:36 +#: src/native-libraries/upstream-pins.md:35 msgid "Three kinds of row carry no pin:" msgstr "Trois sortes de rangées ne portent pas d' épingle:" -#: src/native-libraries/upstream-pins.md:38 +#: src/native-libraries/upstream-pins.md:37 msgid "" "**Node builtins** (`node-builtin = true`): `zlib`, `events`, `net`, `http`, " "`https`, `http2`, `streams`. Their upstream is Node core, not an npm dist." @@ -12612,7 +12745,7 @@ msgstr "" "`http`, `https`, `http2`, `streams`. Leur en amont est le noyau du nœud, pas " "une dist npm." -#: src/native-libraries/upstream-pins.md:40 +#: src/native-libraries/upstream-pins.md:39 msgid "" "**Aliases** (`alias-of = \"\"`): a package subpath (`mysql2/" "promise`) or a bare-name alias (`fetch` → `node-fetch`) that shares its " @@ -12622,11 +12755,11 @@ msgstr "" "promise`) ou un alias de nom simple (`fetch` → `node-fetch`) qui partage la " "provenance de sa cible." -#: src/native-libraries/upstream-pins.md:43 +#: src/native-libraries/upstream-pins.md:42 msgid "**Perry-owned packages** (`@perryts/*`, `perry/*`)." msgstr "**Emballages appartenant à Perry** (`@perryts/*`, `perry/*`)." -#: src/native-libraries/upstream-pins.md:45 +#: src/native-libraries/upstream-pins.md:44 #, fuzzy msgid "" "Note that a distinct npm package served by a shared wrapper crate is **not** " @@ -12638,11 +12771,11 @@ msgstr "" "`perry-ext-ioredis` mais sont publiés et versionnés séparément, de sorte que " "chacun porte sa propre épingle." -#: src/native-libraries/upstream-pins.md:49 +#: src/native-libraries/upstream-pins.md:48 msgid "Tooling — `scripts/binding_pins.mjs`" msgstr "Les outils `scripts/binding_pins.mjs`" -#: src/native-libraries/upstream-pins.md:52 +#: src/native-libraries/upstream-pins.md:51 #, fuzzy msgid "" "# Provision or bump one pin to a specific version (default: latest stable)\n" @@ -12650,12 +12783,12 @@ msgstr "" "# Provision ou bouton d'une broche vers une version spécifique (par défaut: " "dernière stable)" -#: src/native-libraries/upstream-pins.md:54 +#: src/native-libraries/upstream-pins.md:53 #, fuzzy msgid "# Provision every currently-unpinned binding at its latest stable\n" msgstr "# Prévoir chaque liaison actuellement non fixée à sa dernière stable" -#: src/native-libraries/upstream-pins.md:57 +#: src/native-libraries/upstream-pins.md:56 #, fuzzy msgid "" "# Offline gate (CI): pins present, lock-stepped, crates exist. Exit 1 on " @@ -12664,7 +12797,7 @@ msgstr "" "# Porte hors ligne (CI): épingles présentes, verrouillées, des caisses " "existent. Sortie 1 sur n'importe quelle" -#: src/native-libraries/upstream-pins.md:61 +#: src/native-libraries/upstream-pins.md:60 #, fuzzy msgid "" "# Advisory: additionally flag pins whose upstream has a newer stable " @@ -12673,7 +12806,7 @@ msgstr "" "# Avis: en outre, les épingles de drapeau dont la sortie stable en amont est " "plus récente" -#: src/native-libraries/upstream-pins.md:65 +#: src/native-libraries/upstream-pins.md:64 #, fuzzy msgid "" "# Materialize the upstream repo at the pinned ref into gitignored upstream/" @@ -12681,7 +12814,7 @@ msgid "" msgstr "" "# Matérialiser le repo en amont au ref fixé dans gitignored en amont/" -#: src/native-libraries/upstream-pins.md:71 +#: src/native-libraries/upstream-pins.md:70 msgid "" "Never hand-edit `version` / `sha256` / `ref` — the tarball hash can't be " "recomputed at edit time. Use `--set`, which fetches the registry tarball, " @@ -12692,11 +12825,11 @@ msgstr "" "qui récupère le tarball du registre, le hache, enregistre le `gitHead` de " "l'éditeur et estampille `ported-at`/`date`." -#: src/native-libraries/upstream-pins.md:75 +#: src/native-libraries/upstream-pins.md:74 msgid "Cadence" msgstr "Cadence" -#: src/native-libraries/upstream-pins.md:77 +#: src/native-libraries/upstream-pins.md:76 msgid "" "The `--check` gate runs on every PR (offline). The weekly dependency-update " "job runs `--check --refresh`, so a newly-soaked upstream release surfaces as " @@ -13084,7 +13217,7 @@ msgid "**Deno**" msgstr "**Deno**" #: src/threading/overview.md:41 src/threading/overview.md:42 -#: src/api/reference.md:530 src/api/reference.md:3640 +#: src/api/reference.md:532 src/api/reference.md:3640 msgid "`Worker`" msgstr "`Worker`" @@ -14660,8 +14793,8 @@ msgid "" " score: u.score * 2,\n" " }))\n" "\n" -" console.log(`parallel-filter-combined active=${active.length} profiles=" -"${profiles.length}`)\n" +" console.log(`parallel-filter-combined active=${active.length} " +"profiles=${profiles.length}`)\n" "}\n" "```" msgstr "" @@ -14685,8 +14818,8 @@ msgstr "" " score: u.score * 2,\n" " }))\n" "\n" -" console.log(`parallel-filter-combined active=${active.length} profiles=" -"${profiles.length}`)\n" +" console.log(`parallel-filter-combined active=${active.length} " +"profiles=${profiles.length}`)\n" "}\n" "```" @@ -15200,8 +15333,8 @@ msgid "" " return { total, count: rawData.items.length }\n" " })\n" "\n" -" console.log(`spawn-api-then-process total=${processed.total} count=" -"${processed.count}`)\n" +" console.log(`spawn-api-then-process total=${processed.total} " +"count=${processed.count}`)\n" "}\n" "```" msgstr "" @@ -15218,8 +15351,8 @@ msgstr "" " return { total, count: rawData.items.length }\n" " })\n" "\n" -" console.log(`spawn-api-then-process total=${processed.total} count=" -"${processed.count}`)\n" +" console.log(`spawn-api-then-process total=${processed.total} " +"count=${processed.count}`)\n" "}\n" "```" @@ -15516,8 +15649,8 @@ msgstr "`windowState`" msgid "" "Initial state: `\"normal\"`, `\"maximized\"`, `\"fullscreen\"` (optional)" msgstr "" -"L'état initial est le suivant: `\"normal\"`, `\"maximized\"`, `\"fullscreen" -"\"` (facultatif)" +"L'état initial est le suivant: `\"normal\"`, `\"maximized\"`, " +"`\"fullscreen\"` (facultatif)" #: src/ui/overview.md:85 msgid "`frameAutosaveName`" @@ -15916,7 +16049,7 @@ msgstr "`
`. **iOS**, " -"**Android**, **Linux/GTK4**, **Windows**, **tvOS**, **visionOS**, and " -"**watchOS** link no-op stubs so cross-platform code compiles everywhere — " -"the table renders nothing and `tableGetSelectedRow` returns `-1`. For " -"production lists on platforms without a real impl, use `LazyVStack` (see " -"[Layout](layout.md))." +"+ `NSScrollView`) and **Android** (scrollable native widget rows); the " +"**Web** target uses an HTML `
`. **iOS**, **Linux/GTK4**, **Windows**, " +"**tvOS**, **visionOS**, and **watchOS** link no-op stubs so cross-platform " +"code compiles everywhere — the table renders nothing and " +"`tableGetSelectedRow` returns `-1`. For production lists on platforms " +"without a real impl, use `LazyVStack` (see [Layout](layout.md))." msgstr "" "**Support des plateformes :** l'implémentation réelle est disponible sur " "**macOS** (`NSTableView` + `NSScrollView`) ; la cible **Web** utilise un " @@ -22519,11 +22709,11 @@ msgstr "" "les plateformes sans implémentation réelle, utilisez `LazyVStack` (voir " "[Mise en page](layout.md))." -#: src/ui/table.md:14 +#: src/ui/table.md:15 msgid "Creating a Table" msgstr "Créer un tableau" -#: src/ui/table.md:22 +#: src/ui/table.md:23 msgid "" "`Table(rowCount, colCount, renderCell)` creates a table. The render callback " "receives `(row, col)` and must return a `Widget` (typically `Text(...)`). " @@ -22536,11 +22726,18 @@ msgstr "" "cellule, ce qui permet aux cellules d'afficher des images, des piles ou des " "composites — pas seulement des chaînes de caractères simples." -#: src/ui/table.md:28 +#: src/ui/table.md:29 +msgid "" +"Android renders all cells when the table is created or its row count is " +"updated. Headers and rows share column widths, with horizontal and vertical " +"scrolling when the content exceeds the available space." +msgstr "" + +#: src/ui/table.md:33 msgid "Column Headers" msgstr "En-têtes de colonnes" -#: src/ui/table.md:30 +#: src/ui/table.md:35 msgid "" "```ts\n" "const userTable = Table(users.length, 3, (row: number, col: number) => {\n" @@ -22568,11 +22765,11 @@ msgstr "" "tableSetColumnHeader(userTable, 2, \"Role\")\n" "```" -#: src/ui/table.md:43 +#: src/ui/table.md:48 msgid "Column Widths" msgstr "Largeurs de colonnes" -#: src/ui/table.md:45 +#: src/ui/table.md:50 msgid "" "```ts\n" "tableSetColumnWidth(userTable, 0, 150) // Name column\n" @@ -22586,11 +22783,11 @@ msgstr "" "tableSetColumnWidth(userTable, 2, 100) // Role column\n" "```" -#: src/ui/table.md:51 +#: src/ui/table.md:56 msgid "Row Selection" msgstr "Sélection de ligne" -#: src/ui/table.md:53 +#: src/ui/table.md:58 msgid "" "```ts\n" "const selectedRow = State(-1)\n" @@ -22616,15 +22813,15 @@ msgstr "" "const current = tableGetSelectedRow(userTable)\n" "```" -#: src/ui/table.md:65 +#: src/ui/table.md:70 msgid "Dynamic Row Count" msgstr "Nombre de lignes dynamique" -#: src/ui/table.md:67 +#: src/ui/table.md:72 msgid "Update the number of rows after creation:" msgstr "Mettre à jour le nombre de lignes après la création :" -#: src/ui/table.md:75 +#: src/ui/table.md:80 msgid "" "```ts\n" "const selectedName = State(\"None\")\n" @@ -22690,11 +22887,11 @@ msgstr "" "})\n" "```" -#: src/ui/table.md:107 +#: src/ui/table.md:112 msgid "Sort, filter, multi-select (issue #473)" msgstr "Tri, filtre, sélection multiple (issue #473)" -#: src/ui/table.md:109 +#: src/ui/table.md:114 msgid "" "Since v0.5.636 the macOS `Table` exposes a column-sort callback, multi-row " "selection, and a passive filter-text slot the user wires to their own row-" @@ -22704,7 +22901,7 @@ msgstr "" "la sélection de plusieurs lignes et un emplacement de texte de filtre passif " "que l'utilisateur connecte à sa propre logique de masquage des lignes." -#: src/ui/table.md:113 +#: src/ui/table.md:118 msgid "" "```typescript,no-test\n" "import {\n" @@ -22776,16 +22973,16 @@ msgstr "" "console.log(tableGetFilterText(table));\n" "```" -#: src/ui/table.md:147 +#: src/ui/table.md:152 msgid "" -"These are real impls on macOS via `NSTableView.sortDescriptors` and " -"`selectedRowIndexes`; other platforms link safe-default stubs." +"These are implemented on macOS via `NSTableView.sortDescriptors` and " +"`selectedRowIndexes`, and on Android. On Android, tapping a header toggles " +"its sort direction and invokes the callback; multi-selection toggles rows on " +"tap. The filter slot is passive on both platforms. Other platforms link safe-" +"default stubs." msgstr "" -"Ce sont de vraies implémentations sur macOS via `NSTableView." -"sortDescriptors` et `selectedRowIndexes` ; les autres plateformes sont liées " -"à des stubs avec comportement par défaut sécurisé." -#: src/ui/table.md:154 +#: src/ui/table.md:162 msgid "[Events](events.md) — Event handling" msgstr "[Événements](events.md) — Gestion des événements" @@ -23418,15 +23615,17 @@ msgstr "" #: src/ui/multi-window.md:118 msgid "" -"**macOS materials:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, `\"menu" -"\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, `\"windowBackground\"`, `" -"\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, `\"contentBackground\"`, `" -"\"underWindowBackground\"`, `\"underPageBackground\"`" +"**macOS materials:** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, " +"`\"menu\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, " +"`\"windowBackground\"`, `\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, " +"`\"contentBackground\"`, `\"underWindowBackground\"`, " +"`\"underPageBackground\"`" msgstr "" -"**Matériaux macOS :** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, `\"menu" -"\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, `\"windowBackground\"`, `" -"\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, `\"contentBackground\"`, `" -"\"underWindowBackground\"`, `\"underPageBackground\"`" +"**Matériaux macOS :** `\"sidebar\"`, `\"titlebar\"`, `\"selection\"`, " +"`\"menu\"`, `\"popover\"`, `\"headerView\"`, `\"sheet\"`, " +"`\"windowBackground\"`, `\"hudWindow\"`, `\"fullScreenUI\"`, `\"tooltip\"`, " +"`\"contentBackground\"`, `\"underWindowBackground\"`, " +"`\"underPageBackground\"`" #: src/ui/multi-window.md:125 msgid "`NSVisualEffectView` with the specified material" @@ -24307,9 +24506,9 @@ msgstr "" "`WebKitGTK 6.0` sur Linux, `android.webkit.WebView` sur Android, et un " "`