@layerzerolabs/build-utils-rust 0.2.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +43 -0
- package/.turbo/turbo-lint.log +8 -0
- package/.turbo/turbo-test.log +58 -0
- package/README.md +111 -0
- package/dist/457ZJTJH.js +52 -0
- package/dist/457ZJTJH.js.map +1 -0
- package/dist/LQ26FJL3.js +112 -0
- package/dist/LQ26FJL3.js.map +1 -0
- package/dist/SPODHCGD.js +59 -0
- package/dist/SPODHCGD.js.map +1 -0
- package/dist/TOEFRNPD.js +83 -0
- package/dist/TOEFRNPD.js.map +1 -0
- package/dist/UDDAJZY4.js +26 -0
- package/dist/UDDAJZY4.js.map +1 -0
- package/dist/VUOMXK5T.js +6 -0
- package/dist/VUOMXK5T.js.map +1 -0
- package/dist/WKRDI535.js +51 -0
- package/dist/WKRDI535.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +28 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +8 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +4 -0
- package/dist/logger.js.map +1 -0
- package/dist/resolve/discover.d.ts +23 -0
- package/dist/resolve/discover.d.ts.map +1 -0
- package/dist/resolve/discover.js +7 -0
- package/dist/resolve/discover.js.map +1 -0
- package/dist/resolve/exclude.d.ts +10 -0
- package/dist/resolve/exclude.d.ts.map +1 -0
- package/dist/resolve/exclude.js +4 -0
- package/dist/resolve/exclude.js.map +1 -0
- package/dist/resolve/index.d.ts +20 -0
- package/dist/resolve/index.d.ts.map +1 -0
- package/dist/resolve/index.js +9 -0
- package/dist/resolve/index.js.map +1 -0
- package/dist/resolve/io.d.ts +17 -0
- package/dist/resolve/io.d.ts.map +1 -0
- package/dist/resolve/io.js +6 -0
- package/dist/resolve/io.js.map +1 -0
- package/dist/resolve/rewrite.d.ts +41 -0
- package/dist/resolve/rewrite.d.ts.map +1 -0
- package/dist/resolve/rewrite.js +8 -0
- package/dist/resolve/rewrite.js.map +1 -0
- package/package.json +46 -0
- package/src/cli.ts +33 -0
- package/src/index.ts +1 -0
- package/src/logger.ts +26 -0
- package/src/resolve/discover.ts +93 -0
- package/src/resolve/exclude.ts +52 -0
- package/src/resolve/index.ts +122 -0
- package/src/resolve/io.ts +69 -0
- package/src/resolve/rewrite.ts +210 -0
- package/tests/resolve/discover.test.ts +206 -0
- package/tests/resolve/fixtures/index.ts +6 -0
- package/tests/resolve/fixtures/minimal.toml +2 -0
- package/tests/resolve/fixtures/mixed-deps.toml +4 -0
- package/tests/resolve/fixtures/multi-path-deps.toml +9 -0
- package/tests/resolve/fixtures/multi-section-path-deps.toml +13 -0
- package/tests/resolve/fixtures/no-path-deps.toml +3 -0
- package/tests/resolve/fixtures/oapp-with-stale-deps.toml +5 -0
- package/tests/resolve/fixtures/patch-multi-registry.toml +22 -0
- package/tests/resolve/fixtures/program-with-deps.toml +5 -0
- package/tests/resolve/fixtures/program-with-macros.toml +6 -0
- package/tests/resolve/fixtures/program-workspace-member.toml +5 -0
- package/tests/resolve/fixtures/root-only-sections.toml +13 -0
- package/tests/resolve/fixtures/stellar-consumer.toml +8 -0
- package/tests/resolve/fixtures/stellar-member-inheriting.toml +10 -0
- package/tests/resolve/fixtures/stellar-workspace-root.toml +17 -0
- package/tests/resolve/fixtures/stellar-workspace-with-tests.toml +15 -0
- package/tests/resolve/fixtures/target-cfg-path-dep.toml +10 -0
- package/tests/resolve/fixtures/with-features.toml +2 -0
- package/tests/resolve/fixtures/workspace-at-end.toml +6 -0
- package/tests/resolve/fixtures/workspace-at-top.toml +10 -0
- package/tests/resolve/fixtures/workspace-middle.toml +10 -0
- package/tests/resolve/fixtures/workspace-with-default-members.toml +8 -0
- package/tests/resolve/fixtures/workspace-with-path-deps.toml +8 -0
- package/tests/resolve/index.test.ts +298 -0
- package/tests/resolve/rewrite.test.ts +420 -0
- package/tsconfig.json +21 -0
- package/tsup.config.ts +8 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
WARN Issue while reading "/home/runner/work/monorepo-internal/monorepo-internal/.npmrc". Failed to replace env in config: ${NPM_TOKEN}
|
|
2
|
+
|
|
3
|
+
> @layerzerolabs/build-utils-rust@0.0.0 build /home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils
|
|
4
|
+
> tsup
|
|
5
|
+
|
|
6
|
+
[34mCLI[39m Building entry: src/cli.ts, src/index.ts, src/logger.ts, src/resolve/discover.ts, src/resolve/exclude.ts, src/resolve/index.ts, src/resolve/io.ts, src/resolve/rewrite.ts
|
|
7
|
+
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
8
|
+
[34mCLI[39m tsup v8.5.1
|
|
9
|
+
[34mCLI[39m Using tsup config: /home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils/tsup.config.ts
|
|
10
|
+
[34mCLI[39m Target: ES2023
|
|
11
|
+
[34mCLI[39m Cleaning output folder
|
|
12
|
+
[34mESM[39m Build start
|
|
13
|
+
[32mESM[39m [1mdist/cli.js [22m[32m1.29 KB[39m
|
|
14
|
+
[32mESM[39m [1mdist/resolve/exclude.js [22m[32m187.00 B[39m
|
|
15
|
+
[32mESM[39m [1mdist/logger.js [22m[32m171.00 B[39m
|
|
16
|
+
[32mESM[39m [1mdist/index.js [22m[32m264.00 B[39m
|
|
17
|
+
[32mESM[39m [1mdist/resolve/io.js [22m[32m224.00 B[39m
|
|
18
|
+
[32mESM[39m [1mdist/resolve/discover.js [22m[32m250.00 B[39m
|
|
19
|
+
[32mESM[39m [1mdist/TOEFRNPD.js [22m[32m3.20 KB[39m
|
|
20
|
+
[32mESM[39m [1mdist/resolve/rewrite.js [22m[32m333.00 B[39m
|
|
21
|
+
[32mESM[39m [1mdist/457ZJTJH.js [22m[32m1.71 KB[39m
|
|
22
|
+
[32mESM[39m [1mdist/UDDAJZY4.js [22m[32m796.00 B[39m
|
|
23
|
+
[32mESM[39m [1mdist/resolve/index.js [22m[32m297.00 B[39m
|
|
24
|
+
[32mESM[39m [1mdist/SPODHCGD.js [22m[32m1.78 KB[39m
|
|
25
|
+
[32mESM[39m [1mdist/LQ26FJL3.js [22m[32m4.54 KB[39m
|
|
26
|
+
[32mESM[39m [1mdist/VUOMXK5T.js [22m[32m222.00 B[39m
|
|
27
|
+
[32mESM[39m [1mdist/WKRDI535.js [22m[32m1.20 KB[39m
|
|
28
|
+
[32mESM[39m [1mdist/cli.js.map [22m[32m2.44 KB[39m
|
|
29
|
+
[32mESM[39m [1mdist/logger.js.map [22m[32m70.00 B[39m
|
|
30
|
+
[32mESM[39m [1mdist/resolve/exclude.js.map [22m[32m71.00 B[39m
|
|
31
|
+
[32mESM[39m [1mdist/resolve/io.js.map [22m[32m66.00 B[39m
|
|
32
|
+
[32mESM[39m [1mdist/resolve/discover.js.map [22m[32m72.00 B[39m
|
|
33
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m69.00 B[39m
|
|
34
|
+
[32mESM[39m [1mdist/457ZJTJH.js.map [22m[32m5.33 KB[39m
|
|
35
|
+
[32mESM[39m [1mdist/resolve/rewrite.js.map [22m[32m71.00 B[39m
|
|
36
|
+
[32mESM[39m [1mdist/SPODHCGD.js.map [22m[32m4.67 KB[39m
|
|
37
|
+
[32mESM[39m [1mdist/TOEFRNPD.js.map [22m[32m8.64 KB[39m
|
|
38
|
+
[32mESM[39m [1mdist/UDDAJZY4.js.map [22m[32m1.55 KB[39m
|
|
39
|
+
[32mESM[39m [1mdist/resolve/index.js.map [22m[32m69.00 B[39m
|
|
40
|
+
[32mESM[39m [1mdist/VUOMXK5T.js.map [22m[32m72.00 B[39m
|
|
41
|
+
[32mESM[39m [1mdist/WKRDI535.js.map [22m[32m2.67 KB[39m
|
|
42
|
+
[32mESM[39m [1mdist/LQ26FJL3.js.map [22m[32m13.31 KB[39m
|
|
43
|
+
[32mESM[39m ⚡️ Build success in 214ms
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
|
|
2
|
+
> @layerzerolabs/build-utils-rust@0.0.0 lint /home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils
|
|
3
|
+
> eslint . --max-warnings 0 || (eslint . --fix --max-warnings 0 && false)
|
|
4
|
+
|
|
5
|
+
(node:136810) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/monorepo-internal/monorepo-internal/eslint.config.js?mtime=1783402791983 is not specified and it doesn't parse as CommonJS.
|
|
6
|
+
Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
|
|
7
|
+
To eliminate this warning, add "type": "module" to /home/runner/work/monorepo-internal/monorepo-internal/package.json.
|
|
8
|
+
(Use `node --trace-warnings ...` to show where the warning was created)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
> @layerzerolabs/build-utils-rust@0.0.0 test /home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils
|
|
3
|
+
> vitest --run --pass-with-no-tests --typecheck
|
|
4
|
+
|
|
5
|
+
[33mTesting types with tsc and vue-tsc is an experimental feature.
|
|
6
|
+
Breaking changes might not follow SemVer, please pin Vitest's version when using it.[39m
|
|
7
|
+
|
|
8
|
+
[1m[46m RUN [49m[22m [36mv3.2.6 [39m[90m/home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils[39m
|
|
9
|
+
|
|
10
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — single crate mode[2m > [22m[2mcopies discovered packages into dependencies/ and rewrites transitive paths
|
|
11
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
12
|
+
|
|
13
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — workspace mode ([workspace] members)[2m > [22m[2mplaces dependencies/ at workspace root when root Cargo.toml has [workspace]
|
|
14
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
15
|
+
|
|
16
|
+
[32m✓[39m tests/resolve/discover.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m 26[2mms[22m[39m
|
|
17
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — transitive dep rewriting[2m > [22m[2mrewrites paths inside copied crates to point to flat siblings
|
|
18
|
+
[22m[39m[INFO] Resolved 2 Cargo dependencies into dependencies
|
|
19
|
+
|
|
20
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — transitive dep rewriting[2m > [22m[2mstrips root-only Cargo tables from copied dependency manifests
|
|
21
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
22
|
+
|
|
23
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — Stellar workspace dependency vendoring[2m > [22m[2mcopies the whole workspace tree, including deeply nested members
|
|
24
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
25
|
+
|
|
26
|
+
[32m✓[39m tests/resolve/rewrite.test.ts [2m([22m[2m20 tests[22m[2m)[22m[32m 45[2mms[22m[39m
|
|
27
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — Stellar workspace dependency vendoring[2m > [22m[2mpreserves the [workspace] root manifest so member inheritance still resolves
|
|
28
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
29
|
+
|
|
30
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — Stellar workspace dependency vendoring[2m > [22m[2mleaves the consumer manifest untouched (it already points at dependencies/)
|
|
31
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
32
|
+
|
|
33
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — Stellar workspace dependency vendoring[2m > [22m[2mvendors the deep member the consumer path-deps into
|
|
34
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
35
|
+
|
|
36
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — prune excluded workspace members[2m > [22m[2mdrops the excluded member from the preserved root manifest, keeps real members
|
|
37
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
38
|
+
|
|
39
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — prune excluded workspace members[2m > [22m[2mdoes not vendor the excluded subtree at all
|
|
40
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
41
|
+
|
|
42
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — single-crate consumer (no [workspace])[2m > [22m[2mplaces dependencies/ next to the crate Cargo.toml
|
|
43
|
+
[22m[39m[INFO] Resolved 1 Cargo dependencies into dependencies
|
|
44
|
+
|
|
45
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — error handling[2m > [22m[2mempty node_modules does not change dependencies state[2m > [22m[2mdependencies does not exist
|
|
46
|
+
[22m[39m[INFO] No @layerzerolabs namespaced Cargo dependencies found in node_modules
|
|
47
|
+
|
|
48
|
+
[90mstdout[2m | tests/resolve/index.test.ts[2m > [22m[2mresolveDependencies — error handling[2m > [22m[2mempty node_modules does not change dependencies state[2m > [22m[2mdependencies already exists
|
|
49
|
+
[22m[39m[INFO] No @layerzerolabs namespaced Cargo dependencies found in node_modules
|
|
50
|
+
|
|
51
|
+
[32m✓[39m tests/resolve/index.test.ts [2m([22m[2m14 tests[22m[2m)[22m[32m 111[2mms[22m[39m
|
|
52
|
+
|
|
53
|
+
[2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
|
|
54
|
+
[2m Tests [22m [1m[32m50 passed[39m[22m[90m (50)[39m
|
|
55
|
+
[2mType Errors [22m [2mno errors[22m
|
|
56
|
+
[2m Start at [22m 05:46:59
|
|
57
|
+
[2m Duration [22m 781ms[2m (transform 333ms, setup 0ms, collect 844ms, tests 182ms, environment 1ms, prepare 423ms)[22m
|
|
58
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# @layerzerolabs/build-utils-rust
|
|
2
|
+
|
|
3
|
+
Build utilities for Rust/Cargo packages in the LayerZero monorepo.
|
|
4
|
+
|
|
5
|
+
These helpers bridge the gap between the npm/pnpm package graph and Cargo's
|
|
6
|
+
build model, so Rust-based VM packages (Solana, Stellar, …) can be compiled
|
|
7
|
+
using their normal monorepo dependencies. Today the package exposes a single
|
|
8
|
+
command — `resolve` — with more to follow as the Rust build story grows.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
Add it as a dev dependency of the Rust package you want to build:
|
|
13
|
+
|
|
14
|
+
```jsonc
|
|
15
|
+
// package.json
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@layerzerolabs/build-utils-rust": "workspace:*"
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Commands
|
|
22
|
+
|
|
23
|
+
### `resolve`
|
|
24
|
+
|
|
25
|
+
Resolves all `@layerzerolabs` Cargo crates reachable through `node_modules`
|
|
26
|
+
(direct and transitive) into a flat `dependencies/` directory next to your
|
|
27
|
+
package, rewriting the `path = "…"` deps inside each copied `Cargo.toml` so the
|
|
28
|
+
vendored crates resolve each other locally.
|
|
29
|
+
|
|
30
|
+
The point is a self-contained package: instead of Cargo path deps reaching out
|
|
31
|
+
through `node_modules` (pnpm symlinks that point outside the package), every
|
|
32
|
+
dependency lives under the package root. This lets a build container mount only
|
|
33
|
+
the package — no monorepo, no registry publish, no git deps.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# From the Rust package root (auto-discovers layout)
|
|
37
|
+
build-utils-rust resolve
|
|
38
|
+
|
|
39
|
+
# Point at a specific package root / crate explicitly
|
|
40
|
+
build-utils-rust resolve --cwd ./path/to/package --cargo-dir ./contracts/my-crate
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
| Option | Description |
|
|
44
|
+
| -------------------- | -------------------------------------------------------------------------------------------- |
|
|
45
|
+
| `--cwd <path>` | pnpm package root (where `node_modules/` lives). Defaults to the current dir. |
|
|
46
|
+
| `--cargo-dir <path>` | Cargo crate directory to write `dependencies/` into. Defaults to the package root (`--cwd`). |
|
|
47
|
+
| `--log-level <lvl>` | `trace` \| `debug` \| `info` \| `warn` \| `error`. Defaults to `info`. |
|
|
48
|
+
|
|
49
|
+
#### Where `dependencies/` is written
|
|
50
|
+
|
|
51
|
+
`dependencies/` is created at the resolved Cargo root — `--cargo-dir` if given,
|
|
52
|
+
otherwise the package root (`--cwd`). There's no VM-specific convention (no
|
|
53
|
+
hardcoded `programs/`, no `Anchor.toml`); it works for whatever layout the root
|
|
54
|
+
`Cargo.toml` describes:
|
|
55
|
+
|
|
56
|
+
- **Workspace root** (`[workspace]` at the package root) — one shared
|
|
57
|
+
`dependencies/` at the root, referenced by members via relative paths (Solana
|
|
58
|
+
`programs/*`, Stellar workspaces).
|
|
59
|
+
- **Single crate** (bare `[package]`) — `dependencies/` sits next to that
|
|
60
|
+
crate's `Cargo.toml` (Solana library crates, a standalone Stellar crate).
|
|
61
|
+
|
|
62
|
+
#### What gets vendored (and what doesn't)
|
|
63
|
+
|
|
64
|
+
- **Files:** only `.rs`, `.toml`, and `.json` are copied. Prebuilt or non-source
|
|
65
|
+
assets a build might read (`.wasm`, `.bin`, `.proto`, `.md`, …) are **not**
|
|
66
|
+
vendored. If a crate's build genuinely needs one, add its extension to
|
|
67
|
+
`COPY_EXTENSIONS` in `src/resolve/exclude.ts`.
|
|
68
|
+
- **Path deps:** rewritten by parsing the manifest (via `smol-toml`), so every TOML
|
|
69
|
+
form is handled — inline tables (`dep = { path = "…" }`), the table-header form
|
|
70
|
+
(`[dependencies.dep]` + `path = "…"`), `[dev-/build-dependencies]`,
|
|
71
|
+
`[target.'cfg(…)'.dependencies]`, and `[workspace.dependencies]`. A rewritten manifest
|
|
72
|
+
is re-serialized (comments/formatting are not preserved), which is invisible because
|
|
73
|
+
`dependencies/` is regenerated every build; unchanged manifests are left untouched.
|
|
74
|
+
- **Scope:** every `@layerzerolabs` Cargo crate reachable through `node_modules`
|
|
75
|
+
is vendored. That set is already pruned by pnpm to your package's declared deps,
|
|
76
|
+
and a workspace dependency is copied **whole** (all members) to keep
|
|
77
|
+
`workspace = true` inheritance intact — so some unused member crates may be copied.
|
|
78
|
+
|
|
79
|
+
#### Workspace dependencies
|
|
80
|
+
|
|
81
|
+
When a resolved dependency is itself a Cargo workspace (e.g.
|
|
82
|
+
`@layerzerolabs/protocol-stellar-v2`, whose member crates use
|
|
83
|
+
`version.workspace = true` / `dep = { workspace = true }`), it is copied **whole**
|
|
84
|
+
into `dependencies/<pkg>/` with its `[workspace]` root manifest preserved. That
|
|
85
|
+
keeps the vendored member crates' workspace inheritance intact, and lets a
|
|
86
|
+
consumer path-dep into a sub-crate any number of levels deep, e.g.
|
|
87
|
+
`dependencies/protocol-stellar-v2/contracts/oapps/oft-core`.
|
|
88
|
+
|
|
89
|
+
#### Consuming the vendored crates
|
|
90
|
+
|
|
91
|
+
`resolve` only **fills** `dependencies/` — it does **not** edit the consuming
|
|
92
|
+
package's own `Cargo.toml`. Point your package's path deps at `dependencies/…`
|
|
93
|
+
directly (the same way the Solana packages do):
|
|
94
|
+
|
|
95
|
+
```toml
|
|
96
|
+
# package Cargo.toml
|
|
97
|
+
[dependencies]
|
|
98
|
+
utils = { path = "dependencies/protocol-stellar-v2/contracts/utils" }
|
|
99
|
+
oft-core = { path = "dependencies/protocol-stellar-v2/contracts/oapps/oft-core" }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Typically wired into a package's `build` script ahead of the Cargo build so
|
|
103
|
+
dependencies are resolved fresh each time.
|
|
104
|
+
|
|
105
|
+
## Development
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
pnpm build # bundle with tsup
|
|
109
|
+
pnpm test # run the vitest suite
|
|
110
|
+
pnpm lint # eslint
|
|
111
|
+
```
|
package/dist/457ZJTJH.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { tryRealpath, tryReaddir } from './SPODHCGD.js';
|
|
2
|
+
import { logger } from './UDDAJZY4.js';
|
|
3
|
+
import { __name } from './VUOMXK5T.js';
|
|
4
|
+
import { stat, access, readFile } from 'fs/promises';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { parse } from 'smol-toml';
|
|
7
|
+
|
|
8
|
+
var LZ_SCOPE = "@layerzerolabs";
|
|
9
|
+
var isCrate = /* @__PURE__ */ __name(async (dir) => {
|
|
10
|
+
try {
|
|
11
|
+
const stats = await stat(dir);
|
|
12
|
+
if (!stats.isDirectory()) return false;
|
|
13
|
+
await access(join(dir, "Cargo.toml"));
|
|
14
|
+
return true;
|
|
15
|
+
} catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}, "isCrate");
|
|
19
|
+
var isWorkspaceRoot = /* @__PURE__ */ __name(async (crateRoot) => {
|
|
20
|
+
const manifestPath = join(crateRoot, "Cargo.toml");
|
|
21
|
+
let raw;
|
|
22
|
+
try {
|
|
23
|
+
raw = await readFile(manifestPath, "utf-8");
|
|
24
|
+
} catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
return parse(raw).workspace != null;
|
|
29
|
+
} catch (err) {
|
|
30
|
+
logger.warn(`failed to parse ${manifestPath}; treating as non-workspace`, err);
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}, "isWorkspaceRoot");
|
|
34
|
+
var discoverPackages = /* @__PURE__ */ __name(async (dir, discovered, visited) => {
|
|
35
|
+
const realDir = await tryRealpath(dir);
|
|
36
|
+
if (!realDir || visited.has(realDir)) return;
|
|
37
|
+
visited.add(realDir);
|
|
38
|
+
const nodeModulesDir = join(dir, "node_modules", LZ_SCOPE);
|
|
39
|
+
for (const pkgName of await tryReaddir(nodeModulesDir)) {
|
|
40
|
+
const realPath = await tryRealpath(join(nodeModulesDir, pkgName));
|
|
41
|
+
const isValidCratePath = realPath && await isCrate(realPath);
|
|
42
|
+
if (!isValidCratePath) continue;
|
|
43
|
+
if (!discovered.has(pkgName)) {
|
|
44
|
+
discovered.set(pkgName, realPath);
|
|
45
|
+
}
|
|
46
|
+
await discoverPackages(realPath, discovered, visited);
|
|
47
|
+
}
|
|
48
|
+
}, "discoverPackages");
|
|
49
|
+
|
|
50
|
+
export { discoverPackages, isCrate, isWorkspaceRoot };
|
|
51
|
+
//# sourceMappingURL=457ZJTJH.js.map
|
|
52
|
+
//# sourceMappingURL=457ZJTJH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resolve/discover.ts"],"names":["LZ_SCOPE","isCrate","dir","stats","stat","isDirectory","access","join","isWorkspaceRoot","crateRoot","manifestPath","raw","readFile","parse","workspace","err","logger","warn","discoverPackages","discovered","visited","realDir","tryRealpath","has","add","nodeModulesDir","pkgName","tryReaddir","realPath","isValidCratePath","set"],"mappings":";;;;;;;AAaA,IAAMA,QAAAA,GAAW,gBAAA;AAmBV,IAAMC,OAAAA,iCAAiBC,GAAAA,KAAAA;AAC1B,EAAA,IAAI;AACA,IAAA,MAAMC,KAAAA,GAAQ,MAAMC,IAAAA,CAAKF,GAAAA,CAAAA;AACzB,IAAA,IAAI,CAACC,KAAAA,CAAME,WAAAA,EAAW,EAAI,OAAO,KAAA;AACjC,IAAA,MAAMC,MAAAA,CAAOC,IAAAA,CAAKL,GAAAA,EAAK,YAAA,CAAA,CAAA;AACvB,IAAA,OAAO,IAAA;EACX,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,KAAA;AACX,EAAA;AACJ,CAAA,EATuB,SAAA;AAYhB,IAAMM,eAAAA,iCAAyBC,SAAAA,KAAAA;AAClC,EAAA,MAAMC,YAAAA,GAAeH,IAAAA,CAAKE,SAAAA,EAAW,YAAA,CAAA;AACrC,EAAA,IAAIE,GAAAA;AACJ,EAAA,IAAI;AACAA,IAAAA,GAAAA,GAAM,MAAMC,QAAAA,CAASF,YAAAA,EAAc,OAAA,CAAA;EACvC,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,KAAA;AACX,EAAA;AACA,EAAA,IAAI;AACA,IAAA,OAAOG,KAAAA,CAAMF,GAAAA,CAAAA,CAAKG,SAAAA,IAAa,IAAA;AACnC,EAAA,CAAA,CAAA,OAASC,GAAAA,EAAK;AAGVC,IAAAA,MAAAA,CAAOC,IAAAA,CAAK,CAAA,gBAAA,EAAmBP,YAAAA,CAAAA,2BAAAA,CAAAA,EAA2CK,GAAAA,CAAAA;AAC1E,IAAA,OAAO,KAAA;AACX,EAAA;AACJ,CAAA,EAhB+B,iBAAA;AAwBxB,IAAMG,gBAAAA,mBAAmB,MAAA,CAAA,OAC5BhB,GAAAA,EACAiB,UAAAA,EACAC,OAAAA,KAAAA;AAEA,EAAA,MAAMC,OAAAA,GAAU,MAAMC,WAAAA,CAAYpB,GAAAA,CAAAA;AAClC,EAAA,IAAI,CAACmB,OAAAA,IAAWD,OAAAA,CAAQG,GAAAA,CAAIF,OAAAA,CAAAA,EAAU;AACtCD,EAAAA,OAAAA,CAAQI,IAAIH,OAAAA,CAAAA;AAEZ,EAAA,MAAMI,cAAAA,GAAiBlB,IAAAA,CAAKL,GAAAA,EAAK,cAAA,EAAgBF,QAAAA,CAAAA;AAEjD,EAAA,KAAA,MAAW0B,OAAAA,IAAW,MAAMC,UAAAA,CAAWF,cAAAA,CAAAA,EAAiB;AAEpD,IAAA,MAAMG,WAAW,MAAMN,WAAAA,CAAYf,IAAAA,CAAKkB,cAAAA,EAAgBC,OAAAA,CAAAA,CAAAA;AACxD,IAAA,MAAMG,gBAAAA,GAAmBD,QAAAA,IAAa,MAAM3B,OAAAA,CAAQ2B,QAAAA,CAAAA;AACpD,IAAA,IAAI,CAACC,gBAAAA,EAAkB;AAEvB,IAAA,IAAI,CAACV,UAAAA,CAAWI,GAAAA,CAAIG,OAAAA,CAAAA,EAAU;AAC1BP,MAAAA,UAAAA,CAAWW,GAAAA,CAAIJ,SAASE,QAAAA,CAAAA;AAC5B,IAAA;AAGA,IAAA,MAAMV,gBAAAA,CAAiBU,QAAAA,EAAUT,UAAAA,EAAYC,OAAAA,CAAAA;AACjD,EAAA;AACJ,CAAA,EAxBgC,kBAAA","file":"457ZJTJH.js","sourcesContent":["/** Discovery — walk node_modules/@layerzerolabs/ to find all @layerzerolabs Cargo crates. */\n\nimport { access, readFile, stat } from 'fs/promises';\nimport { join } from 'path';\nimport { parse } from 'smol-toml';\n\nimport { logger } from '../logger';\nimport type { CollectedTree } from './io';\nimport { tryReaddir, tryRealpath } from './io';\n\n// ─── Constants ───\n\n/** Only packages under this npm scope are treated as Cargo dependencies. */\nconst LZ_SCOPE = '@layerzerolabs';\n\n// ─── Types ───\n\n/** A discovered package paired with its collected source tree, ready to vendor. */\nexport interface VendorTarget {\n /** npm package name (without scope) — the dependencies/ subdir. */\n pkgName: string;\n /** canonical source path (realpath through pnpm symlinks). */\n npmPkgDir: string;\n /** vendored location: dependencies/<pkgName>. */\n depsPkgDir: string;\n /** included file/dir tree (excluded subtrees already pruned). */\n tree: CollectedTree;\n}\n\n// ─── Crate Helpers ───\n\n/** Checks if the directory contains a Cargo.toml. */\nexport const isCrate = async (dir: string): Promise<boolean> => {\n try {\n const stats = await stat(dir);\n if (!stats.isDirectory()) return false;\n await access(join(dir, 'Cargo.toml'));\n return true;\n } catch {\n return false;\n }\n};\n\n/** True if the directory's Cargo.toml declares a `[workspace]` table. */\nexport const isWorkspaceRoot = async (crateRoot: string): Promise<boolean> => {\n const manifestPath = join(crateRoot, 'Cargo.toml');\n let raw: string;\n try {\n raw = await readFile(manifestPath, 'utf-8');\n } catch {\n return false; // no readable Cargo.toml here — not a workspace root\n }\n try {\n return parse(raw).workspace != null;\n } catch (err) {\n // Warn rather than silently treat a malformed manifest as a non-workspace\n // (which would strip its [workspace] table); the parser is stricter than Cargo.\n logger.warn(`failed to parse ${manifestPath}; treating as non-workspace`, err);\n return false;\n }\n};\n\n// ─── Main Functions ───\n\n/**\n * Recursively discover all @layerzerolabs Cargo packages reachable from `dir`'s node_modules.\n * Resolves pnpm symlinks to canonical paths; `visited` prevents re-walking shared deps.\n */\nexport const discoverPackages = async (\n dir: string,\n discovered: Map<string, string>,\n visited: Set<string>,\n): Promise<void> => {\n const realDir = await tryRealpath(dir);\n if (!realDir || visited.has(realDir)) return;\n visited.add(realDir);\n\n const nodeModulesDir = join(dir, 'node_modules', LZ_SCOPE);\n\n for (const pkgName of await tryReaddir(nodeModulesDir)) {\n // Resolve pnpm symlink to canonical path (deduplicates across dep chains)\n const realPath = await tryRealpath(join(nodeModulesDir, pkgName));\n const isValidCratePath = realPath && (await isCrate(realPath));\n if (!isValidCratePath) continue;\n\n if (!discovered.has(pkgName)) {\n discovered.set(pkgName, realPath);\n }\n\n // Walk this package's own node_modules for transitive Cargo deps\n await discoverPackages(realPath, discovered, visited);\n }\n};\n"]}
|
package/dist/LQ26FJL3.js
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { isWorkspaceRoot } from './457ZJTJH.js';
|
|
2
|
+
import { tryRealpath } from './SPODHCGD.js';
|
|
3
|
+
import { logger } from './UDDAJZY4.js';
|
|
4
|
+
import { hasExcludedSegment } from './WKRDI535.js';
|
|
5
|
+
import { __name } from './VUOMXK5T.js';
|
|
6
|
+
import { readFile, writeFile } from 'fs/promises';
|
|
7
|
+
import { relative, dirname, join } from 'path';
|
|
8
|
+
import { parse, stringify } from 'smol-toml';
|
|
9
|
+
|
|
10
|
+
var isTable = /* @__PURE__ */ __name((value) => typeof value === "object" && value !== null && !Array.isArray(value), "isTable");
|
|
11
|
+
var DEP_TABLE_KEYS = [
|
|
12
|
+
"dependencies",
|
|
13
|
+
"dev-dependencies",
|
|
14
|
+
"build-dependencies"
|
|
15
|
+
];
|
|
16
|
+
var pathDepSpecs = /* @__PURE__ */ __name((manifest, includeWorkspaceDeps) => {
|
|
17
|
+
const containers = [
|
|
18
|
+
manifest,
|
|
19
|
+
...isTable(manifest.target) ? Object.values(manifest.target).filter(isTable) : []
|
|
20
|
+
];
|
|
21
|
+
const depTables = [
|
|
22
|
+
...containers.flatMap((container) => DEP_TABLE_KEYS.map((key) => container[key])),
|
|
23
|
+
...includeWorkspaceDeps && isTable(manifest.workspace) ? [
|
|
24
|
+
manifest.workspace.dependencies
|
|
25
|
+
] : []
|
|
26
|
+
];
|
|
27
|
+
return depTables.filter(isTable).flatMap((table) => Object.values(table)).filter((spec) => isTable(spec) && typeof spec.path === "string");
|
|
28
|
+
}, "pathDepSpecs");
|
|
29
|
+
var pruneExcludedLiteralMembers = /* @__PURE__ */ __name((manifest) => {
|
|
30
|
+
const workspace = manifest.workspace;
|
|
31
|
+
if (!isTable(workspace)) return false;
|
|
32
|
+
let changed = false;
|
|
33
|
+
for (const key of [
|
|
34
|
+
"members",
|
|
35
|
+
"default-members"
|
|
36
|
+
]) {
|
|
37
|
+
const members = workspace[key];
|
|
38
|
+
if (!Array.isArray(members)) continue;
|
|
39
|
+
const kept = members.filter((m) => typeof m !== "string" || m.includes("*") || !hasExcludedSegment(m));
|
|
40
|
+
if (kept.length !== members.length) {
|
|
41
|
+
workspace[key] = kept;
|
|
42
|
+
changed = true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return changed;
|
|
46
|
+
}, "pruneExcludedLiteralMembers");
|
|
47
|
+
var rewritePathDeps = /* @__PURE__ */ __name(async (manifest, originalDir, manifestDir, ctx, includeWorkspaceDeps) => {
|
|
48
|
+
let changed = false;
|
|
49
|
+
for (const spec of pathDepSpecs(manifest, includeWorkspaceDeps)) {
|
|
50
|
+
const target = await resolveViaRealpath(originalDir, spec.path, ctx.pathMap) ?? resolveViaNameFallback(spec.path, ctx);
|
|
51
|
+
if (!target) continue;
|
|
52
|
+
const rewritten = relative(manifestDir, target);
|
|
53
|
+
if (rewritten === spec.path) continue;
|
|
54
|
+
logger.trace(`rewrite path dep ${spec.path} -> ${rewritten}`);
|
|
55
|
+
spec.path = rewritten;
|
|
56
|
+
changed = true;
|
|
57
|
+
}
|
|
58
|
+
return changed;
|
|
59
|
+
}, "rewritePathDeps");
|
|
60
|
+
var stripRootOnlyTables = /* @__PURE__ */ __name((manifest) => {
|
|
61
|
+
let changed = false;
|
|
62
|
+
for (const table of [
|
|
63
|
+
"workspace",
|
|
64
|
+
"patch",
|
|
65
|
+
"profile"
|
|
66
|
+
]) {
|
|
67
|
+
if (manifest[table] != null) {
|
|
68
|
+
delete manifest[table];
|
|
69
|
+
changed = true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return changed;
|
|
73
|
+
}, "stripRootOnlyTables");
|
|
74
|
+
var rewriteCargoToml = /* @__PURE__ */ __name(async (originalDir, cargoTomlPath, ctx, stripRootTables = true) => {
|
|
75
|
+
const manifest = parse(await readFile(cargoTomlPath, "utf-8"));
|
|
76
|
+
const pathsChanged = await rewritePathDeps(manifest, originalDir, dirname(cargoTomlPath), ctx, !stripRootTables);
|
|
77
|
+
const tablesChanged = stripRootTables ? stripRootOnlyTables(manifest) : pruneExcludedLiteralMembers(manifest);
|
|
78
|
+
if (pathsChanged || tablesChanged) {
|
|
79
|
+
await writeFile(cargoTomlPath, stringify(manifest));
|
|
80
|
+
logger.debug(`rewrote ${cargoTomlPath}`);
|
|
81
|
+
}
|
|
82
|
+
}, "rewriteCargoToml");
|
|
83
|
+
var resolveViaRealpath = /* @__PURE__ */ __name(async (originalDir, pathValue, pathMap) => {
|
|
84
|
+
const resolvedPath = await tryRealpath(join(originalDir, pathValue));
|
|
85
|
+
return resolvedPath ? pathMap.get(resolvedPath) : void 0;
|
|
86
|
+
}, "resolveViaRealpath");
|
|
87
|
+
var resolveViaNameFallback = /* @__PURE__ */ __name((pathValue, ctx) => {
|
|
88
|
+
const segments = pathValue.split("/").filter(Boolean);
|
|
89
|
+
const leafDir = segments.at(-1);
|
|
90
|
+
if (!leafDir) return void 0;
|
|
91
|
+
for (const [pkgName, realPath] of ctx.discovered) {
|
|
92
|
+
if (pkgName === leafDir) {
|
|
93
|
+
return ctx.pathMap.get(realPath);
|
|
94
|
+
}
|
|
95
|
+
const parentDir = segments.at(-2);
|
|
96
|
+
if (parentDir && pkgName === parentDir) {
|
|
97
|
+
const subTarget = ctx.pathMap.get(join(realPath, leafDir));
|
|
98
|
+
if (subTarget) return subTarget;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return void 0;
|
|
102
|
+
}, "resolveViaNameFallback");
|
|
103
|
+
var rewriteCargoTomls = /* @__PURE__ */ __name(async (srcRoot, destRoot, tree, ctx) => {
|
|
104
|
+
for (const manifestDir of tree.manifestDirs) {
|
|
105
|
+
const preserve = manifestDir === "." && await isWorkspaceRoot(destRoot);
|
|
106
|
+
await rewriteCargoToml(join(srcRoot, manifestDir), join(destRoot, manifestDir, "Cargo.toml"), ctx, !preserve);
|
|
107
|
+
}
|
|
108
|
+
}, "rewriteCargoTomls");
|
|
109
|
+
|
|
110
|
+
export { pruneExcludedLiteralMembers, rewriteCargoToml, rewriteCargoTomls, rewritePathDeps, stripRootOnlyTables };
|
|
111
|
+
//# sourceMappingURL=LQ26FJL3.js.map
|
|
112
|
+
//# sourceMappingURL=LQ26FJL3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resolve/rewrite.ts"],"names":["isTable","value","Array","isArray","DEP_TABLE_KEYS","pathDepSpecs","manifest","includeWorkspaceDeps","containers","target","Object","values","filter","depTables","flatMap","container","map","key","workspace","dependencies","table","spec","path","pruneExcludedLiteralMembers","changed","members","kept","m","includes","hasExcludedSegment","length","rewritePathDeps","originalDir","manifestDir","ctx","resolveViaRealpath","pathMap","resolveViaNameFallback","rewritten","relative","logger","trace","stripRootOnlyTables","rewriteCargoToml","cargoTomlPath","stripRootTables","parse","readFile","pathsChanged","dirname","tablesChanged","writeFile","stringify","debug","pathValue","resolvedPath","tryRealpath","join","get","undefined","segments","split","Boolean","leafDir","at","pkgName","realPath","discovered","parentDir","subTarget","rewriteCargoTomls","srcRoot","destRoot","tree","manifestDirs","preserve","isWorkspaceRoot"],"mappings":"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","file":"LQ26FJL3.js","sourcesContent":["/**\n * Rewrite a vendored Cargo.toml's path deps into the flat dependencies/ layout,\n * operating on the parsed TOML (via smol-toml) rather than text.\n */\n\nimport { readFile, writeFile } from 'fs/promises';\nimport { dirname, join, relative } from 'path';\nimport { parse, stringify } from 'smol-toml';\n\nimport { logger } from '../logger';\nimport { isWorkspaceRoot } from './discover';\nimport { hasExcludedSegment } from './exclude';\nimport { type CollectedTree, tryRealpath } from './io';\n\n/** Bundled resolution state passed through the rewrite pipeline. */\nexport interface RewriteContext {\n pathMap: Map<string, string>;\n discovered: Map<string, string>;\n}\n\ntype Table = Record<string, unknown>;\n\n/** A dependency spec that carries a `path` — an inline table like `{ path = \"…\" }`. */\ntype PathDepSpec = Table & { path: string };\n\nconst isTable = (value: unknown): value is Table =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst DEP_TABLE_KEYS = ['dependencies', 'dev-dependencies', 'build-dependencies'] as const;\n\n/**\n * Dependency specs that declare a `path`, across every dependency table (plus\n * `[workspace.dependencies]` when `includeWorkspaceDeps`). Specs are live references\n * into `manifest`, so mutating `.path` updates it.\n */\nconst pathDepSpecs = (manifest: Table, includeWorkspaceDeps: boolean): PathDepSpec[] => {\n // The root manifest and each [target.'cfg(...)'] table both hold DEP_TABLE_KEYS tables.\n const containers = [\n manifest,\n ...(isTable(manifest.target) ? Object.values(manifest.target).filter(isTable) : []),\n ];\n\n const depTables = [\n ...containers.flatMap((container) => DEP_TABLE_KEYS.map((key) => container[key])),\n ...(includeWorkspaceDeps && isTable(manifest.workspace)\n ? [manifest.workspace.dependencies]\n : []),\n ];\n\n return depTables\n .filter(isTable)\n .flatMap((table) => Object.values(table))\n .filter((spec): spec is PathDepSpec => isTable(spec) && typeof spec.path === 'string');\n};\n\n/**\n * Drop literal `members` / `default-members` entries whose path contains an excluded\n * directory segment (e.g. `tests/mock_vault`) — those dirs are never vendored, so the\n * member would dangle and fail Cargo's workspace load. Globs (`tests/*`) are kept; Cargo\n * re-expands them to a harmless empty match. Returns true if any member was removed.\n */\nexport const pruneExcludedLiteralMembers = (manifest: Table): boolean => {\n const workspace = manifest.workspace;\n if (!isTable(workspace)) return false;\n\n let changed = false;\n for (const key of ['members', 'default-members'] as const) {\n const members = workspace[key];\n if (!Array.isArray(members)) continue;\n\n // Keep everything except literal (non-glob) members inside an excluded dir.\n const kept = members.filter(\n (m) => typeof m !== 'string' || m.includes('*') || !hasExcludedSegment(m),\n );\n\n if (kept.length !== members.length) {\n workspace[key] = kept;\n changed = true;\n }\n }\n return changed;\n};\n\n/** Rebase every path dep in `manifest` into the flat dependencies/ layout. Returns true if any changed. */\nexport const rewritePathDeps = async (\n manifest: Table,\n originalDir: string,\n manifestDir: string,\n ctx: RewriteContext,\n includeWorkspaceDeps: boolean,\n): Promise<boolean> => {\n let changed = false;\n for (const spec of pathDepSpecs(manifest, includeWorkspaceDeps)) {\n const target =\n (await resolveViaRealpath(originalDir, spec.path, ctx.pathMap)) ??\n resolveViaNameFallback(spec.path, ctx);\n if (!target) continue;\n\n const rewritten = relative(manifestDir, target);\n if (rewritten === spec.path) continue;\n\n logger.trace(`rewrite path dep ${spec.path} -> ${rewritten}`);\n spec.path = rewritten;\n changed = true;\n }\n\n return changed;\n};\n\n/**\n * Delete the `[workspace]` / `[patch.*]` / `[profile.*]` tables — invalid or ignored in a\n * vendored dependency (only honored at the real workspace root). Returns true if any was removed.\n */\nexport const stripRootOnlyTables = (manifest: Table): boolean => {\n let changed = false;\n for (const table of ['workspace', 'patch', 'profile'] as const) {\n if (manifest[table] != null) {\n delete manifest[table];\n changed = true;\n }\n }\n return changed;\n};\n\n/**\n * Rewrite one vendored Cargo.toml in place: rebase its path deps, then strip the root-only\n * tables — or, for a preserved workspace root (`stripRootTables = false`), prune excluded\n * members instead. Re-serialized only if something changed.\n *\n * @param originalDir source crate dir the manifest was copied from\n * @param cargoTomlPath the vendored Cargo.toml to rewrite\n */\nexport const rewriteCargoToml = async (\n originalDir: string,\n cargoTomlPath: string,\n ctx: RewriteContext,\n stripRootTables = true,\n): Promise<void> => {\n const manifest = parse(await readFile(cargoTomlPath, 'utf-8'));\n\n const pathsChanged = await rewritePathDeps(\n manifest,\n originalDir,\n dirname(cargoTomlPath),\n ctx,\n !stripRootTables,\n );\n\n const tablesChanged = stripRootTables\n ? stripRootOnlyTables(manifest)\n : pruneExcludedLiteralMembers(manifest);\n\n if (pathsChanged || tablesChanged) {\n await writeFile(cargoTomlPath, stringify(manifest));\n logger.debug(`rewrote ${cargoTomlPath}`);\n }\n};\n\n/** Primary resolution: realpath the path through pnpm symlinks, then look it up in pathMap. */\nconst resolveViaRealpath = async (\n originalDir: string,\n pathValue: string,\n pathMap: Map<string, string>,\n): Promise<string | undefined> => {\n const resolvedPath = await tryRealpath(join(originalDir, pathValue));\n return resolvedPath ? pathMap.get(resolvedPath) : undefined;\n};\n\n/** Fallback: match the path's leaf dir name against a discovered package (for already-`dependencies/…` paths). */\nconst resolveViaNameFallback = (pathValue: string, ctx: RewriteContext): string | undefined => {\n const segments = pathValue.split('/').filter(Boolean);\n const leafDir = segments.at(-1);\n if (!leafDir) return undefined;\n\n for (const [pkgName, realPath] of ctx.discovered) {\n // Direct match: \"dependencies/utils-solana-rbac\" → match \"utils-solana-rbac\"\n if (pkgName === leafDir) {\n return ctx.pathMap.get(realPath);\n }\n // Subdir match: \"dependencies/utils-solana-rbac/macros\" → match parent\n const parentDir = segments.at(-2);\n if (parentDir && pkgName === parentDir) {\n const subTarget = ctx.pathMap.get(join(realPath, leafDir));\n if (subTarget) return subTarget;\n }\n }\n return undefined;\n};\n\n/**\n * Rewrite every Cargo.toml in a copied dependency tree. The root manifest keeps its\n * root-only tables when it's a workspace (members inherit from them); all others strip them.\n */\nexport const rewriteCargoTomls = async (\n srcRoot: string,\n destRoot: string,\n tree: CollectedTree,\n ctx: RewriteContext,\n): Promise<void> => {\n for (const manifestDir of tree.manifestDirs) {\n const preserve = manifestDir === '.' && (await isWorkspaceRoot(destRoot));\n\n await rewriteCargoToml(\n join(srcRoot, manifestDir),\n join(destRoot, manifestDir, 'Cargo.toml'),\n ctx,\n !preserve,\n );\n }\n};\n"]}
|
package/dist/SPODHCGD.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { logger } from './UDDAJZY4.js';
|
|
2
|
+
import { removeExcludedFiles, COPY_EXTENSIONS } from './WKRDI535.js';
|
|
3
|
+
import { __name } from './VUOMXK5T.js';
|
|
4
|
+
import { realpath, stat, readdir } from 'fs/promises';
|
|
5
|
+
import { join, extname, basename, dirname } from 'path';
|
|
6
|
+
|
|
7
|
+
var tryRealpath = /* @__PURE__ */ __name(async (path) => {
|
|
8
|
+
try {
|
|
9
|
+
return await realpath(path);
|
|
10
|
+
} catch {
|
|
11
|
+
return void 0;
|
|
12
|
+
}
|
|
13
|
+
}, "tryRealpath");
|
|
14
|
+
var tryIsDirectory = /* @__PURE__ */ __name(async (path) => {
|
|
15
|
+
try {
|
|
16
|
+
return (await stat(path)).isDirectory();
|
|
17
|
+
} catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}, "tryIsDirectory");
|
|
21
|
+
var tryReaddir = /* @__PURE__ */ __name(async (dir) => {
|
|
22
|
+
try {
|
|
23
|
+
return await readdir(dir);
|
|
24
|
+
} catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
}, "tryReaddir");
|
|
28
|
+
var collectFiles = /* @__PURE__ */ __name(async (root, relativePath = "") => {
|
|
29
|
+
const dirs = [];
|
|
30
|
+
const files = [];
|
|
31
|
+
const manifestDirs = [];
|
|
32
|
+
const rawFileNames = await tryReaddir(join(root, relativePath));
|
|
33
|
+
const fileNames = removeExcludedFiles(rawFileNames).map((e) => join(relativePath, e));
|
|
34
|
+
for (const file of fileNames) {
|
|
35
|
+
if (await tryIsDirectory(join(root, file))) {
|
|
36
|
+
const subDir = await collectFiles(root, file);
|
|
37
|
+
if (subDir.files.length > 0) {
|
|
38
|
+
dirs.push(file, ...subDir.dirs);
|
|
39
|
+
files.push(...subDir.files);
|
|
40
|
+
manifestDirs.push(...subDir.manifestDirs);
|
|
41
|
+
} else {
|
|
42
|
+
logger.trace(`skip empty dir ${file}`);
|
|
43
|
+
}
|
|
44
|
+
} else if (COPY_EXTENSIONS.has(extname(file))) {
|
|
45
|
+
files.push(file);
|
|
46
|
+
if (basename(file) === "Cargo.toml") manifestDirs.push(dirname(file));
|
|
47
|
+
logger.trace(`collect ${file}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
dirs,
|
|
52
|
+
files,
|
|
53
|
+
manifestDirs
|
|
54
|
+
};
|
|
55
|
+
}, "collectFiles");
|
|
56
|
+
|
|
57
|
+
export { collectFiles, tryIsDirectory, tryReaddir, tryRealpath };
|
|
58
|
+
//# sourceMappingURL=SPODHCGD.js.map
|
|
59
|
+
//# sourceMappingURL=SPODHCGD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resolve/io.ts"],"names":["tryRealpath","path","realpath","undefined","tryIsDirectory","stat","isDirectory","tryReaddir","dir","readdir","collectFiles","root","relativePath","dirs","files","manifestDirs","rawFileNames","join","fileNames","removeExcludedFiles","map","e","file","subDir","length","push","logger","trace","COPY_EXTENSIONS","has","extname","basename","dirname"],"mappings":";;;;;;AAMO,IAAMA,WAAAA,iCAAqBC,IAAAA,KAAAA;AAC9B,EAAA,IAAI;AACA,IAAA,OAAO,MAAMC,SAASD,IAAAA,CAAAA;EAC1B,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAOE,MAAAA;AACX,EAAA;AACJ,CAAA,EAN2B,aAAA;AAQpB,IAAMC,cAAAA,iCAAwBH,IAAAA,KAAAA;AACjC,EAAA,IAAI;AACA,IAAA,OAAA,CAAQ,MAAMI,IAAAA,CAAKJ,IAAAA,CAAAA,EAAOK,WAAAA,EAAW;EACzC,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,KAAA;AACX,EAAA;AACJ,CAAA,EAN8B,gBAAA;AAQvB,IAAMC,UAAAA,iCAAoBC,GAAAA,KAAAA;AAC7B,EAAA,IAAI;AACA,IAAA,OAAO,MAAMC,QAAQD,GAAAA,CAAAA;EACzB,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,EAAA;AACX,EAAA;AACJ,CAAA,EAN0B,YAAA;AAqBnB,IAAME,YAAAA,mBAAe,MAAA,CAAA,OAAOC,IAAAA,EAAcC,YAAAA,GAAe,EAAA,KAAE;AAC9D,EAAA,MAAMC,OAAiB,EAAA;AACvB,EAAA,MAAMC,QAAkB,EAAA;AACxB,EAAA,MAAMC,eAAyB,EAAA;AAE/B,EAAA,MAAMC,eAAe,MAAMT,UAAAA,CAAWU,IAAAA,CAAKN,IAAAA,EAAMC,YAAAA,CAAAA,CAAAA;AACjD,EAAA,MAAMM,SAAAA,GAAYC,mBAAAA,CAAoBH,YAAAA,CAAAA,CAAcI,GAAAA,CAAI,CAACC,CAAAA,KAAMJ,IAAAA,CAAKL,YAAAA,EAAcS,CAAAA,CAAAA,CAAAA;AAElF,EAAA,KAAA,MAAWC,QAAQJ,SAAAA,EAAW;AAC1B,IAAA,IAAI,MAAMd,cAAAA,CAAea,IAAAA,CAAKN,IAAAA,EAAMW,IAAAA,CAAAA,CAAAA,EAAQ;AACxC,MAAA,MAAMC,MAAAA,GAAS,MAAMb,YAAAA,CAAaC,IAAAA,EAAMW,IAAAA,CAAAA;AACxC,MAAA,IAAIC,MAAAA,CAAOT,KAAAA,CAAMU,MAAAA,GAAS,CAAA,EAAG;AACzBX,QAAAA,IAAAA,CAAKY,IAAAA,CAAKH,IAAAA,EAAAA,GAASC,MAAAA,CAAOV,IAAI,CAAA;AAC9BC,QAAAA,KAAAA,CAAMW,IAAAA,CAAI,GAAIF,MAAAA,CAAOT,KAAK,CAAA;AAC1BC,QAAAA,YAAAA,CAAaU,IAAAA,CAAI,GAAIF,MAAAA,CAAOR,YAAY,CAAA;MAC5C,CAAA,MAAO;AACHW,QAAAA,MAAAA,CAAOC,KAAAA,CAAM,CAAA,eAAA,EAAkBL,IAAAA,CAAAA,CAAM,CAAA;AACzC,MAAA;AACJ,IAAA,CAAA,MAAA,IAAWM,eAAAA,CAAgBC,GAAAA,CAAIC,OAAAA,CAAQR,IAAAA,CAAAA,CAAAA,EAAQ;AAC3CR,MAAAA,KAAAA,CAAMW,KAAKH,IAAAA,CAAAA;AACX,MAAA,IAAIS,QAAAA,CAAST,IAAAA,CAAAA,KAAU,YAAA,eAA2BG,IAAAA,CAAKO,OAAAA,CAAQV,IAAAA,CAAAA,CAAAA;AAC/DI,MAAAA,MAAAA,CAAOC,KAAAA,CAAM,CAAA,QAAA,EAAWL,IAAAA,CAAAA,CAAM,CAAA;AAClC,IAAA;AACJ,EAAA;AACA,EAAA,OAAO;AAAET,IAAAA,IAAAA;AAAMC,IAAAA,KAAAA;AAAOC,IAAAA;AAAa,GAAA;AACvC,CAAA,EAzB4B,cAAA","file":"SPODHCGD.js","sourcesContent":["import { readdir, realpath, stat } from 'fs/promises';\nimport { basename, dirname, extname, join } from 'path';\n\nimport { logger } from '../logger';\nimport { COPY_EXTENSIONS, removeExcludedFiles } from './exclude';\n\nexport const tryRealpath = async (path: string): Promise<string | undefined> => {\n try {\n return await realpath(path);\n } catch {\n return undefined;\n }\n};\n\nexport const tryIsDirectory = async (path: string): Promise<boolean> => {\n try {\n return (await stat(path)).isDirectory();\n } catch {\n return false;\n }\n};\n\nexport const tryReaddir = async (dir: string): Promise<string[]> => {\n try {\n return await readdir(dir);\n } catch {\n return [];\n }\n};\n\nexport interface CollectedTree {\n /** directories containing copyable content, relative to root (no empties) */\n dirs: string[];\n /** copyable files (COPY_EXTENSIONS), relative to root (excluded subtrees pruned) */\n files: string[];\n /** dirs that directly contain a Cargo.toml (crate roots), relative to root; '.' is the root */\n manifestDirs: string[];\n}\n\n/**\n * Walk `root` once, applying exclusion per level and keeping only COPY_EXTENSIONS files.\n * Also records `manifestDirs` (dirs holding a Cargo.toml) so consumers don't re-scan.\n */\nexport const collectFiles = async (root: string, relativePath = ''): Promise<CollectedTree> => {\n const dirs: string[] = [];\n const files: string[] = [];\n const manifestDirs: string[] = [];\n\n const rawFileNames = await tryReaddir(join(root, relativePath));\n const fileNames = removeExcludedFiles(rawFileNames).map((e) => join(relativePath, e));\n\n for (const file of fileNames) {\n if (await tryIsDirectory(join(root, file))) {\n const subDir = await collectFiles(root, file);\n if (subDir.files.length > 0) {\n dirs.push(file, ...subDir.dirs);\n files.push(...subDir.files);\n manifestDirs.push(...subDir.manifestDirs);\n } else {\n logger.trace(`skip empty dir ${file}`);\n }\n } else if (COPY_EXTENSIONS.has(extname(file))) {\n files.push(file);\n if (basename(file) === 'Cargo.toml') manifestDirs.push(dirname(file));\n logger.trace(`collect ${file}`);\n }\n }\n return { dirs, files, manifestDirs };\n};\n"]}
|
package/dist/TOEFRNPD.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { rewriteCargoTomls } from './LQ26FJL3.js';
|
|
2
|
+
import { discoverPackages, isCrate } from './457ZJTJH.js';
|
|
3
|
+
import { collectFiles } from './SPODHCGD.js';
|
|
4
|
+
import { logger } from './UDDAJZY4.js';
|
|
5
|
+
import { __name } from './VUOMXK5T.js';
|
|
6
|
+
import { rm, mkdir, copyFile } from 'fs/promises';
|
|
7
|
+
import { join, resolve, relative } from 'path';
|
|
8
|
+
|
|
9
|
+
var buildDependenciesPathMap = /* @__PURE__ */ __name((targets) => {
|
|
10
|
+
const pathMap = /* @__PURE__ */ new Map();
|
|
11
|
+
for (const { npmPkgDir, depsPkgDir, tree } of targets) {
|
|
12
|
+
for (const dir of tree.manifestDirs) {
|
|
13
|
+
pathMap.set(join(npmPkgDir, dir), join(depsPkgDir, dir));
|
|
14
|
+
logger.trace(`map ${join(npmPkgDir, dir)} -> ${join(depsPkgDir, dir)}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
logger.debug(`built dependency path map: ${pathMap.size} entries`);
|
|
18
|
+
return pathMap;
|
|
19
|
+
}, "buildDependenciesPathMap");
|
|
20
|
+
var copyCollected = /* @__PURE__ */ __name(async (srcRoot, destRoot, tree) => {
|
|
21
|
+
await mkdir(destRoot, {
|
|
22
|
+
recursive: true
|
|
23
|
+
});
|
|
24
|
+
await Promise.all(tree.dirs.map((dir) => mkdir(join(destRoot, dir), {
|
|
25
|
+
recursive: true
|
|
26
|
+
})));
|
|
27
|
+
await Promise.all(tree.files.map((file) => copyFile(join(srcRoot, file), join(destRoot, file))));
|
|
28
|
+
}, "copyCollected");
|
|
29
|
+
var resolveCargoRoot = /* @__PURE__ */ __name(async (packageRoot, cargoDir) => {
|
|
30
|
+
if (cargoDir) {
|
|
31
|
+
const resolved = resolve(packageRoot, cargoDir);
|
|
32
|
+
if (!await isCrate(resolved)) {
|
|
33
|
+
throw new Error(`--cargo-dir ${cargoDir} does not contain a Cargo.toml`);
|
|
34
|
+
}
|
|
35
|
+
return resolved;
|
|
36
|
+
}
|
|
37
|
+
if (!await isCrate(packageRoot)) {
|
|
38
|
+
throw new Error(`${packageRoot} does not contain a Cargo.toml`);
|
|
39
|
+
}
|
|
40
|
+
return packageRoot;
|
|
41
|
+
}, "resolveCargoRoot");
|
|
42
|
+
var resolveDependencies = /* @__PURE__ */ __name(async ({ cwd, cargoDir } = {}) => {
|
|
43
|
+
const packageRoot = resolve(cwd ?? process.cwd());
|
|
44
|
+
const depsRoot = join(await resolveCargoRoot(packageRoot, cargoDir), "dependencies");
|
|
45
|
+
const discovered = /* @__PURE__ */ new Map();
|
|
46
|
+
await discoverPackages(packageRoot, discovered, /* @__PURE__ */ new Set());
|
|
47
|
+
if (discovered.size === 0) {
|
|
48
|
+
logger.info("No @layerzerolabs namespaced Cargo dependencies found in node_modules");
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
await rm(depsRoot, {
|
|
52
|
+
recursive: true,
|
|
53
|
+
force: true
|
|
54
|
+
});
|
|
55
|
+
await mkdir(depsRoot, {
|
|
56
|
+
recursive: true
|
|
57
|
+
});
|
|
58
|
+
const targets = await Promise.all(Array.from(discovered, async ([pkgName, npmPkgDir]) => {
|
|
59
|
+
const tree = await collectFiles(npmPkgDir);
|
|
60
|
+
logger.debug(`${pkgName}: collected ${tree.files.length} files, ${tree.dirs.length} dirs`);
|
|
61
|
+
return {
|
|
62
|
+
pkgName,
|
|
63
|
+
npmPkgDir,
|
|
64
|
+
depsPkgDir: join(depsRoot, pkgName),
|
|
65
|
+
tree
|
|
66
|
+
};
|
|
67
|
+
}));
|
|
68
|
+
const ctx = {
|
|
69
|
+
pathMap: buildDependenciesPathMap(targets),
|
|
70
|
+
discovered
|
|
71
|
+
};
|
|
72
|
+
logger.debug(`path map: ${ctx.pathMap.size} entries`);
|
|
73
|
+
await Promise.all(targets.map(async ({ pkgName, npmPkgDir, depsPkgDir, tree }) => {
|
|
74
|
+
await copyCollected(npmPkgDir, depsPkgDir, tree);
|
|
75
|
+
await rewriteCargoTomls(npmPkgDir, depsPkgDir, tree, ctx);
|
|
76
|
+
logger.debug(` ${pkgName} -> ${npmPkgDir}`);
|
|
77
|
+
}));
|
|
78
|
+
logger.info(`Resolved ${discovered.size} Cargo dependencies into ${relative(packageRoot, depsRoot) || "./dependencies/"}`);
|
|
79
|
+
}, "resolveDependencies");
|
|
80
|
+
|
|
81
|
+
export { buildDependenciesPathMap, resolveDependencies };
|
|
82
|
+
//# sourceMappingURL=TOEFRNPD.js.map
|
|
83
|
+
//# sourceMappingURL=TOEFRNPD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resolve/index.ts"],"names":["buildDependenciesPathMap","targets","pathMap","Map","npmPkgDir","depsPkgDir","tree","dir","manifestDirs","set","join","logger","trace","debug","size","copyCollected","srcRoot","destRoot","mkdir","recursive","Promise","all","dirs","map","files","file","copyFile","resolveCargoRoot","packageRoot","cargoDir","resolved","resolve","isCrate","Error","resolveDependencies","cwd","process","depsRoot","discovered","discoverPackages","Set","info","rm","force","Array","from","pkgName","collectFiles","length","ctx","rewriteCargoTomls","relative"],"mappings":"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","file":"TOEFRNPD.js","sourcesContent":["/**\n * Vendor @layerzerolabs Cargo dependencies from node_modules into a flat\n * dependencies/ directory with rewritten path deps, so a Rust package builds\n * without the rest of the monorepo.\n */\n\nimport { copyFile, mkdir, rm } from 'fs/promises';\nimport { join, relative, resolve } from 'path';\n\nimport { logger } from '../logger';\nimport { discoverPackages, isCrate, type VendorTarget } from './discover';\nimport type { CollectedTree } from './io';\nimport { collectFiles } from './io';\nimport type { RewriteContext } from './rewrite';\nimport { rewriteCargoTomls } from './rewrite';\n\n// ─── Path Map ───\n\n/** Maps each crate's npm package source path to its vendored dependencies/ location. */\nexport const buildDependenciesPathMap = (targets: VendorTarget[]): Map<string, string> => {\n const pathMap = new Map<string, string>();\n\n for (const { npmPkgDir, depsPkgDir, tree } of targets) {\n for (const dir of tree.manifestDirs) {\n pathMap.set(join(npmPkgDir, dir), join(depsPkgDir, dir));\n logger.trace(`map ${join(npmPkgDir, dir)} -> ${join(depsPkgDir, dir)}`);\n }\n }\n logger.debug(`built dependency path map: ${pathMap.size} entries`);\n return pathMap;\n};\n\n// ─── File Operations ───\n\n/** Copy a collected tree into destRoot. */\nconst copyCollected = async (\n srcRoot: string,\n destRoot: string,\n tree: CollectedTree,\n): Promise<void> => {\n await mkdir(destRoot, { recursive: true });\n await Promise.all(tree.dirs.map((dir) => mkdir(join(destRoot, dir), { recursive: true })));\n await Promise.all(\n tree.files.map((file) => copyFile(join(srcRoot, file), join(destRoot, file))),\n );\n};\n\n/** Resolves the Cargo root: `cargoDir` if provided, else `packageRoot`. Throws if no Cargo.toml. */\nconst resolveCargoRoot = async (packageRoot: string, cargoDir?: string): Promise<string> => {\n if (cargoDir) {\n const resolved = resolve(packageRoot, cargoDir);\n if (!(await isCrate(resolved))) {\n throw new Error(`--cargo-dir ${cargoDir} does not contain a Cargo.toml`);\n }\n return resolved;\n }\n\n if (!(await isCrate(packageRoot))) {\n throw new Error(`${packageRoot} does not contain a Cargo.toml`);\n }\n\n return packageRoot;\n};\n\n// ─── Public API ───\n\n/**\n * Entry point: vendor every @layerzerolabs Cargo crate reachable through node_modules\n * into dependencies/, with path deps rewritten to resolve locally.\n *\n * @param cwd pnpm package root (where node_modules/ lives). Default: process.cwd()\n * @param cargoDir Cargo crate directory to vendor into. Default: packageRoot\n */\nexport const resolveDependencies = async ({\n cwd,\n cargoDir,\n}: { cwd?: string; cargoDir?: string } = {}): Promise<void> => {\n const packageRoot = resolve(cwd ?? process.cwd());\n\n const depsRoot = join(await resolveCargoRoot(packageRoot, cargoDir), 'dependencies');\n\n const discovered = new Map<string, string>();\n await discoverPackages(packageRoot, discovered, new Set());\n\n if (discovered.size === 0) {\n logger.info('No @layerzerolabs namespaced Cargo dependencies found in node_modules');\n return;\n }\n\n // Rebuild dependencies/ from scratch each run.\n await rm(depsRoot, { recursive: true, force: true });\n await mkdir(depsRoot, { recursive: true });\n\n // Collect each package's tree once — copy, path map, and rewrite all reuse it.\n const targets: VendorTarget[] = await Promise.all(\n Array.from(discovered, async ([pkgName, npmPkgDir]) => {\n const tree = await collectFiles(npmPkgDir);\n logger.debug(\n `${pkgName}: collected ${tree.files.length} files, ${tree.dirs.length} dirs`,\n );\n return { pkgName, npmPkgDir, depsPkgDir: join(depsRoot, pkgName), tree };\n }),\n );\n\n const ctx: RewriteContext = {\n pathMap: buildDependenciesPathMap(targets),\n discovered,\n };\n logger.debug(`path map: ${ctx.pathMap.size} entries`);\n\n await Promise.all(\n targets.map(async ({ pkgName, npmPkgDir, depsPkgDir, tree }) => {\n await copyCollected(npmPkgDir, depsPkgDir, tree);\n await rewriteCargoTomls(npmPkgDir, depsPkgDir, tree, ctx);\n logger.debug(` ${pkgName} -> ${npmPkgDir}`);\n }),\n );\n\n logger.info(\n `Resolved ${discovered.size} Cargo dependencies into ${relative(packageRoot, depsRoot) || './dependencies/'}`,\n );\n};\n"]}
|
package/dist/UDDAJZY4.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { __name } from './VUOMXK5T.js';
|
|
2
|
+
import { createConsoleLogger, LogLevel } from '@layerzerolabs/logger-node';
|
|
3
|
+
export { LogLevel } from '@layerzerolabs/logger-node';
|
|
4
|
+
|
|
5
|
+
var logger = createConsoleLogger(LogLevel.INFO);
|
|
6
|
+
var setLogLevel = /* @__PURE__ */ __name((level) => {
|
|
7
|
+
logger = createConsoleLogger(level);
|
|
8
|
+
}, "setLogLevel");
|
|
9
|
+
var parseLogLevel = /* @__PURE__ */ __name((value) => {
|
|
10
|
+
switch (value?.toLowerCase()) {
|
|
11
|
+
case "trace":
|
|
12
|
+
return LogLevel.TRACE;
|
|
13
|
+
case "debug":
|
|
14
|
+
return LogLevel.DEBUG;
|
|
15
|
+
case "warn":
|
|
16
|
+
return LogLevel.WARN;
|
|
17
|
+
case "error":
|
|
18
|
+
return LogLevel.ERROR;
|
|
19
|
+
default:
|
|
20
|
+
return LogLevel.INFO;
|
|
21
|
+
}
|
|
22
|
+
}, "parseLogLevel");
|
|
23
|
+
|
|
24
|
+
export { logger, parseLogLevel, setLogLevel };
|
|
25
|
+
//# sourceMappingURL=UDDAJZY4.js.map
|
|
26
|
+
//# sourceMappingURL=UDDAJZY4.js.map
|